FFmpeg中能否从滤镜链中间环节映射输出以生成不同文件?
FFmpeg中能否从滤镜链中间环节映射输出以生成不同文件?
当然可以做到啦!你之前碰到的报错,核心原因是FFmpeg里的滤镜节点默认是“一次性消耗”的——当你把某个节点(比如[txt1])作为下一个滤镜的输入时,这个节点就会被后续滤镜占用,没法直接再把它映射成输出。要实现同时输出滤镜链中间和最终的内容,你需要用split滤镜把需要输出的中间节点拆分成两个分支:一个分支继续走后续的滤镜流程,另一个分支专门留作输出用。
举个适配你需求的命令例子:
ffmpeg -f lavfi -i smptehdbars=rate=25:size=1920x1080 -filter_complex "[0:v]drawtext=text=text1:x=100/2:y=100:fontsize=50[txt1];[txt1]split[txt1_out][txt1_cont];[txt1_cont]drawtext=text=text2:x=200/2:y=200:fontsize=50[txt2];[txt2]drawtext=text=text3:x=300/2:y=300:fontsize=50[txt3];[txt3]split[txt3_out][txt3_cont];[txt3_cont]drawtext=text=text4:x=400/2:y=400:fontsize=50[txt4]" \ -map "[txt1_out]" -t 10 -y ~/Desktop/output_txt1.mp4 \ -map "[txt3_out]" -t 10 -y ~/Desktop/output_txt3.mp4 \ -map "[txt4]" -t 10 -y ~/Desktop/output_txt4.mp4
咱们拆解一下这个命令的关键部分:
- 当生成
[txt1]后,用split[txt1_out][txt1_cont]把它拆成两个分支:[txt1_out]用来映射输出带text1的视频,[txt1_cont]则继续进入下一个drawtext滤镜处理。 - 同理,
[txt3]也通过split拆成[txt3_out](输出用)和[txt3_cont](继续后续滤镜)。 - 最后通过多个
-map参数分别指定不同的输出节点,搭配对应的输出文件路径,就能一次性生成多个不同阶段的视频文件了。
如果你只需要输出某几个中间节点,也可以按需调整split的位置,不用每个节点都拆分。
备注:内容来源于stack exchange,提问作者o_ren
相关产品推荐
相关产品推荐

