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.