FFmpeg/avidemux: исправление упакованных B-кадров

Я транскодирую некоторые из моих старых видео mpeg4 (в контейнерах avi) в h.264 с помощью FFmpeg. В принципе

ffmpeg -i input.avi -c:v libx264 [x264 settings] -c:a libfdk_aac [aac settings] output.mp4

При этом, mpeg4 выдает следующее предупреждение

Видео использует нестандартный и расточительный способ хранения B-кадров ("упакованных B-кадров"). Подумайте об использовании такого инструмента, как VirtualDub или avidemux, чтобы исправить это.

Я знаю, что все еще могу успешно транскодировать, но из предупреждения мне не ясно, повлияет ли это на качество получаемого видео h.264.

Так,

  • Учитывая, что меня заботит только качество (и размер, я хочу минимизировать размер своих мобильных устройств, поэтому я также использую veryslow предустановки) выходного видео h.264, я должен заботиться о упакованных B-кадрах?

  • Если я должен, как я могу исправить их с avidemux? (Я уже пробовал просмотреть руководство.)

1 ответ

Решение

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

В старых видео в формате DivX обычно используется уродливый метод, называемый упакованным потоком битов, который помещает несколько видеокадров в один блок AVI. Упакованный поток битов не является стандартом MPEG-4, занимает больше места, требует больше ресурсов процессора для кодирования / декодирования и (что наиболее важно) может вызвать проблемы при копировании в контейнер другого типа. Это основная причина предупреждения.

Поскольку вы перекодируете видео, а не просто копируете его, все будет в порядке. Если вы хотите сохранить исходное видео, но скопировать его в контейнер другого типа (скажем, MP4 или MKV), лучше сначала распаковать B-кадры, используя фильтр FFmpeg. mpeg4_unpack_bframes,

Вы можете распаковать B-кадры с чем-то простым, как

ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
Другие вопросы по тегам