Encodage vidéo Galaxy ACE avec FFMPEG
Nous allons utiliser ffmpeg pour transformer une vidéo (.flv, .avi, .mp4 ...) non compatible en une vidéo capable d'être lu sur le Samsung Galaxy ACE (Android 2.3.6).
En sachant que les téléphones sous Android ne peuvent que lire des vidéos .mp4 "Baseline Profile" comme l'Ipod 3GS, alors que l'Iphone 4 peut lire les .mp4 "Main Profile" (comme la PSP).
Bien sûr il faut prendre une vidéo source la plus belle possible, car un réencodage ne peut pas l'améliorer même si un encodage 3 passes peut "dépixelliser" certaines images.
Voici le script utilisé en se basant sur une vidéo de 3m52s faisant 13 Mo et au format .flv (vidéo h264 et audio aac).
Encodage simple :
ffmpeg -threads 0 -i Sexion_D_Assaut_Noir.flv -vf scale="min(480\, iw*16/9):-1" -c:v libx264 -b:v 384k -vprofile baseline -level 30 -x264opts frameref=3:8x8dct=0:b_pyramid=0 -bf 0 -coder 0 -c:a libvo_aacenc -b:a 96k -ac 2 Sexion_D_Assaut_Noir_une.passe.mp4
Encodage complexe en 3 passes (plus long mais vidéo plus belle avec la même taille) :
1ère passe : ffmpeg -threads 0 -i Sexion_D_Assaut_Noir.flv -vf scale="min(480\, iw*16/9):-1" -c:v libx264 -b:v 393k -vprofile baseline -level 30 -x264opts frameref=3:8x8dct=0:b_pyramid=0:weight_b -g 250 -keyint_min 25 -bf 0 -coder 0 -sc_threshold 40 -b_strategy 2 -flags +loop -partitions +parti4x4+partp8x8+partb8x8 -me_method umh -me_range 16 -subq 9 -trellis 2 -pass 1 -passlogfile passfile.fpf -an -y Sexion_D_Assaut_Noir_3.passes.mp4
2ème passe : ffmpeg -threads 0 -i Sexion_D_Assaut_Noir.flv -vf scale="min(480\, iw*16/9):-1" -c:v libx264 -b:v 393k -vprofile baseline -level 30 -x264opts frameref=3:8x8dct=0:b_pyramid=0:weight_b -g 250 -keyint_min 25 -bf 0 -coder 0 -sc_threshold 40 -b_strategy 2 -flags +loop -partitions +parti4x4+partp8x8+partb8x8 -me_method umh -me_range 16 -subq 9 -trellis 2 -pass 3 -passlogfile passfile.fpf -an -y Sexion_D_Assaut_Noir_3.passes.mp4
3ème passe : ffmpeg -threads 0 -i Sexion_D_Assaut_Noir.flv -vf scale="min(480\, iw*16/9):-1" -c:v libx264 -b:v 393k -vprofile baseline -level 30 -x264opts frameref=3:8x8dct=0:b_pyramid=0:weight_b -g 250 -keyint_min 25 -bf 0 -coder 0 -sc_threshold 40 -b_strategy 2 -flags +loop -partitions +parti4x4+partp8x8+partb8x8 -me_method umh -me_range 16 -subq 9 -trellis 2 -pass 2 -passlogfile passfile.fpf -c:a libvo_aacenc -b:a 96k -ac 2 -y Sexion_D_Assaut_Noir_3.passes.mp4
Explications :
ffmpeg : programme d'encodage
-threads 0 : utilise tous les coeurs d'un multi-coeurs
-i Sexion_D_Assaut_Noir.flv : film.avi, clip.mp4, bandeannonce.flv... Quasiment tous les types de vidéos existant
-vf scale="min(480\, iw*16/9):-1" : recadre l'image avec une longueur de 480 pixels et calcule la largeur, avec un ratio de 16/9
-c:v libx264 : utilise le codec x264 (h264)
-b:v 384k : bitrate vidéo utilisé. Calcul : ((14 Mo * 8192) / (4 Min. * 60)) * 1024 - 96000 = 381 000 = 393k
-vprofile baseline -level 30 : important. Indique la version du codec x264 a utilisé et son niveau 3.0
-x264opts frameref=3:8x8dct=0:b_pyramid=0:weight_b : pour empêcher ffmpeg d'utiliser des options incompatibles avec le "Baseline Profile"
-g 250 -keyint_min 25 : indique l'emplacement des images-clés. Si vidéo en 23,97 (24000/1001), utiliser -g 240 -keyint_min 24 et si vidéo en 29,97 (30000/1001) utiliser -g 300 -keyint_min 30
-bf 0 -coder 0 : pour empêcher ffmpeg d'utiliser des options incompatibles avec le "Baseline Profile", les B-Frames et le CABAC
-sc_threshold 40 -b_strategy 2 -flags +loop -partitions +parti4x4+partp8x8+partb8x8 -me_method umh -me_range 16 -subq 9 -trellis 2 : optimisation au maximum de l'encodage x264
-pass 2 : utiliser pass 1, pass 3 ou pass 2 selon l'étape d'encodage. Les passes 2 et 3 sont inversées
-passlogfile passfile.fpf : indique le nom du fichier qui va contenir les informations récupérées par les "pass"
-c:a libvo_aacenc -b:a 96k -ac 2 : utilise le codec audio AAC avec un bitrate de 96 kbits/s et en stéréo
-y Sexion_D_Assaut_Noir_3.passes.mp4 : nom du fichier de sortie avec écrasement si fichier déjà existant
http://www.dailymotion.com/video/xp9mkeVersion une passe : Maitre Gims (Sexion D\'Assaut) - Noir (une passe) (32)
Version trois passes : Maitre Gims (Sexion D\'Assaut) - Noir (trois passes) (35)
Versions de FFMPEG utilisées :
32 bits : FFmpeg git-a4c22e3 32-bit Static ou FFmpeg a4c22e3 win32 static (19)
64 bits : FFmpeg git-a4c22e3 64-bit Static ou FFmpeg a4c22e3 win64 static (26)
Source pour récupérer FFMPEG pour windows (mise à jour très régulièrement) : Zeranoe



