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

使用FFmpeg的concat与scale2ref滤镜后仅部分视频被编码的问题求助

使用FFmpeg的concat与scale2ref滤镜后仅部分视频被编码的问题求助

我现在想实现这样一个需求:从一段视频里截取几个指定片段,将它们拼接在一起,再给拼接后的视频添加一个宽度为视频1/6的覆盖层。

我编写了这条FFmpeg命令来尝试实现:

ffmpeg -reinit_filter 0 -i "input.mp4" -t 12 -loop 1 -i flag.webp -an -filter_complex "[0]select='between(t,3,9)',setpts=PTS-STARTPTS[P1];[0]select='between(t,12,15)',setpts=PTS-STARTPTS[P2];[0]select='between(t,60,70)',setpts=PTS-STARTPTS[P3];[P1][P2][P3]concat=n=3:v=1:a=0[vid];[1][vid]scale2ref=w=iw/6:h=ow/mdar[flag][vid];[vid][flag]overlay=x=20:y=20:enable='between(t,1,7)'[vid]" -map [vid] -c:v libx264 -b:v 900K -y "output.mp4"

但结果出现了问题:输出的视频只包含第一个选中的片段[P1](甚至可能比这个片段还要短),后面的[P2]和[P3]完全没有出现在最终视频里。

奇怪的是,如果我不使用concat滤镜,直接在select滤镜里合并多个时间段,类似下面这条命令:

ffmpeg -reinit_filter 0 -i "input.mp4" -t 12 -loop 1 -i flag.webp -an -filter_complex "[0]select='between(t,3,9)+between(t,12,15)+between(t,60,70)',setpts=N/FRAME_RATE/TB[vid];[1][vid]scale2ref=w=iw/6:h=ow/mdar[flag][vid];[vid][flag]overlay=x=20:y=20:enable='between(t,1,7)'[vid]" -map [vid] -c:v libx264 -b:v 900K -y "output.mp4"

这样操作的话,所有选中的片段都能正常显示,覆盖层也能正常工作。

有没有大佬能帮我分析一下,为什么使用concat滤镜的时候,就只编码了部分片段呢?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:33:08