Flv to mp3

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 107 fois - Téléchargée 16 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
kariminf Messages postés 3 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 19 février 2009
19 févr. 2009 à 22:49
Il est Merveilleux, il faut just ajouter:
import java.io.*;
beeline Messages postés 83 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 9 juin 2009
20 févr. 2009 à 13:13
oups desolay
celphys2 Messages postés 8 Date d'inscription vendredi 24 mars 2006 Statut Membre Dernière intervention 3 mars 2009
3 mars 2009 à 12:54
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é.
cs_Proggy Messages postés 1 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 5 mars 2009
5 mars 2009 à 14:24
La cause du "java.io.EOFException" est le "=", voir ligne 29.

while(prevTagSize >= 0){

doit etre

while(prevTagSize > 0){

Voila!
legear Messages postés 9 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 28 avril 2009
28 avril 2009 à 20:07
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 !

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.