FFMPEG / x264: Однопроходный: как повысить начальный битрейт?

FFMPEG / x264: Однопроходный: как повысить начальный битрейт?

При использовании однопроходного режима с указанным размером VBV libx264 изначально будет «задавливать» битрейт, предположительно из-за отсутствия доказательств (или, возможно, из-за ошибки).Это ироничное продолжение вопроса, в котором речь шла о слишком ВЫСОКИХ начальных битрейтах при однопроходном кодировании.безспецификация VBV)

Пожалуйста, посмотрите на графики битрейта внизу для получения дополнительной информации: обратите внимание на исходный провал, за которым следует избыточная коррекция («Эй, у меня осталось несколько бит!») перед нормализацией. Обратите внимание, что это исправлено в двухпроходном решении. Отсутствие начального I-кадра на этих двух графиках, вероятно, является ошибкой инструмента (значение PTS начального I-кадра составляет 0,15 секунды).

Этот эффект предотвращает параллельную обработку длинного актива по принципу «разделение, кодирование и повторная сборка», поскольку вы получаете качественный бит в начале каждого сегмента.

Это можно исправить с помощью двухпроходного кодирования, что неприемлемо для прямых трансляций (хотя при параллельном использовании можно было бы заплатить стоимость двухпроходного кодирования).

Есть два решения, на которые я надеюсь: любая помощь будет более чем кстати.

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

  2. Способ выполнения ограниченного двухпроходного кодирования как "канала": полное двухпроходное кодирование как канал, конечно, бессмысленно, но должно быть возможно иметь "микропроходы", где период обратной связи прохода составляет около одной секунды. Это гораздо менее идеально, чем однопроходное решение, чтобы обойти такой короткий эффект, но было бы приемлемо, если (1) невозможно.

    • График битрейта Single Pass: обратите внимание на начальный провал «мешка с песком». Сгенерировано с помощью:

ffmpeg -i 1080-60fps.mp4 -vf "масштаб=1200:720" -b:v 1000k -bufsize 1000k один проход.mp4

введите описание изображения здесь

  • График битрейта Two Pass: это почти идеальный результат. Обратите внимание, что эта окончательная форма не является обязательной: достаточно избежать начального мешка с песком. Сгенерировано с помощью:

ffmpeg -i 1080-60fps.mp4 -vf "масштаб=1200:720" -b:v 1000k -pass 1 -f mp4 /dev/null

ffmpeg -i 1080-60fps.mp4 -vf "масштаб=1200:720" -b:v 1000k -pass 2 twopass.mp4

График двухпроходного битрейта: это ожидаемый результат

  • Часть первого кадра в однопроходном кодировании

введите описание изображения здесь

  • Часть первого кадра в двухпроходном кодировании

введите описание изображения здесь

Связанный контент