如何使用ffmpeg从多个输入视频中裁剪并连接为单个视频?

5
我做了类似于这样的事情。
ffmpeg -i video1.mp4 -ss 00:01:00 -to 00:03:00 -i video2.mp4 -ss 00:05:00 -to 00:02:00 -c copy cut.mp4

显然复用没有发生。

我该如何使它工作?


1
这似乎与编程无直接关系,因此不属于主题。 - Monkey Supersonic
1
实际上,我正在将其封装在一个 .Net 类中,但我需要正确的命令行参数。 - Hadley V Sunny
1个回答

6

您需要告诉ffmpeg您想要连接每个视频和音频流:

ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex
"[0:v]trim=start=60:end=180,setpts=PTS-STARTPTS[v0];
 [0:a]atrim=start=60:end=180,asetpts=PTS-STARTPTS[a0];
 [1:v]trim=start=300:end=420,setpts=PTS-STARTPTS[v1];
 [1:a]atrim=start=300:end=420,asetpts=PTS-STARTPTS[a1];
 [v0][a0][v1][a1]concat=n=2:v=1:a=1[v][a]"
-map "[v]" -map "[a]" output.mp4
  • (a)trim 创建每个片段,(a)setpts 重置片段时间戳(建议用于 concat),concat 连接每个片段。有关每个过滤器的文档,请参见FFmpeg Filters

  • 我将命令分成多行以便阅读。请重新组合为单行或添加适合您环境的换行符。

  • 这将重新编码视频,但切割将非常准确。如果要避免重新编码,请参见concat demuxer,但切割可能不准确,结果可能不令人满意。

  • -to 值不能小于 -ss 值,因此我假设您的意思是 -ss 00:05:00 -to 00:07:00 而不是 -ss 00:05:00 -to 00:02:00


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接