Объединение нескольких видео в виде отдельных потоков в один файл mkv

Так что у меня есть несколько видео одного и того же пейзажа с разных ракурсов. Они хранятся в виде отдельных файлов. Могу ли я объединить их как несколько видеопотоков в одном файле?

Например, я знаю, что это возможно с MKV, я просто не знаю, как их «присоединить».

Возможно ли это с помощью ffmpeg ? Если да, то какую последовательность команд использовать? Если нет, то какое другое приложение сможет это сделать?

Ответы (2)

Да, это возможно с помощью ffmpeg и mkvконтейнера.

Примерная последовательность команд будет такой:

ffmpeg -i input1 -i input2 -c copy -map 0 -map 1 output.mkv

источник

Разбивка команды:

  • -i input1Это выбирает первый входной файл. Может быть что-то вроде моего video_track1.mov.
  • -i input2Здесь вы можете указать второй входной файл. Вы можете добавить еще одну запись -i input3, если у вас есть больше входных видео. Я не знаю, какое максимальное количество видео можно поместить в один mkvконтейнер.
  • -c copyЭто копирует все потоки (аудио и видео) в исходной кодировке.
  • -map 0Это сопоставляет все потоки (аудио и видео) первого входного файла с первой дорожкой выходного файла.
  • -map 1Это сопоставляет все потоки (аудио и видео) второго входного файла со второй дорожкой выходного файла.

Более подробную информацию об этой -mapопции можно найти в документации ffmpeg .

Спасибо, Барт. Просто быстрый дополнительный вопрос, если можно. Предположим, что 2-е видео немного короче, чем 1-е видео, которое я хочу объединить, есть ли способ сместить, в какой момент должен быть доступен второй поток (например, через 1 секунду), чтобы синхронизировать два потока?
Не уверен, я не эксперт, просто счастливый гуглер, но вы можете поэкспериментировать с -ssвариантом . Пожалуйста, отредактируйте свой вопрос с добавлением и добавьте ответ самостоятельно, включая код ffmpeg, если вы обнаружите, что он работает. Это поможет будущим посетителям.
Это почти сработало, но у моего входного видео не было временных меток. Я создал их с помощью ffmpeg -fflags +genpts -i input1_no_ts.avi -c copy input1.mp4иffmpeg -fflags +genpts -i input2_no_ts.avi -c copy input2.mp4

«карта» выбирает источники ввода, в данном случае файлы. Ваша команда объединяет все треки в единый поток, а не отдельные, как хотелось бы.

Команда в ответе @SaaruLindestakke сохраняет их как отдельные потоки. mapне объединяет потоки; он может выбирать только входные потоки (не файлы).