Comment traduire les options HandbrakeCLI en options FFmpeg?

13

J'ai un tas de paramètres de ligne de commande qui fonctionnent pour le frein à main, mais parfois sur certaines vidéos (je ne sais pas pourquoi), le frein à main lève "Exception de mémoire insuffisante". Je me demandais si je pouvais trouver les mêmes touches d'options et le faire avec FFmpeg, mais cela ne semble pas si facile à faire.

FFmpeg n'a parfois pas ces options ou fait des trucs par défaut. Par exemple, je ne sais pas comment faire anamorphique personnalisé avec FFmpeg. Pour moi, il est très important que les vidéos résultantes soient aussi bonnes que si elles étaient faites avec un frein à main. Voici la ligne pour le frein à main:

HandBrakeCLI.exe --input "d:\input.mpg" --output "d:\output.mp4" --rate 29.97 --cfr --arate 44.1 --format mp4 --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0 --encoder x264 --vb 5200 --aencoder faac --ab 128 --mixdown stereo -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200:level=42:bframes=2:min-keyint=60:keyint=60:ref=4:me=umh:merange=64:subme=7:8x8dct:cabac=1  -v3 -2 -a none

Comment puis-je transformer cela en une commande FFmpeg?

iLemming
la source

Réponses:

20

Handbrake utilise l'encodeur x264 pour la conversion vidéo. Il y a un site avec un aperçu de toutes les options x264 et de leurs homologues FFmpeg . Cependant, ceux-ci sont un peu obsolètes et certaines de ces options ne fonctionnent plus ou ont peut-être été renommées. Vous devez utiliser les profils x264 pour la plupart des options de détail, mais nous y arriverons.

De nombreuses options de base du frein à main (par exemple, la fréquence d'images) ne sont pas spécifiques à x264, et elles sont dispersées dans la documentation en ligne FFmpeg .

Avant de commencer, veuillez vérifier que vous utilisez une version récente de FFmpeg. Leur site de téléchargement a des versions statiques pour tous les principaux systèmes d'exploitation.

Allons-y:

  • --input "d:\input.mpg" --output "d:\output.mp4"

    La syntaxe FFmpeg est ffmpeg -i input.mpg … d:\output.mp4.

  • --rate 29.97

    Spécifiez la fréquence d'images vidéo avec -r 29.97. (Le frein à main --cfrdéfinit simplement une fréquence d'images constante. Pas nécessaire ici).

  • --arate 44.1

    Réglez la fréquence d'échantillonnage audio avec -ar 44100(en Hz).

  • --format mp4

    Pas nécessaire car FFmpeg sait que vous voulez MP4.

  • --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0

    Cela ne fait rien d'autre que de régler la taille sur 1920 × 1080. En FFmpeg, faire avec -s:v 1920x1080, ou si vous souhaitez utiliser les filtres, -filter:v "scale=1920:1080".

  • --encoder x264 --vb 5200

    Réglez l'encodeur avec -c:v libx264et le débit binaire sur constant avec -b:v 5200K. Notez que nous ne sommes pas encore arrivés en ce qui concerne les paramètres de qualité.

  • --aencoder faac --ab 128 --mixdown stereo

    Similaire à ci-dessus, avec -c:a libfaac -b:a 128K -ac 2. Notez que FAAC n'est plus pris en charge dans FFmpeg; utilisez plutôt l'encodeur FFmpeg intégré avec -c:a aac -b:a 128K.

  • -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200

    Cela définit le mode d'encodage sur VBV qui cible un scénario de streaming au lieu d'un simple débit binaire constant ou d'une qualité constante. La qualité constante est également appelée CRF , la valeur par défaut pour x264 - elle est appelée «Facteur de taux» dans le frein à main. Alors que CRF vous donne généralement la meilleure qualité d'encodage, le mode VBV vous donne un fichier mieux adapté à la diffusion en ligne ou pour certains appareils aux capacités limitées.

    Pour définir VBV, utilisez les options -maxrate 5200Ket -bufsize 5200Kdans ffmpeg.

    Pour définir CRF, utilisez -crf 23dans ffmpeg.

  • level=42

    Utilisez -level 42. Il s'agit du niveau H.264 .

  • bframes=2:min-keyint=60:keyint=60:ref=4

    Réglez le nombre de cadres B avec -bf 2. L'intervalle d'image clé minimum est défini avec -keyint_min 60et l'intervalle maximum avec -g 60. Le nombre d'images de référence est défini avec -refs 4.

  • me=umh:merange=64:subme=7:8x8dct:cabac=1

    Ce sont des options que vous pouvez définir dans ffmpeg en plus avec -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1- comme tout autre paramètre d'encodeur x264 qui n'est pas directement mappé aux options ffmpeg.

    Voici la version "TL; DR" si vous êtes paresseux, ne vous souciez pas des détails, ou si les choses ne fonctionnent pas: utilisez -preset:v medium(ou laissez-le de côté, car le préréglage moyen est par défaut). Les préréglages x264 choisissent un ensemble d'options qui échangent la vitesse d'encodage pour l'efficacité de la compression. Ils sont commodément nommés à partir ultrafast, superfast, veryfast, faster, fast, mediumà slow, sloweret veryslow. Choisissez ce avec quoi vous vous sentez à l'aise.

Donc, pour résumer, la version longue:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -level 42 -bf 2 -keyint_min 60 -g 60 -refs 4 -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1 -c:a aac -b:a 128K -ar 44100 d:\output.mp4

Ou le court que j'utiliserais (avec l'encodage VBV et quelques options de détail supprimées):

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -c:a aac -b:a 128K -ar 44100 d:\output.mp4

Passer à un encodage de qualité constante pour une conversion tout usage, utilisez-le et changez le -crfparamètre de 18 à 28, où plus bas signifie une meilleure qualité et 23 par défaut:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -crf 23 -c:a aac -b:a 128K -ar 44100 d:\output.mp4
slhck
la source
Haha @slhck, juste au moment où je mettais la touche finale à ma réponse, vous allez donner une meilleure réponse.
evilsoup