Синхронизация аудио и видео с использованием MP4Box / ffmpeg для объединения файлов
У меня есть два файла MPEG-4 в кодировке H.264, которые мне нужно объединить. Я использовал MP4Box для этой задачи, сначала убедившись, что файлы закодированы одинаково (даже дошел до того, что сравнил вывод h264_parse на их видеодорожках), а затем конкатенировал с помощью этой команды:
MP4Box -cat file1.mp4 -cat file2.mp4 output_file.mp4
Это работает, и выходной файл воспроизводится, но при воспроизведении в Quicktime или VLC аудио второго видео начинается слишком рано, что делает всю вторую часть объединенного файла несинхронизированной.
Я попытался перекодировать вывод через ffmpeg с -vcodec copy
а также -acodec copy
но проблема синхронизации сохраняется.
Я также попытался сначала конвертировать в формат MPEG-2, объединяя с простым cat file1.mpg file2.mpg > output.mpg
и перекодировать результат с помощью ffmpeg. Это было еще хуже.
Я знаю, что могу передавать команды в MP4Box для настройки времени начала звуковой дорожки, но я пытаюсь сделать это программно для любого входного видео (в той же кодировке, конечно). Я ищу возможные решения, которые не требуют вмешательства человека / ручных настроек. Или, по крайней мере, понимание того, что происходит, чтобы вторая часть сцепленного видео вышла из синхронизации.
3 ответа
Я столкнулся с той же проблемой. Для правильной синхронизации вы должны написать команду MP4Box следующим образом:
MP4Box -add file1.mp4 -cat file2.mp4 -new output_file.mp4
Вместо того, чтобы использовать -cat
использование -add
до первого видео. Остальные варианты верны и вы можете поставить -new
перед выходным параметром видео.
Попробуйте использовать видео контейнер Matroskra (MKV).
Во-первых, вам нужен mkvtoolnix. Скачайте и установите его, затем вам нужно запустить графический интерфейс mkvmerge (если вы не любите инструменты командной строки, что мне подходит - хотя вы можете посмотреть раздел ссылок на файлы документации mkvmerge).
Добавьте свой первый файл, нажав "Добавить". Затем нажмите "добавить" и откройте второй файл. Установите выходной файл, нажмите "Начать мультиплексирование" внизу, и все готово!
Если контейнер не подходит для ваших нужд, вы можете перекодировать его или попытаться преобразовать в другой формат... Хотя MKV - очень красивый контейнер!
Из пакета mkvtoolnix используйте mkvmerge:
mkvmerge -o "output file" "input file" +"appended file"