4

У меня есть два файла MPEG-4 в кодировке H.264, которые мне нужно объединить. Я использовал MP4Box для этой задачи, сначала убедившись, что файлы закодированы одинаково (даже дошел до того, что сравнил вывод h264_parse на их видеодорожках), а затем конкатенировал с помощью этой команды:

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

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

Я попытался перекодировать вывод через ffmpeg с -vcodec copy -vcodec и -acodec copy но проблема с синхронизацией сохраняется.

Я также попытался сначала преобразовать в формат MPEG-2, конкатенировать с простым cat file1.mpg file2.mpg > output.mpg и перекодировать результат с помощью ffmpeg. Это было еще хуже.

Я знаю, что могу передавать команды в MP4Box для настройки времени начала звуковой дорожки, но я пытаюсь сделать это программно для любого входного видео (в той же кодировке, конечно). Я ищу возможные решения, которые не требуют вмешательства человека / ручных настроек. Или, по крайней мере, понимание того, что происходит, чтобы вторая часть сцепленного видео вышла из синхронизации.

3 ответа3

7

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

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

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

1

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

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

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

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

0

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

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

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