ffmpeg:禁用所有 gif 帧中的透明功能

ffmpeg:禁用所有 gif 帧中的透明功能

使用 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

结果:
在此处输入图片描述

相关内容