Jak tłumaczyć opcje hamulca ręcznego CLI na opcje FFmpeg?

13

Mam kilka ustawień wiersza poleceń, które działają dla hamulca ręcznego, ale czasami w niektórych filmach (nie mam pojęcia, dlaczego) hamulec ręczny wyświetla „Wyjątek braku pamięci”. Zastanawiałem się, czy mogę znaleźć te same klawisze opcji i zrobić to za pomocą FFmpeg, ale nie wydaje się to takie łatwe.

FFmpeg czasami albo nie ma tych opcji, albo robi rzeczy domyślnie. Na przykład nie wiem, jak zrobić niestandardowe anamorficzne z FFmpeg. Dla mnie bardzo ważne jest, aby powstałe filmy były tak dobre, jakby zrobiono je z hamulcem ręcznym. Oto linia dla hamulca ręcznego:

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

Jak zmienić to na polecenie FFmpeg?

iLemming
źródło

Odpowiedzi:

20

Hamulec ręczny wykorzystuje koder x264 do konwersji wideo. Jest strona z przeglądem wszystkich opcji x264 i ich odpowiedników FFmpeg . Są one jednak nieco przestarzałe i niektóre z tych opcji już nie działają lub mogły zostać zmienione. Powinieneś użyć profili x264 do większości opcji szczegółowych - ale my tam dotrzemy.

Wiele podstawowych opcji hamulca ręcznego (np. Liczba klatek na sekundę) nie jest specyficznych dla x264 i jest rozproszonych w dokumentacji online FFmpeg .

Zanim zaczniemy, sprawdź, czy używasz najnowszej wersji FFmpeg. Ich ściągnij ma statyczny buduje dla wszystkich głównych systemów operacyjnych.

Chodźmy:

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

    Składnia FFmpeg to ffmpeg -i input.mpg … d:\output.mp4.

  • --rate 29.97

    Określ szybkość klatek wideo za pomocą -r 29.97. (Hamulec ręczny --cfrustawia tylko stałą liczbę klatek. Nie jest tu potrzebny).

  • --arate 44.1

    Ustaw częstotliwość próbkowania audio za pomocą -ar 44100(w Hz).

  • --format mp4

    Nie jest to konieczne, ponieważ FFmpeg wie, że chcesz MP4.

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

    Nie robi to nic poza ustawieniem rozmiaru na 1920 × 1080. W FFmpeg, zrób to z -s:v 1920x1080, lub jeśli chcesz korzystać z filtrów -filter:v "scale=1920:1080".

  • --encoder x264 --vb 5200

    Ustaw koder za pomocą -c:v libx264i szybkość transmisji na stałą za pomocą -b:v 5200K. Pamiętaj, że nie ma nas jeszcze, jeśli chodzi o ustawienia jakości.

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

    Podobnie jak powyżej, z -c:a libfaac -b:a 128K -ac 2. Zauważ, że FAAC nie jest już obsługiwany w FFmpeg; zamiast tego użyj wbudowanego kodera FFmpeg z -c:a aac -b:a 128K.

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

    To ustawia tryb kodowania na VBV, który jest ukierunkowany na scenariusz przesyłania strumieniowego zamiast po prostu stałej przepływności lub stałej jakości. Stała jakość nazywa się również CRF , domyślnie dla x264 - w hamulcu ręcznym nazywa się ją „Rate Factor”. Podczas gdy CRF zwykle zapewnia najlepszą jakość kodowania, tryb VBV daje plik, który lepiej nadaje się do przesyłania strumieniowego online lub do niektórych urządzeń o ograniczonych możliwościach.

    Aby ustawić VBV, użyj opcji -maxrate 5200Ki -bufsize 5200Kw ffmpeg.

    Aby ustawić CRF, użyj -crf 23w ffmpeg.

  • level=42

    Zastosowanie -level 42. To jest poziom H.264 .

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

    Ustaw liczbę ramek B za pomocą -bf 2. Minimalny interwał klatki kluczowej jest ustawiany za pomocą -keyint_min 60, a maksymalny interwał za pomocą -g 60. Liczbę zdjęć referencyjnych ustawia się za pomocą -refs 4.

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

    Są to opcje, które można ustawić dodatkowo w ffmpeg -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1- jak każde inne ustawienie kodera x264, które nie jest bezpośrednio mapowane na opcje ffmpeg.

    Oto wersja „TL; DR”, jeśli jesteś leniwy, nie przejmuj się szczegółami lub jeśli coś nie działa: Użyj -preset:v medium(lub pomiń, ponieważ domyślne ustawienie jest średnie). Ustawienia wstępne x264 wybierają zestaw opcji, które wymieniają prędkość kodowania w celu zwiększenia wydajności kompresji. Oni dogodnie nazwie z ultrafast, superfast, veryfast, faster, fast, mediumdo slow, sloweri veryslow. Wybierz, z czym czujesz się komfortowo.

Podsumowując, długa wersja:

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

Lub krótki, którego użyłbym (z kodowaniem VBV i usuniętymi kilkoma opcjami szczegółowymi):

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

Zmieniając kodowanie na stałą jakość dla uniwersalnej konwersji, użyj tego i zmień -crfparametr z 18 na 28, gdzie niższa oznacza lepszą jakość, a 23 jest domyślna:

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
źródło
Haha @slhck, kiedy właśnie kończyłem moją odpowiedź, idź i daj lepszą.
evilsoup