FFmpeg多图层叠加场景实现问题:含视频、图片及文字图层
解决FFmpeg三层叠加(文字在视频上方)的滤镜错误问题
我来帮你搞定这个FFmpeg的滤镜错误!你遇到的Too many inputs specified for the "format" filter报错,根源很简单:format滤镜只能接收单个输入流,但你在命令里把[0][a]两个流同时传给它了,这就违反了它的输入规则,所以才会抛出初始化错误。
正确的命令实现(文字在视频上方)
先明确我们要的图层顺序(从下到上):基础图片 → 带透明度的视频 → 文字图片,对应的正确FFmpeg命令如下:
ffmpeg -i video.mp4 -i image.jpg -i text.png -filter_complex '[0]format=rgba,colorchannelmixer=aa=0.7,scale=3840:2160[vid];[1][vid]overlay=0:0[base_vid];[base_vid][2]overlay=0:0' -t 5 output.mp4
命令拆解说明
- 处理视频流:
[0]format=rgba,colorchannelmixer=aa=0.7,scale=3840:2160[vid]
把原始视频转成RGBA格式(支持透明度),设置70%的不透明度,再缩放到和基础图片一致的3840×2160尺寸,最后把处理后的视频流命名为[vid]。 - 叠加视频到基础图:
[1][vid]overlay=0:0[base_vid]
把处理好的视频[vid]叠加到基础图片[1]上,得到包含基础图+视频的中间流[base_vid]。 - 叠加文字到最上层:
[base_vid][2]overlay=0:0
最后把文字图片[2]叠加到[base_vid]的最上层,完美实现文字在视频上方的效果。
小提示
FFmpeg里不同滤镜的输入数量是固定的:像overlay需要2个输入(底层+上层),而format、scale、colorchannelmixer这类滤镜都是单输入单输出的,一定要注意不要给它们传递多个流哦。
内容的提问来源于stack exchange,提问作者lhan
相关产品推荐
相关产品推荐

