使用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
相关产品推荐
相关产品推荐

