FFmpeg滤镜字符串报错排查:添加透明通道后无法运行
问题排查与修复
原代码
<?php shell_exec('ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1]format=rgba,colorchannelmixer=aa=0.75[logo];[0]scale2ref=oh*mdar:ih*0.3[video][logo];[video][logo]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2;" output.mp4')
报错信息
[AVFilterGraph @ 0x5615d18ba440] No such filter: '' Error initializing complex filters Invalid argument
问题根源
- 多余分号导致空滤镜:滤镜字符串末尾的
;会被FFmpeg解析为滤镜链分隔符,误以为后面还有一个空滤镜,触发"No such filter: ''"错误。 - 标签名冲突覆盖透明度设置:第一个滤镜链输出的带透明度水印标签
[logo],被scale2ref滤镜输出的[logo]覆盖,导致之前的透明度设置失效。
修复后的代码
<?php shell_exec('ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1]format=rgba,colorchannelmixer=aa=0.75[watermark];[0]scale2ref=oh*mdar:ih*0.3[video][scaled_watermark];[video][watermark]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" output.mp4')
修复说明
- 移除滤镜字符串末尾的多余分号,避免解析出空滤镜。
- 修改水印标签名为
[watermark],避免被scale2ref的输出标签覆盖,保证透明度设置生效。 - 若需求是缩放水印而非视频,需调整
scale2ref的输入顺序,示例:[1][0]scale2ref=oh*mdar:ih*0.3[watermark][video],具体根据实际需求调整。
内容的提问来源于stack exchange,提问作者Codemonkey
相关产品推荐
相关产品推荐

