При использовании однопроходного режима с указанным размером VBV libx264 будет изначально "мешать с песком" битрейта, предположительно из-за отсутствия доказательств (или, возможно, даже ошибки). (Это ироническое продолжение этого вопроса, который имел дело с чрезмерно ВЫСОКИМИ начальными битрейтами при однопроходном кодировании без спецификации VBV)
Пожалуйста, смотрите графики битрейта внизу для получения дополнительной информации: обратите внимание на исходный провал, за которым следует чрезмерная коррекция («Эй, у меня осталось немного битов!") до нормализации. Обратите внимание, что это исправлено в двухпроходном решении. Отсутствие начального I-кадра на этих двух графиках, вероятно, является ошибкой инструмента (значение PTS исходного I-кадра составляет 0,15 секунды).
Этот эффект предотвращает параллельную обработку длинного актива «разделение, кодирование и повторную сборку», поскольку вы получите качественный импульс в начале каждого сегмента.
Это можно исправить с помощью двухпроходного кодирования, что является неприемлемым решением для потоков в реальном времени (хотя при распараллеливании можно было бы оплатить стоимость двухпроходного кодирования).
Я надеюсь, что есть два решения: любая помощь будет более чем желанной.
Однопроходное решение, при котором кодировщику предписано вначале удерживать намного больше кадров, прежде чем создавать выходные данные, тем самым уменьшая первоначальный эффект мешка с песком
Способ выполнения ограниченного двухпроходного кодирования в качестве "канала": полное двухпроходное кодирование в качестве канала, конечно, бессмысленно, но должно быть возможно иметь "микропроходы", когда период обратной связи прохождения является чем-то вроде второй. Это гораздо менее идеально, чем однопроходное решение, чтобы обойти такой короткий эффект, но было бы приемлемо, если (1) невозможно.
- Однопроходной график битрейта: обратите внимание на начальное "падение мешка с песком". Создано с:
ffmpeg -i 1080-60fps.mp4 -vf "scale = 1200:720" -b:v 1000k -bufsize 1000k onepass.mp4
- Двухпроходный битрейт-график: это почти идеальный результат. Обратите внимание, что эта окончательная форма не обязательна: достаточно избежать первоначального мешка с песком. Создано с:
ffmpeg -i 1080-60fps.mp4 -vf "scale = 1200:720" -b:v 1000k -pass 1 -f mp4 /dev /null
ffmpeg -i 1080-60fps.mp4 -vf "scale = 1200:720" -b:v 1000k -pass 2 twopass.mp4
- Раздел первого кадра в однопроходном кодировании
- Раздел первого кадра в двухпроходном кодировании