我尝试使用 splited cli,效果很好
ffmpeg -i "$input_file" -filter_complex "[0:v]trim=start=0:end=10,setpts=PTS/10[v1];[0:a]atrim=start=0:end=10,asetpts=PTS/10[a1]" -map "[v1]" -map "[a1]" -shortest -t 1 "$output_file" -y
ffmpeg -i "$input_file" -filter_complex "[0:v]trim=start=10:end=13,setpts=PTS-STARTPTS[v2];[0:a]atrim=start=10:end=13,asetpts=PTS-STARTPTS[a2]" -map "[v2]" -map "[a2]" -shortest "$output_file" -y
但是当我合并它们时:
ffmpeg -i "$input_file" -filter_complex "[0:v]trim=start=0:end=10,setpts=PTS/10[v1];[0:a]atrim=start=0:end=10,asetpts=PTS/10[a1];[0:v]trim=start=10:end=13,setpts=PTS-STARTPTS[v2];[0:a]atrim=start=10:end=13,asetpts=PTS-STARTPTS[a2]" -map "[v1]" -map "[a1]" -map "[v2]" -map "[a2]" -shortest -t 4 "$output_file" -y
结果视频最后 3 秒卡住了,如何解决
如果我发现以下回答,但它给出了多行 ffmpeg 解决方案,我希望一个 ffmpeg cli 可以完成它
答案1
您必须使用 concat 过滤器来合并它们。
ffmpeg -i "$input_file" -filter_complex "[0:v]trim=start=0:end=10,setpts=PTS/10[v1];[0:a]atrim=start=0:end=10,asetpts=PTS/10[a1];[0:v]trim=start=10:end=13,setpts=PTS-STARTPTS[v2];[0:a]atrim=start=10:end=13,asetpts=PTS-STARTPTS[a2];[v1][a1][v2][a2]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" "$output_file" -y