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