我使用以下命令根据照片创建了一些延时视频:
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 shell,您可以使用 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