使用 ffmpeg 从 png 文件制作 gif 时颜色混乱(扭曲)

Posted

技术标签:

【中文标题】使用 ffmpeg 从 png 文件制作 gif 时颜色混乱(扭曲)【英文标题】:colors messed up (distorted) when making a gif from png files using ffmpeg 【发布时间】:2020-03-08 22:54:01 【问题描述】:

我有一系列 png 图片:image_00.pngimage_01.pngimage_02.png 等。我想将它们转换为 gif,所以我尝试了命令

ffmpeg -i image_%02d.png video.gif

不幸的是,生成的 gif 具有扭曲的颜色。更具体地说,它在视频中的一些物体周围添加了一种奇怪的黄色雾霾。

我还尝试将上述命令与所有可能的像素格式选项一起使用(我使用命令ffmpeg -h encoder=gif 确定):rgb8bgr8rgb4_bytebgr4_bytegray、@987654331 @。例如ffmpeg -i image_%02d.png -pix_fmt rgb8 video.gif。不幸的是,所有生成的 gif 都有某种颜色失真。

我还观察到,如果我将图像转换为 mp4 而不是 gif,则不会发生这种失真。但是,如果我尝试将该 mp4 转换为 gif,我最终会再次出现失真。

如何制作这个不失真的 gif?

【问题讨论】:

【参考方案1】:

我能够通过首先为所有 png 图像生成一个调色板来解决这个问题。然后我使用该调色板创建了 gif:

ffmpeg -i image_%02d.png -vf palettegen palette.png
ffmpeg -i image_%02d.png -i palette.png -lavfi paletteuse video.gif

有关详细信息,请参阅https://ffmpeg.org/ffmpeg-filters.html 的“palettegen”和“paletteuse”部分

【讨论】:

这会在 git-2020-02-09-5ad1c1a 版本中产生“线程消息队列阻塞”错误消息,相当混乱。曾经工作过,现在怀疑我的框架太大了。 @ConradB 是的,我有时也会收到这条消息。我不认为它会影响输出。但是您通常可以通过使用-thread_queue_size 选项手动设置线程队列大小来修复它,例如ffmpeg -thread_queue_size 1024 -i image_%02d.png -i palette.png -lavfi paletteuse video.gif

以上是关于使用 ffmpeg 从 png 文件制作 gif 时颜色混乱(扭曲)的主要内容,如果未能解决你的问题,请参考以下文章

如何在制作 gif FFMPEG WEBM TO GIF 之前覆盖帧

如何从圆形蒙版图像制作 gif?

ffmpeg 制作webp动图

使用 ffmpeg 转换为 gif 的视频具有框图案背景

希望播放非编码视频上传,然后通过 FFMPEG 从选择点导出 gif

FFmpeg如何在shell脚本中反转gif