FFmpeg hstack拼接PNG时如何将透明区域替换为白色去除Alpha通道
解决方案
直接在原有的滤镜拼接逻辑后追加removealpha=color=white滤镜即可实现需求,不需要额外加其他输出参数。
修改后可直接运行的完整命令:
ffmpeg -i a.png -i b.png -filter_complex "hstack=inputs=2,removealpha=color=white" output.png
相关说明
- 原命令直接拼接后输出会保留输入PNG的Alpha透明通道,如果只给输出加
-pix_fmt rgb24参数强制转换为无透明的RGB格式,FFmpeg默认会把透明区域填充为黑色,达不到白底的要求 removealpha滤镜的作用就是移除图像的Alpha通道,它的color参数可以自定义原透明区域的填充颜色,传入white就会把所有透明位置替换为纯白色,最终输出的PNG文件自动为不带Alpha通道的普通RGB格式- 这个写法不需要提前计算拼接后图像的分辨率,滤镜会自动适配hstack输出的画布尺寸,不会出现尺寸不匹配的报错
- 如果你的FFmpeg版本较老,找不到
removealpha滤镜,可以用白底叠加的兼容写法,效果完全一致:
ffmpeg -i a.png -i b.png -filter_complex "hstack=inputs=2[stacked];color=white[bg];[bg][stacked]overlay=format=auto,format=rgb24" output.png
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

