Я создал несколько покадровых видеороликов из фотографий с помощью этой команды:
ffmpeg -i IMG_%03d.JPG -s 1440x1080 -sameq video.MP4
И это сработало отлично. Теперь я хочу объединить несколько таких покадровых видео, чтобы сделать одно более длинное видео (все входные видео имеют абсолютно одинаковый формат). Я уже пробовал использовать:
cat video1.MP4 video2.MP4 > stitch.MP4
но вывод в итоге оказывается равным video1.MP4
Я не хочу транскодировать или изменять какие-либо параметры видео, я просто хочу сквозную сшивку, как если бы эти видео были в плейлисте.
Спасибо!
решение1
С последней версией ffmpeg вы можете использовать concat demuxer. Создайте файл inputs.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
, это будет полностью без потерь.
решение2
Вывод не будет равен video1.mp4, но заголовки/колонтитулы для видео будут начинаться и заканчиваться около video1.mp4, поэтому ваш плеер не перейдет в video2.mp4. Предполагая, что видео имеют одинаковый битрейт/кодек и т. д.:
cat video1.MP4 video2.MP4 | ffmpeg -y -i - -genpts -vcodec copy -acodec copy stitch.MP4
Имейте в виду, что это не обязательно лучший метод (лучше сделать все покадровые съемки одновременно в одном видео), так как если кодек с потерями, вы вызоветепотеря поколения.
решение3
Я знаю, что вы сказали с ffmpeg, но мне повезло использовать mp4box для простого сшивания файлов. Вы можете скачать его здесь.
http://gpac.wp.mines-telecom.fr/mp4box/
Вот пример командной строки:
mp4box -cat <file> -cat <file> dest.mp4