这里的专业视频编辑器不擅长 FFmpeg,所以请耐心等待。我有大量视频,长度各不相同,我想在开始时将它们剪裁 10 秒,在结尾剪裁 10 秒。
我知道有一个“-sseof”命令可以根据视频的结尾查找时间码。但是,我只能得到它最后给我的部分,而不是指定时间之前的部分。例如,这只是给我最后 10 秒:
ffmpeg -sseof -10 -i test.mp4 outputB.mp4
我想要完全相反的,一切都到最后 10 秒。
而且我真的很想从一开始就将它与修剪结合起来。我的理想公式如下所示:
ffmpeg -i test.mp4 -ss 10 -to -sseof -10 output.mp4
但这不起作用。有什么建议?谢谢!
编辑:
Mulvya 建议的解决方案对我有用!这是我用来在整个文件夹上运行脚本的公式,从每个剪辑的开头剪下 4.25 秒,从每个剪辑的结尾剪掉 17.8 秒(这些值需要在几个地方更改,但它有效)。
for file in *.mp4; do ffmpeg -i $file -filter_complex "[0]split[s1][s2]; [s1]trim=4.25,setpts=PTS-STARTPTS,fifo[bv]; [s2]trim=4.25,setpts=(PTS-STARTPTS)+17.8/TB,fifo[v]; [bv][v]overlay=shortest=1,trim=17.8,setpts=PTS-STARTPTS[fv]; [0]volume=0[b];[0]adelay=17800|17800[a]; [b][a]amix=duration=first,volume=2,atrim=22.05,asetpts=PTS-STARTPTS[fa]" -map "[fv]" -map "[fa]" "${file%.mp4}-trimmed.mp4"; done
非常感谢!