3

Я создал несколько покадровых видео из фотографий, используя эту команду:

ffmpeg -i IMG_%03d.JPG -s 1440x1080 -sameq video.MP4

И это сработало отлично. Теперь я хочу присоединиться к нескольким из этих замедленных видео, чтобы сделать одно более длинное видео (все входные видео имеют одинаковый формат). Я уже пытался использовать:

cat video1.MP4 video2.MP4 > stitch.MP4

но вывод в конечном итоге будет равен video1.MP4

Я не хочу транскодировать и изменять какие-либо параметры видео, я просто хочу склеить их, как будто эти видео были в плейлисте.

Спасибо!

3 ответа3

3

С последней версией ffmpeg вы можете использовать демоверсию concat. Создайте файл с именем input.txt, содержащий такие строки:

file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'
file 'input4.mp4'

С оболочкой bash вы можете использовать цикл for для создания файла следующим образом:

rm inputs.txt
for f in input{1..4}.mp4; do echo "file '$f'" >> inputs.txt; done

Затем,

ffmpeg -f concat -i inputs.txt -c copy output.mp4

Поскольку он использует -c copy , это будет полностью без потерь.

1

Я знаю, что вы сказали с ffmpeg, но мне повезло, используя mp4box для простого сшивания файлов. Вы можете скачать это здесь.

http://gpac.wp.mines-telecom.fr/mp4box/

Вот пример командной строки:

mp4box -cat <file> -cat <file> dest.mp4
1

Вывод не будет равен video1.mp4, но верхние и нижние колонтитулы для видео будут начинаться и заканчиваться вокруг video1.mp4, поэтому ваш проигрыватель не перейдет в video2.mp4. Предполагая, что видео имеют одинаковый битрейт / кодек и т.д:

cat video1.MP4 video2.MP4 | ffmpeg -y -i - -genpts -vcodec copy -acodec copy stitch.MP4

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

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