Le blog de Jean David TECHER, un Réunionnais à Saint-Priest/Lyon

Aller au contenu | Aller au menu | Aller à la recherche


vendredi 7 octobre 2011

FFmpeg/Dialog:: Barre de progression de conversion vidéo sous Shell grâce à Dialog

Pour les habitués de FFmpeg, avoir une petit barre de progression vidéo, c'est toujours plus intéressant et plus ergonomique que les informations de conversion renvoyées par FFmpeg. J'ai donc tenté de voir s'il existait des solutions à ce sujet.

J'avais voulu le faire en testant le projet http://ffmpegprogress.sourceforge.net.. Manque de bol ca n'a pas marché sur mon serveur.

Finalement je me suis résigné à pouvoir le faire depuis dialog. Comme mon but est d'avoir une petite barre de progression pour la conversion, j'ai finalement trouvé une petite astuce à http://ftp.traduc.org/doc-vf/gazette-linux/html/2004/101/lg101-P.html. En effet, sur cette page une astuce est proposée pour simuler une bar de progression.

Du coup, je me suis fait un petit script shell en recourant donc à dialog et à l'astuce proposée .

1. Pré-requis

  • Il faut installer dialog
    apt-get install dialog
  • avoir Ffmpeg déjà installé

2. Exemple





3. Le script shell utilisé

Voici le script
FFMPEG_PATH="/opt/multimedia-testing-4/bin/ffmpeg";
FFMPEG_INPUT="/www/test/0.1-Beta/janadefi-daywith03.wmv";
FFMPEG_OUTPUT="/www/test/0.1-Beta/janadefi-daywith03.mp4";
FFMPEG_ARGUMENTS="-acodec libaacplus -ac 2 -ar 44100 -ab 64k -vcodec libx264 -crf 22  -threads 0 -b 550k -qmin 10 -qmax 30 -threads 0 -y";


FFMPEG_LOG="/tmp/ffmpeg_$$.log";
TIME_LOG="/tmp/ffmpeg_times_$$.log";

${FFMPEG_PATH} -i ${FFMPEG_INPUT} ${FFMPEG_ARGUMENTS} ${FFMPEG_OUTPUT} > ${FFMPEG_LOG} 2>&1 &

sleep 4;

Duration=$(grep Duration ${FFMPEG_LOG} | awk '{print$2}'|awk -F ":" '{printf("%d",$1*60+$2*60+$3);}')

Pourcentage=0;

(
while [ ${Pourcentage} -lt 100 ]
do
	grep 'time=' ${FFMPEG_LOG} > ${TIME_LOG}; 

	sed -i "s:.*time=::g;s: .*::g" ${TIME_LOG};

	OnTime=$(awk -F ":" '{printf("%d",$1*60+$2*60+$3);}' ${TIME_LOG});

	Pourcentage=$(awk -v OnTime=${OnTime} -v Duration=${Duration} '{printf("%d\n",OnTime/Duration*100);}' ${TIME_LOG});

	echo "${Pourcentage}"
	echo "XXX"
	echo "Informations\n\n* Input [${FFMPEG_INPUT}]\n  Duration = ${Duration} secondes\n  Size = $(du -hs ${FFMPEG_INPUT} | awk '{print$1}')\n\n* Output [${FFMPEG_OUTPUT}]\n  Duration = ${OnTime} secondes\n  Size = $(du -hs ${FFMPEG_OUTPUT} | awk '{print$1}')"
	echo "XXX"

	sleep 1;
done
) |
/usr/bin/dialog --title "FFMPEG Conversion" --gauge "Progress Bar FFmpeg" 20 90 0
Remarques concernant une éventuelle adaptation du script
  1. La variable FFMPEG_PATH est à adapter à votre path vers votre FFmpeg;
  2. sleep 4 a été mis afin de marquer une courte pause le temps que FFmpeg se lance pour effectuer les premières secondes de conversion;
  3. Pour gtkdialog, les valeurs 20 90 0 sont à adapter aux dimensions de votre fenêtre de terminal.

lundi 3 octobre 2011

FFmpeg 0.7.6/0.8.5 are out

