3

Я записал видео, используя Bandicam с кодировщиком MJPEG, чтобы получить минимальное отставание. Теперь я пытаюсь преобразовать этот массивный файл в h264 avi с помощью ffmpeg. Я знаю, что в потоке видео есть пропущенные кадры ... более 100 за первые две минуты, что, я полагаю, просто потому, что Bandicam отбросил некоторые из них, когда он не успевал. Поэтому, когда я конвертирую файл в h264, видео и аудио не синхронизируются и, по мере продвижения выходного видео, становятся все более и более не синхронизированными. Вот моя основная команда в ffmpeg:

ffmpeg -i "C:\...\input.avi" -vcodec libx264 -q 5 -acodec libmp3lame -ar 44100 -ac 2 -b:a 128k "C:\...\output.avi"

Я пробовал ВСЕ, что я могу придумать, включая:

-itsoffset [-]00:00:01

Пробовал это до и после входного файла. Это не работает, потому что по мере продвижения видео оно становится все более несинхронным.

-async 1

Не работает

-vsync 1

Не работает, но показывает дублированные кадры.

Два входа одного и того же файла с отображением с использованием -map 0:0 -map 1:1 . Не работает

Источник играет просто отлично. Есть идеи, как конвертировать его с помощью ffmpeg и синхронизировать аудио и видео? Благодарю.

2 ответа2

5

Возможно, он пропустил кадры, если они были дубликатами, если источник воспроизводится нормально, тогда ваша проблема, скорее всего, связана с тем, что контейнеры AVI не очень хорошо обрабатывают закодированные в VBR форматы (в частности, h264 не очень хорошо работает с AVI). Я бы порекомендовал начать с выгрузки видео в несжатый AVI для тестирования, так как это наиболее согласованный формат для кодирования из

ffmpeg -i input.avi -acodec copy -vcodec rawvideo output.avi

Затем, предполагая, что он воспроизводится синхронно, вы должны попытаться сделать прямую копию кодека и повторно смешать исходный код в другом формате, а именно:

ffmpeg -i input.avi -acodec copy -vcodec copy output.mkv

MKV, как правило, справляется практически со всем, что вы в него вставляете, без проблем. Я даже скрываю некоторые зашифрованные zip-файлы в различных видео mkv на моем компьютере, так как вы можете кодировать вложения файлов в MKV. Поэтому, если что-то из этого работает без проблем с синхронизацией, попробуйте то же самое, но перекодируйте видео или аудио, но только один или другой, чтобы запустить и сохранить согласованный формат контейнера, чтобы вы знали, в чем проблема. то есть:

ffmpeg -i input.avi -acodec copy -vcodec libx264 output.mkv

или же

ffmpeg -i input.avi -acodec libmp3lame -vcodec copy output.mkv

Постарайтесь сделать каждое тестовое преобразование максимально простым, то есть не меняйте битрейт / частоту дискретизации, используйте параметры примера, которые я перечислил первыми. После каждого вы будете на шаг ближе к пониманию того, что вы можете и не можете делать. Если вам нужен h.264, я бы порекомендовал использовать контейнер mp4, так как он гораздо более совместим, чем avi, с другой стороны, если требованием является контейнер avi, я бы порекомендовал wmv3 или msvideo1 для видео, поскольку они будут наиболее вероятно, чтобы правильно кодировать.

0

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

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

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