Театральное качество кодирования ffmpeg / x264 для видео высокой четкости 1080p - PullRequest
2 голосов
/ 25 ноября 2011

Я боролся с кодированием видео с использованием FFMPEG и x264.Вывод заикается при воспроизведении в Quicktime, тогда как в VLC он показывает множество артефактов сжатия в тех же местах, где заикается Quicktime.Таким образом, кажется, что Quicktime заикается, потому что пытается подавить искажения / артефакты.

Видео содержит много случайных движений, включая кадры, в которых 75% пикселей будут меняться через произвольный интервал (видео генерируется программным обеспечением, поэтому оно действительно псевдослучайное).Сжатие, кажется, задыхается в тех местах, где, вероятно, неправильно обнаруживается «вырезка сцены».Также кажется, что он задыхается через регулярные промежутки времени, когда я предполагаю, что он выполняет ключевой кадр.

Я основал мой пресет кодирования на пресете x264-hq, который поставляется с FFMPEG.Я пытался отключить распознавание сцен и играть с опциями keyint / g и keyint_min.Установка g в 1 заставляет это работать, но уносит размер файла.Я пробовал пресеты без потерь, но они не воспроизводятся в Quicktime.Как ни странно, у меня не было проблем при работе с тестовым видео с низким разрешением (1440x810).

Вот предустановка, которая у меня есть сейчас, которая работает, но дает файл, который примерно на 60% больше, чем(нерабочий) HQ предустановленных выходов.Есть ли способ улучшить это?Размер файла не имеет большого значения, я просто хочу что-то, что будет воспроизводиться где угодно и будет очень высокого качества.

coder=1
flags=+loop
cmp=+chroma
partitions=+parti8x8+parti4x4+partp8x8+partp4x4+partb8x8
me_method=umh
subq=8
me_range=16
g=1
keyint_min=1
sc_threshold=0
i_qfactor=0.71
b_strategy=1crf=20
qcomp=0.6
qmin=20
qmax=51
qdiff=4
bf=16
refs=4
trellis=1
flags2=+dct8x8+wpred+bpyramid+mixed_refs
wpredp=2

Вот команда:

ffmpeg \
  -r 60 -i "frame-%06d.tiff" \
  -vcodec libx264 -vpre my_preset \
  -threads 0 \
  -r 60 -an -f out.mp4

1 Ответ

2 голосов
/ 03 декабря 2011

Если возможно, используйте многопроходное кодирование, это даст H264 шанс обнаружить изменения сцены и подготовиться к ним.

Почему вы устанавливаете sc_threshold на ноль?

ДонНе допускайте слишком больших размеров файлов, заикание может произойти, если мгновенный битрейт превышает скорость передачи на устройстве хранения (включая сеть).Контент 1080p должен легко кодироваться со скоростью менее 10 Мбит / с.

...