如何使用ffmpeg从多个输入视频剪切并连接到单个视频?

时间:2018-02-20 10:05:09

标签: ffmpeg

我做了类似的事

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 个答案:

答案 0 :(得分:1)

您必须告诉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];
 [0:v]trim=start=300:end=420,setpts=PTS-STARTPTS[v1];
 [0: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。< / p>