L'équipe de FFmpeg a été très active en ce mois de septembre. A peine la version 0.8.4 était sortie que nous avons droit à des versions estampillées 0.7.6/0.8.5. Reléguant la new du site, il s'agit de bugfix avec support renforcée pour libaacplus:
4X Technologies demuxer
4xm decoder
ADPCM IMA Electronic Arts EACS decoder
ANM decoder
Delphine Software International CIN decoder
Deluxe Paint Animation demuxer
Electronic Arts CMV decoder
PTX decoder
QDM2 decoder
QuickDraw decoder
TIFF decoder
Tiertex Limited SEQ decoder
aac decoder
avi demuxer
avs demuxer
bink decoder
flic decoder
h264 decoder
indeo2 decoder
jpeg 2000 decoder,
libaac+ support
libx264 interface to x264 encoder
mov muxer
mpc v8 decoder
rasterfile decode
shorten decoder
sun raster decoder
unsharp filter
vmd audio decoder
vmd video decoder
wmapro decoder
wmavoice decoder
xan decoder

dimanche 2 octobre 2011

FFmpeg et libaacplus => FFmpeg more unredistribuable ???

Mise à jour du 2011/10/02: FFmpeg 0.8.5 is out. A peine j'ai écris ce billet que même pas 24h00 plus tard, cette version sort LOL

Depuis moins d'une semaine, FFmpeg annonce le support pour le projet libaacplus (news datée du 2011/09/28). Ce projet pour ceux qui connaissent a pour url: http://tipok.org.ua/node/17. Loin de moi l'idée de faire des tests de performance aac versus aac+ etc.... . Ce qui a surtout attiré mon attention concerne

  • la section "Important legal Notice" sur le site (voir en bas de page)
  • le fait que FFmpeg ait changé son fichier LICENCE incluse dans les sources, notamment
    external libraries:
    -------------------
    
    Some external libraries, e.g. libx264, are under GPL and can be used in
    conjunction with FFmpeg. They require --enable-gpl to be passed to configure
    as well.
    
    The OpenCORE external libraries are under the Apache License 2.0. That license
    is incompatible with the LGPL v2.1 and the GPL v2, but not with version 3 of
    those licenses. So to combine the OpenCORE libraries with FFmpeg, the license
    version needs to be upgraded by passing --enable-version3 to configure.
    
    The nonfree external libraries libfaac and libaacplus can be hooked up in FFmpeg.
    You need to pass --enable-nonfree to configure to enable it. Employ this option
    with care as FFmpeg then becomes nonfree and unredistributable.
    
  • En tenant en compte les recommandations fournies par l'équipe de développement de FFmpeg au niveau législatif résumé à http://ffmpeg.org/legal.html (Soit dit en passant que les recommendations restent quand même assez confuses)
Déjà que j'ai toujours eu tendance à compiler FFmpeg statiquement pour mon parc de machines personnels (3 machines physiques), j'en arrive à la conclusion en raison de l'interopérabilité qu'en France pour mes propres besoins personnels, je décide de compiler FFmpeg statiquement avec libaacplus
  • je ne peux faire usage du logiciel FFmpeg que mes propres besoins personnels. Cet usage est restreint à un cadre privé et personnel;
  • je ne suis pas autorisé à distribuer les binaires de quelque manière que ce soit;
A titre d'exemple de projet respectant celà (parmi d'autres), on peut citer TVersity qui ont modifié ffmpeg 0.6 et les ont publié

Tout celà est bien sûr évident. La question qui vient de suite à l'esprit, c'est pourquoi faire un billet sur des choses déjà connus.

Tout vient du fait que je n'ai repris mes investigations sur FFmpeg que depuis deux semaines et aujourd'hui j'ai bien un binaire statique complet.

FFmpeg compilé en statique

Ca c'est pour la bonne nouvelle!

La compilation de FFmpeg avec libfaac est connue depuis bien longtemps. A ce que j'ai pu comprendre, libaacplus serait plus performant que libfaac (dixit l'auteur de libaacplus). Quoique sur des sites de comparaison, AAC s'en sort mieux que AAC+. Ceci expliquerait donc sûrement la motivation de FFmpeg d'inclure le support pour libaacplus -ici support au sens de compilation FFmpeg avec libaacplus -. Il faut se rappeler que par le passé, ce support était possible à partir de patchs. On ne peut que se féliciter d'une tel support -ici support au sens de compilation Fmpeg avec libaacplus-. Je n'y suis pas opposé bien au contraire.

J'en viens quand même à me poser la question: est-ce que quelqu'un serait en mesure de fournir un descriptif détaillé de ce qui est possible au niveau législatif - notamment en France - avec toutes ces licences car c'est vraiment le foutoire! Faire des billets sur FFmpeg m'a toujours intéressé mais le côté législatif de la chose n'a jamais était ma tasse de thé vu qu'apparement c'est souvent question d'interprétation.