2012-08-04 1 views
3

Nous avons créé une application qui enregistre des flux de caméras web en utilisant Xuggler, mais la vidéo et l'audio sont séparés.Comment fusionner l'audio et la vidéo en Java

Nous devons fusionner et non concaténer ces deux fichiers.

Comment cela peut-il être fait en Java?

+0

avez-vous vraiment utiliser java pour cela, car il y a beaucoup d'outils pour le faire, si vous effectuez une recherche dans google –

+0

essentiellement notre application est applet java donc nous voulons un seul fichier d'enregistrement – kashif181

+0

Vous pouvez utiliser Xuggler pour le faire aussi. – 11101101b

Répondre

4

Si vous avez le fichier audio et vidéo, vous pouvez les fusionner en un seul fichier audio vidéo en utilisant FFmpeg:

  1. FFmpeg Télécharger: http://ffmpeg.zeranoe.com/builds/ fichier téléchargé
  2. Extrait de dossier spécifique, par exemple c: \ ffmpeffolder
  3. en utilisant cmd mo ve au dossier spécifique c: \ ffmpeffolder \ bin
  4. Exécutez la commande suivante: $ ffmpeg -i audioInput.mp3 -i videoInput.avi -acodec copy -vcodec copy outputFile.avi Ceci est. outputFile.avi sera le fichier résultant.
+0

Très utile vraiment maintenant si vous expliquez que ce soit possible par le code java – kashif181

+0

Si votre application est une applet Java, comme vous l'avez indiqué dans votre commentaire, et si vous avez besoin du film généré côté client, vous devez envoyer le les flux enregistrés sur le serveur, puis fusionnez ffmpeg sur le serveur et renvoyez le fichier encodé à l'applet. –

+0

Quelques bons liens sur le sujet: * http://www.catswhocode.com/blog/19-ffmpeg-commands-for-all-needs * http://flowplayer.org/forum/7/12671 Construire un mp4 (x264) sortie avec son mp3 qui est compatible avec la plupart videoplayers commande en utilisant ffmpeg: 'ffmpeg -i audiofile.mp3 -i moviefile.avi -acoded libfaac -vcodec libx264 output.mp4' Vous besoin d'avoir 'ffmpeg' intégré avec le support de' x264' et 'liblame' pour cela. Et attention aux violations de droits d'auteur en raison de licences mp3/x264, comment vous le faites ne me dérange pas;) – cristobal

1

Je recommanderais de regarder ffmpeg et de les fusionner en ligne de commande avec les arguments requis pour fusionner les fichiers vidéo et audio. Vous pouvez utiliser Java Process pour exécuter des processus natifs.

0

en fonction des formats, vous pouvez utiliser JMF, Java Media Framework, ce qui est ancien et n'a jamais été aussi grande, mais peut-être bon assez pour vos buts.

Si elle ne prend pas en charge vos formats, vous pouvez utiliser l'emballage FFMPEG qui, si je me souviens bien, fournit une interface JMF mais utilise FFMPEG: http://fmj-sf.net/ffmpeg-java/getting_started.php

1

Vous pouvez appeler ffmpeg en utilisant Java comme suit:

public class WrapperExe { 

public boolean doSomething() { 

String[] exeCmd = new String[]{"ffmpeg", "-i", "audioInput.mp3", "-i", "videoInput.avi" ,"-acodec", "copy", "-vcodec", "copy", "outputFile.avi"}; 

ProcessBuilder pb = new ProcessBuilder(exeCmd); 
boolean exeCmdStatus = executeCMD(pb); 

return exeCmdStatus; 
} //End doSomething Function 

private boolean executeCMD(ProcessBuilder pb) 
{ 
pb.redirectErrorStream(true); 
Process p = null; 

try { 
    p = pb.start(); 

} catch (Exception ex) { 
ex.printStackTrace(); 
System.out.println("oops"); 
p.destroy(); 
return false; 
} 
// wait until the process is done 
try { 
p.waitFor(); 
} catch (InterruptedException e) { 
e.printStackTrace(); 
System.out.println("woopsy"); 
p.destroy(); 
return false; 
} 
return true; 
}// End function executeCMD 
} // End class WrapperExe 
+0

Salut @codegeek, ne me dérange pas moi tirer une tangente ici, s'il s'agissait de flux en direct au lieu de fichiers audio ? comment diffuser comme il encode sans attendre que le fichier entier soit fini? – Matical

+0

Ensuite, utilisez: https://github.com/bramp/ffmpeg-cli-wrapper – 11101101b

Questions connexes