使用 FFMPEG,我尝试禁用 png 文件中 gif 中所有帧的透明模式。我在 FFMPEG 中尝试了许多选项,但经过多次测试,我只让第一帧禁用透明,其他帧都启用透明。我可以使用网站检查我的 gif 文件的每一帧https://onlinegiftools.com/analyze-gif
我发现的实际解决方案是为每个帧添加一个调色板,每个调色板的选项为reserve_transparent = 0,但gif文件比全局调色板更大:
ffmpeg -v 错误 -framerate 15 -i frame%05d.png -filter_complex “[0:v] 拆分 [a][b];[a] palettegen=max_colors=64:reserve_transparent=0:stats_mode=single [p];[b][p] paletteuse=new=1” -y 动画.gif
使用 FFMPEG,如何使用所有帧的全局 palettegen 禁用 gif 中所有帧的 png 透明功能?
来自法国的最诚挚问候。
答案1
您可以使用以下阶段:
创建一个限制所有输入图像缩放版本的平铺 PNG 图像:
该平铺用于生成基于所有图像(而不是仅单个图像)的全局调色板。平铺背景是透明的。
[我找不到创建全局调色板的更好选择]。ffmpeg -y -i frame%05d.png -vf "scale=120:-1,tile=10x10:color=black@0" -frames:v 1 tmp.png
用于
palettegen
生成调色板(从图块):ffmpeg -y -i tmp.png -vf "palettegen=max_colors=64:reserve_transparent=0:stats_mode=single" palette.png
使用以下方式应用调色板
paletteuse
:
[可以合并最后两个命令]。ffmpeg -y -framerate 15 -i frame%05d.png -i palette.png -lavfi paletteuse animation.gif
我使用以下框架进行了测试关注帖子。
结果的背景颜色定义不明确。
我们可以将其设置为黑色,例如:
ffmpeg -y -i frame%05d.png -vf "format=rgb24,scale=120:-1,tile=10x10:color=black" -frames:v 1 tmp.png
ffmpeg -y -i tmp.png -vf "palettegen=max_colors=64:reserve_transparent=0:stats_mode=single" palette.png
ffmpeg -y -framerate 15 -i frame%05d.png -i palette.png -filter_complex "[0]format=rgb24[b];[b][1]paletteuse=new=1" animation.gif