Wie übersetze ich HandbrakeCLI-Optionen in FFmpeg-Optionen?

13

Ich habe eine Reihe von Befehlszeileneinstellungen, die für die Handbremse funktionieren, aber manchmal löst die Handbremse bei einigen Videos (ich habe keine Ahnung warum) die Ausnahme "Nicht genügend Speicher" aus. Ich habe mich gefragt, ob ich die gleichen Optionstasten finden und mit FFmpeg machen kann, aber es scheint nicht so einfach zu sein.

FFmpeg hat manchmal entweder diese Optionen nicht oder macht standardmäßig Sachen. Zum Beispiel weiß ich nicht, wie man mit FFmpeg benutzerdefinierte anamorphotische Aktionen ausführt. Für mich ist es sehr wichtig, dass die resultierenden Videos so gut sind, als wären sie mit der Handbremse fertig. Hier ist die Zeile für Handbremse:

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

Wie verwandle ich dies in einen FFmpeg-Befehl?

iLemming
quelle

Antworten:

20

Handbremse verwendet den x264-Encoder für die Videokonvertierung. Es gibt eine Website mit einer Übersicht aller x264-Optionen und ihrer FFmpeg-Gegenstücke . Diese sind jedoch etwas veraltet und einige dieser Optionen funktionieren nicht mehr oder wurden möglicherweise umbenannt. Sie sollten die x264-Profile für die meisten Detailoptionen verwenden - aber wir werden es schaffen.

Viele der grundlegenden Handbremsoptionen (z. B. Bildrate) sind nicht x264-spezifisch und über die FFmpeg-Online-Dokumentation verteilt .

Bevor wir beginnen, überprüfen Sie bitte, ob Sie eine aktuelle FFmpeg-Version verwenden. Ihre Download-Site verfügt über statische Builds für alle wichtigen Betriebssysteme.

Lass uns gehen:

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

    Die FFmpeg-Syntax lautet ffmpeg -i input.mpg … d:\output.mp4.

  • --rate 29.97

    Geben Sie die Videobildrate mit an -r 29.97. (Handbremse stellt --cfrnur eine konstante Bildrate ein. Wird hier nicht benötigt).

  • --arate 44.1

    Stellen Sie die Audio-Abtastrate mit -ar 44100(in Hz) ein.

  • --format mp4

    Wird nicht benötigt, da FFmpeg weiß, dass Sie MP4 möchten.

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

    Dies macht nichts anderes, als die Größe auf 1920 × 1080 einzustellen. Tun Sie dies in FFmpeg mit -s:v 1920x1080oder wenn Sie die Filter verwenden möchten -filter:v "scale=1920:1080".

  • --encoder x264 --vb 5200

    Stellen Sie den Encoder mit -c:v libx264und die Bitrate auf konstant mit -b:v 5200K. Beachten Sie, dass wir bei den Qualitätseinstellungen noch nicht da sind.

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

    Ähnlich wie oben, mit -c:a libfaac -b:a 128K -ac 2. Beachten Sie, dass FAAC in FFmpeg nicht mehr unterstützt wird. Verwenden Sie stattdessen den integrierten FFmpeg-Encoder mit -c:a aac -b:a 128K.

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

    Dies setzt den Codierungsmodus auf VBV, das auf ein Streaming-Szenario anstatt nur auf eine konstante Bitrate oder konstante Qualität abzielt. Konstante Qualität wird auch als CRF bezeichnet , die Standardeinstellung für x264 - in Handbrake als „Rate Factor“ bezeichnet. Während CRF normalerweise die beste Codierungsqualität bietet, erhalten Sie im VBV-Modus eine Datei, die sich besser für das Online-Streaming oder für bestimmte Geräte mit eingeschränkten Funktionen eignet.

    Verwenden Sie zum Einstellen von VBV die Optionen -maxrate 5200Kund -bufsize 5200Kin ffmpeg.

    Verwenden Sie -crf 23in ffmpeg, um CRF festzulegen.

  • level=42

    Verwenden Sie -level 42. Dies ist die H.264-Stufe .

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

    Stellen Sie die Anzahl der B-Frames mit ein -bf 2. Das minimale Keyframe-Intervall wird mit -keyint_min 60und das maximale Intervall mit festgelegt -g 60. Die Anzahl der Referenzbilder wird mit eingestellt -refs 4.

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

    Dies sind Optionen, mit denen Sie in ffmpeg zusätzlich festlegen können -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1- wie bei jeder anderen x264-Encodereinstellung, die nicht direkt den ffmpeg-Optionen zugeordnet ist.

    Hier ist die "TL; DR" -Version, wenn Sie faul sind, sich nicht um die Details kümmern oder wenn die Dinge nicht funktionieren: Verwenden Sie -preset:v medium(oder lassen Sie sie weg, da die mittlere Voreinstellung die Standardeinstellung ist). Die x264-Voreinstellungen wählen eine Reihe von Optionen aus, bei denen die Codierungsgeschwindigkeit gegen die Komprimierungseffizienz ausgetauscht wird. Sie sind bequem aus dem Namen ultrafast, superfast, veryfast, faster, fast, mediumzu slow, slowerund veryslow. Wählen Sie, mit was Sie sich wohl fühlen.

Um es zusammenzufassen, die lange Version:

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

Oder die kurze, die ich verwenden würde (mit entfernter VBV-Codierung und einigen entfernten Detailoptionen):

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

Wenn Sie für eine Allzweckkonvertierung zu einer Codierung mit konstanter Qualität wechseln, verwenden Sie diese Option und ändern Sie den -crfParameter von 18 auf 28, wobei niedriger eine bessere Qualität bedeutet und 23 Standard ist:

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
quelle
Haha @slhck, gerade als ich meiner Antwort den letzten Schliff gab, gehst du und gibst eine bessere.
Evilsoup