Я хочу приєднати два файли mp4, щоб створити один. Відеопотоки кодуються в h264, а аудіо в AAC. Я не можу перекодувати відео в інший формат через обчислювальні причини. Крім того, я не можу використовувати жодні програми GUI, вся обробка повинна виконуватися з утилітами командного рядка Linux. FFmpeg не може цього зробити для файлів mpeg4, тому замість цього я використовував MP4Box:
MP4Box -add video1.mp4 -cat video2.mp4 newvideo.mp4
На жаль, звук все змішується. Я подумав, що проблема полягає в тому, що аудіо було в AAC, тому я перекодував його в mp3 і знову використовував MP4Box. У цьому випадку звук чудово підходить для першої половини newvideo.mp4
(що відповідає video1.mp4
), але потім їх немає звуку, і я також не можу орієнтуватися у відео.
Наступною моєю думкою було те, що аудіо- та відеопотоки мали невеликі розбіжності в їх довжині, які я повинен виправити. Тому для кожного вхідного відео я розділив потоки відео та аудіо, а потім з'єднав їх із найкоротшим варіантом у 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 секунду. Будь-які пропозиції дійсно вітаються.