Как перевести параметры HandbrakeCLI в параметры FFmpeg?

13

У меня есть куча настроек командной строки, которые работают для ручного тормоза, но иногда в некоторых видео (я понятия не имею, почему) ручной тормоз выдает «Исключение из нехватки памяти». Мне было интересно, смогу ли я найти те же клавиши выбора и сделать это с помощью FFmpeg, но это не так легко сделать.

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

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?

iLemming
источник

Ответы:

20

Ручной тормоз использует кодер x264 для преобразования видео. Есть сайт с обзором всех опций x264 и их аналогов FFmpeg . Однако они немного устарели, и некоторые из этих опций больше не работают или могли быть переименованы. Вы должны использовать профили x264 для большинства параметров детализации, но мы доберемся до них.

Многие из базовых опций ручного тормоза (например, частота кадров) не являются специфичными для 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 - оно называется «Коэффициент коэффициента» в ручном тормозе. Хотя CRF обычно обеспечивает наилучшее качество кодирования, режим VBV предоставляет файл, который лучше подходит для потоковой передачи в Интернете или для определенных устройств с ограниченными возможностями.

    Чтобы установить VBV, используйте параметры -maxrate 5200Kи -bufsize 5200Kв ffmpeg.

    Чтобы установить CRF, используйте -crf 23в ffmpeg.

  • 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
источник
Ха-ха @ slhck, так же, как я заканчивал свой ответ, ты идешь и даешь лучший.
evilsoup