ffmpeg:如何创建具有透明背景的 AVIF 图像?

ffmpeg:如何创建具有透明背景的 AVIF 图像?

我正在尝试创建具有透明背景的 avif 图像。我用来创建具有透明背景的 PNG 图像的类似命令似乎不适用于 avif 文件:

ffmpeg -f lavfi -i "color=color=#[email protected]:size=550x60,format=yuva420p,drawtext=text='Hello how are you?':fontcolor=black:fontsize=55:borderw=1:bordercolor=white:x=(W-tw)/2:y=(H-th)/2" -frames:v 1 -c:v libaom-av1 hello.avif

这会导致图像背景为黑色,但我希望它是透明的...我在 avif.io 上看到 avif 图像支持透明度。

对于 PNG 图像,该命令有效:

ffmpeg -f lavfi -i "color=color=#[email protected]:size=550x60,format=yuva420p,drawtext=text='Hello how are you?':fontcolor=black:fontsize=55:borderw=1:bordercolor=white:x=(W-tw)/2:y=(H-th)/2" -frames:v 1 hello.png

图像看起来应该是这样的:

在此处输入图片描述

关于如何使用 avif 图像来实现这一点,您有什么想法吗?

答案1

您需要 ffmpeg 5.1 或更新版本。

根据提交,需要提供两个流。第一个用于颜色数据 (YUV),第二个是用作 alpha 的单色单平面。最简单的方法是映射视频两次,并在第二个上使用 alphaextract 过滤器。

例如

ffmpeg -f lavfi -i "color=color=#000000@0:size=550x60,format=yuva420p,drawtext=text='Hello how are you?':fontcolor=black:fontsize=55:x=(W-tw)/2:y=(H-th)/2" -map 0 -map 0 -filter:v:1 alphaextract -frames:v 1 -c:v libaom-av1 -still-picture 1 hello.avif

相关内容