Flv to mp3

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 418 fois - Téléchargée 14 fois

Contenu du snippet

Cette source permet d'extraire un mp3 d'un fichier flv. Je suis à la recherche de testeurs.

C'est une simple traduction en Java de codes trouvés sur internet.

La description des headers d'un fichier flv se trouvent ici : http://osflash.org/flv

--

This source code is able to extract a MP3 track from a FLV.

Free to use, please report me errors or links using this code.

Source / Exemple :


import java.io.*;

public class FlvToMp3 {

	public static int convert(String input, String output){
        // reading
		FileOutputStream fos = null;
        DataOutputStream dos = null;
        // writting
        FileInputStream fis = null;
        DataInputStream dis = null;

        int bufsize = 4096;

        try{
            fis = new FileInputStream(input);
            BufferedInputStream bis = new BufferedInputStream( fis, bufsize);
            dis = new DataInputStream(bis);

            File file = new File(output);
            fos = new FileOutputStream(file);
            dos = new DataOutputStream(fos);

            int i = dis.readInt(); //FLV
            if (i == 0x464C5601){
            	dis.readByte(); // read flags
            	dis.readInt(); // read headers size
                int prevTagSize = dis.readInt();
                while(prevTagSize >= 0){ //
                	int eTagType = 0;
              	  	eTagType = dis.readByte(); // read tag type
              	    int nLength = getUI24(dis); // read tag lenght
              	    dis.readInt(); // read time stamp
              	    getUI24(dis); // streamID
              	    if (nLength > 0) {
              	        dis.readByte(); // read MediaType

              	        byte[] xbData = new byte[nLength - 1];
              	        dis.read(xbData, 0, nLength -1);

              	        // write only audio data
              	        if (eTagType == 0x08){
              	            dos.write(xbData, 0, nLength - 1);
              	        }
              	    }else{
              	    	break;
              	    }
              	    try{
              	    	prevTagSize = dis.readInt();
	            	}catch (Exception e) {
	                    dos.close();
	                    fos.close();
						return 0;
					}
                }
                dos.close();
                fos.close();
            }else{
            	return -2; // not flv
            }
        } catch (IOException e) {
        	e.printStackTrace();
        	return -1;
		}
		return 0;
	}

    public static void main(String[] args) {
    	int r = convert("C:\\flv.flv", "C:\\mp3.mp3");
    	System.out.print(r);
    }

    private static int getUI24(DataInputStream br){
        byte[] cbuff = new byte[3];
        try {
        	br.read(cbuff, 0, 3);
        } catch (IOException e) {
        }
        return bytesToInt(cbuff);
    }

    private static int bytesToInt(byte[] bytes)
    {
        int value = 0;
        for(int i=0; i<bytes.length; i++){
            value = value << 8;
            value += bytes[i] & 0xff;
        }
        return value;
    }
}

Conclusion :


On peut facilement extraire un avi dans le cas d'un FLV video en changeant une ligne :
if (eTagType == 0x09){

A voir également

Ajouter un commentaire

Commentaires

Messages postés
83
Date d'inscription
jeudi 20 décembre 2001
Statut
Membre
Dernière intervention
9 juin 2009

Non, le flv ne doit contenir que de l'audio, j'ai essayé de le modifier pour prendre extraire à partir de flv video, mais sans succès.
Messages postés
132
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
18 juin 2009

Bonsoir Beeline et les autres ^^

Merci pour ta contribution sur ce sujet, j'ai bien sur testé ton code avec les modifications apportées dans les commentaires et malheureusement, je n'arrive pas à extraire le mp3 du flv.
Ma question est la suivante: Ce code fonctionne-t-il pour un flv contenant de la vidéo et autres métadata ? Ou le flv doit-il contenir uniquement de l'audio ?

Merci d'avance pour cette précision.

Cordialement,

StimL
Messages postés
9
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
28 avril 2009

Bonjour ! Vraiment bravo pour ce bout de code !

J'ai quand même un soucis pour certains fichiers FLV, le résultat ne peut être lu :

Le fichier FLV de cette vidéo par exemple :
http://www.youtube.com/watch?v=XMzs_3NxEEI

Cela provient-il d'un bug dans la source ?

Merci !
Messages postés
1
Date d'inscription
mercredi 24 mars 2004
Statut
Membre
Dernière intervention
5 mars 2009

La cause du "java.io.EOFException" est le "=", voir ligne 29.

while(prevTagSize >= 0){

doit etre

while(prevTagSize > 0){

Voila!
Messages postés
8
Date d'inscription
vendredi 24 mars 2006
Statut
Membre
Dernière intervention
3 mars 2009

La conversion MP3 fonctionne bien même si j'obtiens en fin de programme une "java.io.EOFException".

La conversion AVI me donne un fichier non lisible. C'est une bonne initiative qui gagnerait avec une petite interface SWING mais l'algorithme doit etre légèrement retouché je pense. Je recherche de mon coté.
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.