如何使用 ffmpeg 拼接 2 个视频文件?

如何使用 ffmpeg 拼接 2 个视频文件?

我使用以下命令根据照片创建了一些延时视频:

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

相关内容