Utiliser simplement FFMpeg

FFMpeg est un outil en ligne de commande permettant de convertir des fichiers audio et vidéo dans de multiples formats. Il est distribué sous la forme d’une librairie opensource. Qui dit ligne de commande, dit exécutable sur un serveur!! Cependant, son utilisation se révèle, du moins au premier abord, assez mystérieuse… Je vais donc vous donner quelques astuces pour le prendre en main rapidement.

Projets utilisant FFMpeg

Cet outil étant libre de droits, on le retrouve dans de nombreux logiciels, plus ou moins connus, comme DivXtoDVD, Mobile Media Converter ou encore PlayStation Portable Video Converter (vous pouvez consulter la liste exhaustive ici).

Mais l’outil qui va nous intéresser dans cet article est Pazera Free FLV to AVI Converter. En effet, il offre une interface graphique parfaite pour préparer ffmpeg à une utilisation sur serveur.

L’outil de Pazera

Voici comment se présente son interface :


Comme vous pouvez le constater, malgré un aspect un peu chargé au premier coup d’oeil, l’ensemble est plutôt clair et tout est visible sur un seul écran.

Si vous regardez la documentation de ffmpeg, vous verrez des exemples de fonctionnement comme celui-ci :

ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg

Pas simple donc, même avec la doc, de connaître tous les arguments à utiliser, pour passer de tel format à tel format, activer tel codec audio/video...

C’est à cela que va donc nous servir Pazera. Grâce à son interface simpliste, vous n’avez qu’à sélectionner toutes les options que vous désirez et exporter la configuration ainsi créée avec File -> Save Bat File. Vous obtiendrez un fichier ressemblant à celui-ci :

@echo off
set ffmpeg="C:\logiciels\Red5\webapps\WebCamMailer\tools\ffmpeg\ffmpeg.exe"
set VCodec=-vn
set VParams=
set ACodec=-acodec wmav2
set AParams=-ab 128k -ar 44100 -ac 2
set AdvParams=-s 320x240
set AddParams=
%ffmpeg% -y -i "C:\Users\PeF\Desktop\mozinor_test.flv" %VCodec% %VParams% %ACodec% %AParams% %AdvParams% %AddParams% "C:\Users\PeF\Desktop\mozinor_test.avi"
pause

Et voilà, rien de plus simple! Une ligne de commande toute prête à être exécutée sur un serveur! Qui plus est, le fichier généré est très lisible et permet de facilement ajuster les paramètres au besoin à la main.

Exemple d’utilisation dans une classe JAVA

Maintenant, le plus important, voilà de quoi exécuter votre ligne de commande sur un serveur Java :

//on crée un processBuilder pour pouvoir récupere les logs de ffmpeg
ProcessBuilder builder = new ProcessBuilder(FLV2AVI_COMMAND_ARGS);
//on redirige le ErrorStream car FFMpeg envoie par defaut ses logs dans le stderr et pas stdout
builder.redirectErrorStream(true);
Process process = builder.start();
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
 sb.append(line).append("\n");
}
 
int exit = process.waitFor(); // 0 = exit normally
response = "OK";

Le principe est de construire un Process qui lancera notre commande et attendra la fin de son exécution avant de continuer le script.

Petite astuce supplémentaire : pour récupérer les logs de ffmpeg, on doit rediriger le flux d’erreur (stderr) vers la sortie standard (stdout). En effet, par défaut, ffmpeg est compilé de telle façon que toutes ses sorties sont traitées comme erreur. Pour les plus courageux, pour éviter ce workaround, vous pouvez toujours vous remonter les manches, modifier le code de ffmpeg et le recompiler!


Fichier(s) joint(s) :

0 commentaires: