EXTRACTION AUDIO FLV VERS MP3

cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 - 14 janv. 2008 à 16:12
bubulemaster Messages postés 19 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mars 2010 - 17 sept. 2008 à 14:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45422-extraction-audio-flv-vers-mp3

bubulemaster Messages postés 19 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mars 2010
17 sept. 2008 à 14:38
Bonjour,

j'ai cherché sur internet et sur le site de macromedia, je ne trouve pas la doc du format FLV.
Je voudrais juste connaitre la durée et la dimension de la vidéo.

Merci
pjbou Messages postés 1 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 7 septembre 2008
7 sept. 2008 à 00:18
Bonjour!
Le code a l'air très complet et semble bien marcher pour les autres, mais je suis incapable de l'insérer dans mon appli VB. J'utilise VB Express 2008. Quand je le colle dans un module, j'ai un 40aine d'erreurs qui apparaissent... Je suis débutant, et je ne vois vraiment pas comment résoudre le problème.
Merci!
GEDDi Messages postés 206 Date d'inscription lundi 22 novembre 1999 Statut Membre Dernière intervention 3 juillet 2008
31 janv. 2008 à 01:54
Hello,

Merci pour ton code!
Je l'ai adapté au FBSL :)
Voici le code pour celles et ceux que ça intéresse :
#AppType CONSOLE

Dim mnIn As Integer, mnOut As Integer
Dim %i, $sBuff, %nPos

Flv2Mp3( "Stupeflip - Je fume pu d'shit.flv" )

Function Flv2Mp3(ByVal szFLVFile As String) As Integer
    mnIn = FileOpen( szFLVFile, BINARY_INPUT )
    Flv2Mp3 = False
    If (ReadUInt32() = &H464C5601) Then
        ReadUInt8() 'flags
        nPos = ReadUInt32()

        FileSeek( mnIn, nPos )'+1
        ReadUInt32() 'prevTagSize

        Do Until FileEof(mnIn)
            ReadTag()
            ReadUInt32() 'prevTagSize
        Loop

        If mnOut Then
            Flv2Mp3 = True
            FileClose( mnOut  )
            mnOut = 0
        End If
    End If
    FileClose( mnIn )
End Function

Sub ReadTag()
Dim eTagType As Integer, eMediaType As Integer, nLength As Integer, xbData As String
Static xTotal As Integer

    eTagType = ReadUInt8()
    nLength  = ReadUInt24()
    ReadUInt32() 'timeStamp
    ReadUInt24() 'streamID

    If nLength Then
        eMediaType = ReadUInt8()
        xbData = ReadBytes(nLength - 1)
        '# Audio et de type MP3        If (eTagType &H8) And (eMediaType \ 16) 2 Then
            If mnOut = 0 Then
                xTotal = 0
                mnOut = FileOpen( ".\out.mp3", BINARY_NEW )
            End If
            xTotal = xTotal + nLength
            FilePut( mnOut, xbData )
            'Locate(5, 5): Print xTotal, " MP3 bytes written"
        End If
    End If
End Sub

Function ReadBytes(vnLength As Integer)
    sBuff = FileGet(mnIn, vnLength): Return sBuff
End Function

Function ReadUInt32() As Integer
    sBuff = FileGet( mnIn, 4): Return CVI(sBuff, 1)
End Function

Function ReadUInt24() As Integer
    sBuff = FileGet( mnIn, 3): Return CVI(sBuff, 1)
End Function

Function ReadUInt8() As Integer
    sBuff = FileGet( mnIn, 1): Return CVI(sBuff, 1)
End Function


Enjoy!
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 janv. 2008 à 10:00
la doc est dispo chez macromédia ^^

CrackPath va me reservir...
j'avais codé tout un tas de conditions, c'etait sacrément tordu, et j'avais pas cette même garantie de bien gérer tous les cas. Des fois les choses les plus simples...

GetUnique a été codée y'a longtemps...

ces deux fonctions sont d'ailleurs sur Codyx, pour les garder sous le coude
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
18 janv. 2008 à 09:44
Ebartsoft>C'est justement parce que j'avais reçu un coup de fil que je me suis dit que j'avais pas fermé ma balise.Pfiouuu, je suis pas passé loin !

Renfield>Super commenté, ça fait plaisir ! très bien tes fonctions CrackPath et surtout GetUnique. Où as-tu appris comment était constitué un fichier flv ?

++
Moustachu
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 janv. 2008 à 21:44
la suite ?

ben j'ai ça en local...
en "Sample" d'une sorte de proxy http
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
17 janv. 2008 à 21:12
moustachu> oulaaa malheureux fait gaffe faut toujours fermer la balise en mode hypocrite sinon on fini au gouvernement :p

