我做了类似的事
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
显然,复用并没有发生。
我怎样才能让它发挥作用?
答案 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>