transcodage h264/aac – h264/mp3 avec ffmpeg/x264
Je fais ça comme ça (je détaille pas, le man est là pour ça):
- $mes_options_audio (stéréo, 128kb/s, 48kHz):
- aac:
-acodec libfaac -ac 2 -ar 48000 -ab 128000
- mp3:
-acodec libmp3lame -ac 2 -ar 48000 -ab 128000
- $mes_options_vidéo (1024kb/s, 1280×720 – 16:9, baseline 3.0, ~24fps):
Celles-ci sont optimisées pour iPhone et autre cochonneries vendues par Apple:
-vcodec libx264 -threads 0 -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 1 -refs 1 -coder 1 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 21 -qmax 25 -vprofile baseline -level 30 -g 23.98 -crf 25 -async 2 -s 1280x720 -aspect 16:9 -r 23.98 -b:v 1024000 -vb 1024000 -minrate 972800 -maxrate 1075200 -bt 51200 -bufsize 1209600 -muxrate 1075200
Là, on fait presque du cbr (c’est un peu con, mais Apple l’impose pour ses jouets): «presque» parce qu’il y a une tolérance de 5% sur le débit demandé (voir -minrate/-maxrate par rapport à -vb ou -b:v.
En dehors du cas particulier Apple, on peut tout à fait augmenter cette tolérance, et passer -qmin à 1 et -qmax à 51. On peut aussi jouer avec l’option -crf et ajouter un -mixed_refs 1.
Quelques détails utiles:
- -bt : 5% de (-vb + -ab)
- -bufsize: (-vb + -ab) * 1000
- -muxrate: -bufsize + -bt
- $mon_container peut prendre n’importe laquelle de ces valeurs:
- mp4 (penser à passer par un fichier temporaire et à utiliser qt-faststart ensuite si vous voulez diffuser ce fichier sur Internet: ça évitera de devoir télécharger toute la vidéo avant de pouvoir la lire) ;
- mpegts ;
- flv (flash).
Utilisation:
ffmpeg -i ma_source $mes_options_vidéo $mes_options_audio -f $mon_container mon_fichier_transcodé
Dans le cas d’un fichier mp4 que je veux diffuser sur Internet, je fais plutôt comme ça:
ffmpeg -i ma_source $mes_options_vidéo $mes_options_audio -f mp4 fichier_temporaire
qt-faststart fichier_temporaire mon_fichier_transcodé
rm -f fichier_temporaire