Синхронизация аудио и видео с использованием MP4Box / ffmpeg для объединения файлов

7298
Jesse L

У меня есть два файла 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 для настройки времени начала звуковой дорожки, но я пытаюсь сделать это программно для любого входного видео (в той же кодировке, конечно). Я ищу возможные решения, которые не требуют вмешательства человека / ручных настроек. Или, по крайней мере, понимание того, что происходит, чтобы вторая часть сцепленного видео вышла из синхронизации.

4

3 ответа на вопрос

7
Ajith S Nair

Я столкнулся с той же проблемой. Для правильной синхронизации вы должны написать команду MP4Box следующим образом:

MP4Box -add file1.mp4 -cat file2.mp4 -new output_file.mp4 

вместо использования -catиспользовать -addперед первым видео. Остальные параметры верны, и вы можете поставить -newперед выходным параметром видео.

Thank you! I got a freeze frame where file1 ended and file2 began, but audio kept playing. After changing `-cat … -cat` to `-add … -cat`, I get both audio and video, though file2 is out of sync. Henrik N 11 лет назад 0
1
Breakthrough

Попробуйте использовать видео контейнер Matroskra (MKV).

Во-первых, вам нужен mkvtoolnix . Скачать и установить его, то вам необходимо запустить GUI mkvmerge (если вам нравится инструменты командной строки, которая меня устраивает - хотя вы можете захотеть взглянуть на файл секцию, связывающий в документации mkvmerge ).

Добавьте свой первый файл, нажав «добавить». Затем нажмите «добавить» и откройте второй файл. Установите выходной файл, нажмите «Начать мультиплексирование» внизу, и все готово!

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

У меня были проблемы с добавлением MP4-файлов в MP4Box. Звук был испорчен. Я попробовал mkvmerge.exe из этого пакета, и он работал отлично! cdavidyoung 11 лет назад 0
»Попробуйте использовать видеоконтейнер« Макостра ». - Разве это не называется * Matroska *, упрощенное написание для * Matryoshka *? Lumi 11 лет назад 0
@Lumi хороший улов, спасибо - сообщение отредактировано. Breakthrough 11 лет назад 0
0
cdavidyoung

Из пакета mkvtoolnix используйте mkvmerge:

mkvmerge -o "output file" "input file" +"appended file" 

Похожие вопросы