You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用FFmpeg缩放带透明通道图片时透明像素变白的问题排查

解决FFmpeg缩放Overlay图片时透明像素变白的问题

我之前也碰到过类似的坑,给你拆解下问题原因和解决办法:

问题场景回顾

你遇到的情况很典型:直接用overlay滤镜给视频加带透明通道的图片时一切正常,但只要给图片加上scale缩放处理,透明像素就变成了白色。好在你后来精准定位到了关键——错误地把-deinterlace参数应用在了图片输入上

为什么会出现这个问题?

-deinterlace是专门处理隔行扫描视频的参数,它会调整视频帧的像素格式来消除隔行条纹。但这个参数完全不适合用在带Alpha通道(透明像素)的图片上:当它作用于图片时,会直接破坏图片的Alpha通道信息,把原本透明的区域强制转为白色,尤其是在配合scale这类需要重新计算像素的操作时,这个问题会被直接暴露出来。

正确的命令示例

-deinterlace只应用在视频输入上,图片输入保持原始格式即可:

-i input.mp4 -vf deinterlace -i overlay.png -filter_complex "[1:v]scale=200:200[ov];[0:v][ov]overlay" output.mp4

如果习惯用全局选项的话,确保它只对视频流生效(全局-deinterlace默认只处理视频流,不过更推荐上面的滤镜写法,逻辑更清晰):

-deinterlace -i input.mp4 -i overlay.png -filter_complex "[1:v]scale=200:200[ov];[0:v][ov]overlay" output.mp4

通用排查小技巧

以后再遇到Overlay透明通道丢失的问题,可以先检查这几点:

  • 有没有给图片输入应用视频专用的处理参数(比如-deinterlaceyadif这类隔行处理滤镜)
  • 图片的像素格式是否被强制转换(比如不小心用了-pix_fmt yuv420p这类不支持Alpha的格式)
  • 缩放滤镜是否搭配了正确的像素格式设置(比如可以给scale加上format=rgba来明确保留Alpha通道:[1:v]scale=200:200:format=rgba[ov]

内容的提问来源于stack exchange,提问作者Hristo Ivanov

火山引擎 最新活动