3

Я использую следующий код для перекодирования высококачественной 1280x720 H264 mp4 со скоростью 10 Мбит / с в низкую H264 mp4 с нашим логотипом на видео.

ffmpeg.exe -i test.mp4 -i watermark.png -filter_complex overlay = "(main_w)-(overlay_w):(main_h)-(overlay_h)" -c:v libx264 -profile:v main -preset slow -b:v 400k -r 30 -c: libvo_aacenc -b: быстрый запуск 128k -s 1280x720 -movflags -f mp4 "test-done.mp4"

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

Проблема в том, что в первые несколько секунд видео поток очень блокируется. Затем, примерно через 3-5 секунд, поток "исправляет" себя, и видео становится четким и чистым. Замедление времени рендеринга путем изменения пресета на "veryslow" лишь незначительно улучшает первые несколько секунд, но значительно увеличивает время рендеринга.

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

Для справки, оригинальные mp4s 10 Мбит / с закодированы Premiere 5.0 и не имеют блочности в начале. Это то, что я видел только после ffmpeg после транскодирования.

1 ответ1

2

Спасибо @LordNeckbeard за решение. Кажется, что ffmpeg лучше кодирует x264, используя -crf вместо -v:b .

Таким образом, -crf 26 отлично работал для устранения блочности в начале процесса кодирования видео.

Мой окончательный код сейчас:

ffmpeg.exe -i test.mp4 -i watermark.png -filter_complex overlay="(main_w)-(overlay_w):(main_h)-(overlay_h)" -c:v libx264 -profile:v main -preset slow -crf 26 -r 30 -c:a libvo_aacenc -b:a 128k -s 1280x720 -movflags faststart -f mp4 "test-done.mp4"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .