Как перевести опции HandbrakeCLI в опции FFmpeg?

У меня есть набор параметров командной строки, которые работают для ручного тормоза, но иногда на некоторых видео (я понятия не имею, почему) handbrake выбрасывает «исключение из памяти». Мне было интересно, могу ли я найти те же ключи опций и делать это с 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?

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

Многие из основных параметров Handbrake (например, частота кадров) не относятся к x264, и они разбросаны по онлайн-документации FFmpeg .

Прежде чем мы начнем, пожалуйста, проверьте, что вы используете последнюю версию FFmpeg, а не какой-либо из сломанного типа, который они доставляют с Ubuntu. Их сайт загрузки имеет статические сборки для всех основных операционных систем.

Поехали:

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

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

  • --rate 29.97

    Укажите частоту кадров видео с -r 29.97 . ( --cfr 's --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 имеет лучший режим, чем постоянный битрейт для кодирования: переменный битрейт. Вы вызываете его, заменив -b:a 128K на -q:a 100 , где качество по умолчанию – 100%.

    Если вы используете статическую сборку, обратите внимание, что у них нет FAAC по причинам лицензирования. Здесь нужен другой кодер, например встроенный. Используйте -c:a aac -strict experimental -b:a 192K вместо этого. Более высокая битовая скорость выбрана потому, что нативный кодер AAC не дает таких хороших результатов, как FAAC.

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

    Это устанавливает режим кодирования для VBV, который предназначен для сценария потоковой передачи, а не только для постоянного битрейта или постоянного качества. Постоянное качество также называется CRF , по умолчанию для x264. Хотя CRF обычно дает вам наилучшее качество кодирования, режим VBV дает вам файл, который лучше подходит для потоковой передачи в Интернете.

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

  • 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

    Вот версия со старыми опциями: метод оценки движения задан с -me_method umh , а диапазон поиска – -me_range 64 . Поиск движения -subq 7 задается с помощью -subq 7 . 8 × 8 DCT позволяет x264 выбирать другой размер матрицы преобразования. Установите его с -8x8dct (хотя я не получил это, чтобы работать). CABAC должен быть включен по умолчанию.

    Вот версия «TL; DR», если вы ленивы, не заботитесь о деталях, или если что-то не работает: Используйте -preset:v medium (или оставьте это, поскольку пресет для среды по умолчанию). Предустановки x264 выбирают набор опций, которые торгуют скоростью кодирования для эффективности сжатия. Их удобно назвать ultrafast , superfast , veryfast faster , fast , 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 -me_method umh -me_range 64 -subq 7 -c:a libfaac -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 libfaac -q:a 128K -ar 44100 d:\output.mp4 

Переходя на постоянное качество кодирования для универсального преобразования, используйте это и измените параметр -crf с 18 по 28, где lower означает лучшее качество, а 23 – по умолчанию:

 ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -crf 23 -c:a libfaac -q:a 128K -ar 44100 d:\output.mp4 
  • Мультимедийное видео и аудио FFMPEG (из другого видео) - проблема с отображением
  • Как добавить новый звук (не смешивание) в видео с помощью ffmpeg?
  • Резервное / автономное потоковое изображение с ffmpeg / nginx RTMP
  • Каков правильный способ рассчитать качество 1080p 720p 360p 240p?
  • Как удалить несколько сегментов из видео с помощью FFmpeg?
  • Ffmpeg добавляет новое аудио в видео (микширование 2 аудио)
  • IPhone записывает видео, которые вращаются в системах Windows
  • Улучшение качества созданных ffmpeg jpg
  • Ffmpeg последовательность изображений
  • Ошибки FFMPEG: «max_analyze_duration» «переполнение буфера» «слишком большой пакет» Что делать?
  • FFMPEG: конвертировать файлы m4a в mp3 без существенной потери информации / качества. Автоматизированный битрейт
  • Давайте будем гением компьютера.