Як перевести параметри HandbrakeCLI у параметри FFmpeg?


13

У мене є купа налаштувань командного рядка, які працюють для ручного гальмування, але іноді на деяких відео (я не маю поняття чому) ручний гальмо викидає "За винятком пам'яті". Мені було цікаво, чи можу я знайти однакові клавіші опцій і зробити це за допомогою FFmpeg, але це здається не так просто.

FFmpeg іноді або не має цих варіантів, або робить речі за замовчуванням. Наприклад, я не знаю, як зробити власну анаморфіку з FFmpeg. Для мене дуже важливо, що отримані відео будуть такими ж хорошими, як якщо б вони були зроблені з ручним гальмом. Ось рядок для Handbrake:

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

Як перетворити це на команду FFmpeg?

Відповіді:


20

Handbrake використовує кодер x264 для перетворення відео. Існує сайт з оглядом усіх параметрів x264 та їх аналогів FFmpeg . Однак вони трохи застарілі, і деякі з цих варіантів більше не працюють або можуть бути перейменовані. Ви повинні використовувати профілі x264 для більшості детальних варіантів - але ми дістанемося.

Багато основних параметрів Handbrake (наприклад, частота кадрів) не характерні для x264, і вони розкидані по документації FFmpeg в Інтернеті .

Перш ніж розпочати, перевірте, чи використовуєте ви останню версію FFmpeg. На їхньому веб-сайті завантажуються статичні версії для всіх основних операційних систем.

Ходімо:

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

    Синтаксис FFmpeg є ffmpeg -i input.mpg … d:\output.mp4.

  • --rate 29.97

    Вкажіть частоту відео кадрів за допомогою -r 29.97. (Ручний гальмо --cfrпросто встановлює постійну частоту кадрів. Тут не потрібно).

  • --arate 44.1

    Встановіть частоту дискретизації звуку за допомогою -ar 44100(у Гц).

  • --format mp4

    Не потрібен, оскільки FFmpeg знає, що ви хочете MP4.

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

    Це не робить нічого, крім встановлення розміру 1920 × 1080. У FFmpeg, зробіть це -s:v 1920x1080, або якщо ви хочете використовувати фільтри, -filter:v "scale=1920:1080".

  • --encoder x264 --vb 5200

    Встановіть кодер з -c:v libx264та швидкість передачі бітів на постійну -b:v 5200K. Зауважте, що ми ще не там, що стосується налаштувань якості.

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

    Аналогічно вище, с -c:a libfaac -b:a 128K -ac 2. Зауважте, що FAAC більше не підтримується у FFmpeg; замість цього використовуйте вбудований FFmpeg-кодер -c:a aac -b:a 128K.

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

    Це встановлює режим кодування VBV, який орієнтується на сценарій потокового потоку, а не просто постійний бітрейт або постійну якість. Постійна якість також називається CRF , за замовчуванням для x264 - у Handbrake це називається "коефіцієнт швидкості". Хоча CRF зазвичай дає найкращі якості кодування, режим VBV надає вам файл, який краще підходить для потокової передачі в Інтернеті або для певних пристроїв з обмеженими можливостями.

    Щоб встановити VBV, використовуйте параметри -maxrate 5200Kта -bufsize 5200Kпараметри у ffmpeg.

    Щоб встановити CRF, використовуйте -crf 23ffmpeg.

  • level=42

    Використовуйте -level 42. Це рівень H.264 .

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

    Встановіть кількість B-кадрів за допомогою -bf 2. Мінімальний інтервал ключових кадрів встановлюється з -keyint_min 60, а максимальний інтервал - -g 60. Кількість еталонних зображень встановлюється за допомогою -refs 4.

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

    Це параметри, які ви можете встановити у ffmpeg додатково за допомогою -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1- як і будь-який інший параметр кодера x264, який безпосередньо не відображається на параметри ffmpeg.

    Ось версія "TL; DR", якщо ви лінуєтесь, не хвилюйтесь до деталей, або якщо щось не працює: Використовуйте -preset:v medium(або залиште його, оскільки стандартний замовчування за замовчуванням). Пресети x264 вибирають набір параметрів, які торгують швидкість кодування для ефективності стиснення. Вони зручно названі з ultrafast, superfast, veryfast, faster, fast, mediumдо slow, slowerі veryslow. Вибирайте все, що вам зручніше.

Отже, підсумовуючи, довга версія:

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

Або короткий, який я б використав (із кодуванням VBV та видаленими кількома детальними параметрами):

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

Змінюючи на постійне кодування якості для цільового перетворення, використовуйте це та змініть -crfпараметр з 18 до 28, де нижчий означає кращу якість, а 23 - за замовчуванням:

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, так само, як я вказував на свою відповідь, ти пішов і дай кращий.
злий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.