Ren> [mode semi-pressé de voir la suite = tru] c'est pour quand le mode avec les socket hein dit c'est pour quand [mode semi-pressé de voir la suite = falçe]
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 janv. 2008 à 14:32
j'oubliais...

seule la version rapide (qui utilise entre autres le FileMapping) a été mise a jour.
la version VB ne changera pas
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 janv. 2008 à 14:31
Mis à jour.

j'ai commenté

et il y a maintenant deux façons de faire:

Dim sFileName As String
Dim sFolder As String
sFolder = "E:\Deezer"
sFileName = Dir$(sFolder & "*.flv")
Do While LenB(sFileName)
Flv2Mp3 sFolder & sFileName, sFolder & "Mp3"
sFileName = Dir$()
Loop

ou bien

Dim xbData() As Byte
Open "E:\Deezer\Untitled - 83_.flv" For Binary Access Read As #1
ReDim xbData(LOF(1))
Get #1, , xbData
Close #1
Flv2Mp3 xbData, "E:\Deezer\Mp3"

Donc soit:
- Nom du fichier Flv source
- Tableau de Byte (contenu du fichier)

comme je l'ai dit plus haut, ca évite de passer par un fichier intermédiaire dans le cadre de fichiers reçus en live...

concernant le second paramètre, plusieurs cas sont possibles :
- il est possible de le laisser vierge.
1/ depuis un fichier, on écrit dans un fichier portant le même nom (extension mp3)
2/ depuis un flux, App.Path & "\Untitled.mp3"
- Si vous spécifiez un nom de dossier, ou un nom de fichier, il sera complété...

à noter que la fonction n'écrasera aucun fichier: elle incrémentera les noms de fichiers
à noter également que la fonction va s'assurer que l'arborescence de sortie existe bien (ou la créer si besoin est).
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
17 janv. 2008 à 09:49
3 commentaires en deux minutes, j'aurais pu condenser...
[Mode chieur = On]Ca aurait été bien un peu plus de commentaires, là, on dirait presque du C ^^[Mode chieur = Off]

++
Moustachu
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 janv. 2008 à 09:47
je vais modifier un peu le module, pour pouvoir lire depuis un flux en mémoire, pas forcément depuis un fichier...
parce que mes sockets interceptent un flux, hein, pas un fichier ...

alors si je peux éviter de passer par un fichier .flv intermédiaire.

je ne sais pas si le mode hypocrite est nécessaire, je ne fait que jouer avec ce qui vient sur mon poste après tout...
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
17 janv. 2008 à 09:43
Ouppsss...il faut fermer les balises !
[mode hypocrite=off]

Merci pour ce code. très instructif. Surtout d'avoir les deux méthodes.

++
Moustachu
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
17 janv. 2008 à 09:42
[mode hypocrite=on]
C'est quoi un mp3
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
14 janv. 2008 à 17:37
[Mode chieur = On] Ca aurait ete bien d'avoir les deux methodes pour les debutants qui debutent :p [Mode chieur = Off]

Si la fonction est destiné à etre appelé en continu pourquoi ne pas en faire une classe avec genre "Open" "Convert" "Close" ce qui permettrait de tirer un max de profit du mapping. Sinon autant ouvrir/lire/ecrire

(c'etait peut etre a mettre dans le mode chieur ça non ?)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 janv. 2008 à 17:27
Comme mentionné dans la MàJ, j'ai passé le code de lecture au FileMapping, et modifié les lectures qui n'étaient que des skip par de simples incrémentation du pointeur de lecture...
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
14 janv. 2008 à 16:19
Ohlala je clique pour voir le code vite fait et la je tombe sur quoi !!!

"Dim xbBytes(2) As Byte"
"CopyMemory ReadUInt24, xbBytes(0), 4"

Copier 4 octets quand on en a que 3 c'est pas bieeeeen !
Bon VB align tout sur 4 donc tu risque rien mais bon par principe :p

Aller je regarde pas plus sinon je vais ecrire un roman et oui quand on aime on ne compte pas. Enfin ça fait toujours plaisir de voir une de tes sources.

@+
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 janv. 2008 à 16:17
'lut EB.

euh... je m'interesse en fait pas trop aux vidéos, pas le temps de les regarder ^^
le Mp3 en fond dans les oreilles, pas besoin de lacher l'IDE des yeux...

dans l'absolu, ma source est mauvaise, puisqu'elle accède sans arrêt aux fichiers... on pourrait les mapper en mémoire, et faire de la voltige, mais bon, le temps de traitement semble correct, pour le moment.
j'y reviendrais peut etre, si le besoin s'en fait sentir.
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
14 janv. 2008 à 16:12
M%$!de tu ma eu de vitesse, bon faut dire que la source traine sur mon pc depuis Aout dernier.

Bien joué :p

Bon et pour la video ? hein hein ? J'ai vu les source de flvsplitter (c#) tout est dedans.

@+