You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FFmpeg的filter_complex处理流程中直接裁剪输出视频的37:23-37:33片段(无需额外独立命令)

如何在FFmpeg的filter_complex处理流程中直接裁剪输出视频的37:23-37:33片段(无需额外独立命令)

没问题!完全可以在你现有的filter_complex流程里直接完成这个裁剪操作,不用额外跑单独的命令。核心思路是把处理好的最终视频和音频拆成「0到37:23」、「37:33到结束」两段,然后把这两段拼接起来。

首先把时间转换成秒数会更精准:37:23 = 37×60+23 = 2243秒,37:33 = 37×60+33 = 2253秒。接下来直接修改你原有的filter_complex,在末尾添加分段拼接的逻辑即可,完整命令如下:

ffmpeg \
-i first_vid.mkv \
-i second_vid.mp4 \
-i third_vid.mkv \
-i fourth_vid.mkv  \
-filter_complex \
"nullsrc=size=1280x720 [base]; \
[0:v] \
trim=start=40,\
setpts=PTS-STARTPTS,\
scale=640x360,\
drawtext=fontfile=/Users/vr/Downloads/gameplay_vids/generated/control-freak-font/CONTF___.ttf\
:text='one'\
:fontsize=32\
:fontcolor=0xFFFFFF\
:alpha='if(lt(t,30),0,if(lt(t,35),(t-30)/5,if(lt(t,65),1,if(lt(t,70),(5-(t-65))/5,0))))'\
:x=w-text_w-12\
:y=h-text_h-12 [upperleft];\
[1:v] \
trim=start=35.05, \
setpts=PTS-STARTPTS, \
scale=640x360, \
drawtext=fontfile=/Users/vr/Downloads/gameplay_vids/generated/control-freak-font/CONTF___.ttf \
:text='two' \
:fontsize=32 \
:fontcolor=0xFFFFFF \
:alpha='if(lt(t,30),0,if(lt(t,35),(t-30)/5,if(lt(t,65),1,if(lt(t,70),(5-(t-65))/5,0))))' \
:x=w-text_w-12 \
:y=h-text_h-12 [upperright]; \
[2:v] \
trim=start=36.467, \
setpts=PTS-STARTPTS, \
scale=640x360, \
drawtext=fontfile=/Users/vr/Downloads/gameplay_vids/generated/control-freak-font/CONTF___.ttf \
:text='three' \
:fontsize=32 \
:fontcolor=0xFFFFFF \
:alpha='if(lt(t,30),0,if(lt(t,35),(t-30)/5,if(lt(t,65),1,if(lt(t,70),(5-(t-65))/5,0))))' \
:x=w-text_w-12 \
:y=h-text_h-12 [lowerleft]; \
[3:v] \
trim=start=35.097, \
setpts=PTS-STARTPTS, \
scale=640x360, \
drawtext=fontfile=/Users/vr/Downloads/gameplay_vids/generated/control-freak-font/CONTF___.ttf \
:text='four' \
:fontsize=32 \
:fontcolor=0xFFFFFF \
:alpha='if(lt(t,30),0,if(lt(t,35),(t-30)/5,if(lt(t,65),1,if(lt(t,70),(5-(t-65))/5,0))))' \
:x=w-text_w-12 \
:y=h-text_h-12 [lowerright];  \
[2:a] \
atrim=start=36.467, \
asetpts=PTS-STARTPTS[outa]; \
[base][upperleft] overlay=shortest=1 [tmp1]; \
[tmp1][upperright] overlay=shortest=1:x=640 \
[tmp2];[tmp2][lowerleft] overlay=shortest=1:y=360 \
[tmp3];[tmp3][lowerright] overlay=shortest=1:x=640:y=360[v]; \
# 新增:裁剪并拼接视频流
[v] trim=end=2243,setpts=PTS-STARTPTS [v1];
[v] trim=start=2253,setpts=PTS-STARTPTS [v2];
[v1][v2] concat=n=2:v=1:a=0 [final_v];
# 新增:裁剪并拼接音频流
[outa] atrim=end=2243,asetpts=PTS-STARTPTS [a1];
[outa] atrim=start=2253,asetpts=PTS-STARTPTS [a2];
[a1][a2] concat=n=2:v=0:a=1 [final_a];
" -map "[final_v]" -map "[final_a]" -c:v libx264 -shortest "output.mp4"

我给你拆解下新增部分的作用:

  • 视频处理:先把合成好的[v]流拆成两段,trim=end=2243截取到37:23的部分,trim=start=2253截取37:33之后的部分,setpts=PTS-STARTPTS用来重置每一段的时间戳,避免拼接后出现播放跳帧或不同步的问题;最后用concat把两段视频拼起来得到[final_v]。
  • 音频处理:和视频逻辑完全一致,用atrim截取音频的前后两段,asetpts重置时间戳,再用concat拼接得到[final_a]。
  • 最后输出时直接映射拼接好的[final_v]和[final_a]即可。

另外我把原命令末尾的-ss 00:00 -to 9999去掉了,因为-shortest已经会自动取最短流的时长,而且我们的拼接逻辑已经覆盖了时长控制。

备注:内容来源于stack exchange,提问作者PirateApp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:39:43