FFmpeg - выбор подходящего битрейта для кодирования VP9

Я хочу закодировать видео 4k, снятое на iPhone 6s, в VP9 с максимально возможным качеством.

Для справки, потоковые данные видео, которые я хотел бы закодировать, через ffprobe:

Duration: 00:00:10.48, start: 0.000000, bitrate: 46047 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160, 45959 kb/s, 29.98 fps, 29.97 tbr, 600 tbn, 1200 tbc (default)
    Metadata:
      creation_time   : 2017-03-13T21:12:56.000000Z
      handler_name    : Core Media Data Handler
      encoder         : H.264
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 79 kb/s (default)
    Metadata:
      creation_time   : 2017-03-13T21:12:56.000000Z
      handler_name    : Core Media Data Handler

Я использую следующие команды FFmpeg на основе этих инструкций (см. раздел Best Quality (Slowest) Recommended Settings ).

  1. ffmpeg -i INPUT.mov -c:v libvpx-vp9 -pass 1 -b:v 46000K -threads 4 -speed 4 -g 9999 -an -f webm -y /dev/null
  2. ffmpeg -I INPUT.mov -c:v libvpx-vp9 -pass 2 -b:v 46000K -threads 4 -speed 0 -g 9999 -an -f webm OUTPUT.webm

Существует ли рекомендуемая практика для выбора оптимального значения -b:v, чтобы результирующее видео было визуально неотличимо от оригинала? Я пробовал значения в диапазоне от 36000K до 46000K, но это приводит к массивным файлам с общим битрейтом, превышающим целевой битрейт.

Заранее спасибо!


person sobutterysosmooth    schedule 06.04.2017    source источник
comment
Для этого и предназначен режим CRF (постоянное качество). Используйте -crf 20 -b:v 0 Пропустите два прохода. Протестируйте с различными значениями CRF (от 0 до 63) на коротком сегменте на входе. Как только вы нажмете значение, которое дает достаточно небольшой и достаточно хороший результат, используйте это значение.   -  person Gyan    schedule 06.04.2017
comment
Бонусные баллы в дополнение к комментарию @Mulvya: хотя с другими кодировщиками однопроходная и двухпроходная CRF должны давать одинаковые результаты, к сожалению, это не так для libvpx, и вы все равно должны выполнять двухпроходное кодирование, даже когда делаете ОФО...   -  person Ronald S. Bultje    schedule 12.01.2018


Ответы (1)


Просто нужно поэкспериментировать с разными, гораздо более низкими битрейтами и просмотреть результаты. Стараюсь искать артефакты. Волосы по-прежнему хорошо выглядят? Ткань? Надписи, как на дорожных знаках и витринах? Нет блочности? Нет кровотечения темного и светлого на острых краях? Нет отголосков? Я считаю, что размытие в движении в оригинале трудно оценить, мне нужно сравнить бок о бок, чтобы увидеть разницу между этим и артефактами сжатия.

Попробуйте 1/10 от 36000k. Я считаю, что vp9 с номинальным битрейтом 400k отлично работает с видео 1280x720. (ffmpeg с перерегулированием libvpx-vp9, и я обычно получаю фактическую скорость передачи данных на 20% выше, 480k) 4K — это 3840x2160, в 9 раз больше, чем 1280x720, поэтому кажется, что скорость передачи 3600k должна давать хорошие результаты.

Другое руководство заключается в том, что, как сообщается, качество vp9 примерно равно качеству mp4 при вдвое меньшей скорости передачи данных. Видео, которое хорошо выглядит с битрейтом 1000k в формате mp4, должно хорошо выглядеть и с битрейтом 500k в vp9.

person bzipitidoo    schedule 11.01.2018