使用ffmpeg从png文件制作gif时,颜色失真(扭曲)。

9
我有一系列的png图像:image_00.pngimage_01.pngimage_02.png等等。我想把它们转换成gif格式,所以我尝试了以下命令:
ffmpeg -i image_%02d.png video.gif

很遗憾,产生的gif图像颜色有些失真。具体来说,在视频中某些物体周围添加了一种奇怪的黄色薄雾。

我还尝试使用上述命令的所有可能的像素格式选项(使用命令ffmpeg -h encoder=gif确定),例如rgb8bgr8rgb4_bytebgr4_bytegraypal8等。例如ffmpeg -i image_%02d.png -pix_fmt rgb8 video.gif。不幸的是,所有产生的gif图像都存在某种程度的颜色失真。

我还观察到,如果将图像转换为mp4而不是gif,则不会出现这种失真。然而,如果我尝试将该mp4转换为gif,则又会出现失真。

如何制作没有颜色失真的gif图像?

1个回答

22

我先为所有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 中会产生“线程消息队列阻塞”错误信息,相当令人困惑。曾经可以工作,但现在怀疑我的帧太大了。 - user337598
@ConradB 是的,我有时也会收到那个消息。但我不认为它会影响输出。但你可以通过手动设置线程队列大小来解决这个问题,使用 -thread_queue_size 选项,例如:ffmpeg -thread_queue_size 1024 -i image_%02d.png -i palette.png -lavfi paletteuse video.gif - Trevor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接