Я хочу объединить два файла mp4, чтобы создать один. Видеопотоки кодируются в h264, а аудио - в aac. Я не могу перекодировать видео в другой формат по вычислительным причинам. Кроме того, я не могу использовать какие-либо программы с графическим интерфейсом, вся обработка должна выполняться с помощью утилит командной строки Linux. FFmpeg не может сделать это для файлов mpeg4, поэтому вместо этого я использовал MP4Box:
MP4Box -add video1.mp4 -cat video2.mp4 newvideo.mp4
К сожалению, звук все перепутал. Я думал, что проблема была в том, что звук был в aac, поэтому я перекодировал его в mp3 и снова использовал MP4Box. В этом случае звук подходит для первой половины newvideo.mp4
(соответствует video1.mp4
), но затем звук отсутствует, и я не могу перемещаться по видео также.
Моей следующей мыслью было, что аудио и видео потоки имеют небольшие несоответствия в их длине, которые я должен исправить. Поэтому для каждого входного видео я разделял видео и аудио потоки, а затем соединял их с опцией -shortest в FFmpeg.
Таким образом, для первого видео я запустил:
avconv -y -i video1.mp4 -c copy -map 0:0 videostream1.mp4
avconv -y -i video1.mp4 -c copy -map 0:1 audiostream1.m4a
avconv -y -i videostream1.mp4 -i audiostream1.m4a -c copy -shortest video1_aligned.mp4
Аналогично для второго видео затем использовали MP4Box, как и ранее. К сожалению, это тоже не сработало. Единственный успех, который у меня был, - это когда я отдельно соединял видеопотоки (т.е. videostream1.mp4 и videostream2.mp4) и аудиопотоки (то есть audiostream1.m4a и audiostream2.m4a), а затем соединял видео и аудио в конечном файле. Однако синхронизация теряется для второй половины видео. Конкретно, есть задержка аудио и видео на 1 секунду. Любые предложения действительно приветствуются.