【问题标题】:Filter "showpalette" of FFmpeg always returns the default paletteFFmpeg 的过滤器“showpalette”总是返回默认调色板
【发布时间】:2017-08-10 03:17:43
【问题描述】:

我想用 FFmpeg 提取 GIF 文件的调色板,并从文档中了解到 filter "showpalette" 可以做到这一点。但是 FFmpeg 总是返回相同的默认调色板而不是自定义调色板。

即使对于pkh.me's Post 中的两个示例,FFmpeg 也会返回相同的调色板。这是我的代码:

ffmpeg -i bbb-trans.gif -vf "showpalette" -y a%03d.png
ffmpeg -i bbb-nodither.gif -vf "showpalette" -y b%03d.png

我是否使用了错误的命令?或者这只是 FFmpeg 的一个 bug。

【问题讨论】:

    标签: video ffmpeg gif color-palette


    【解决方案1】:

    正如showpalette 的文档所说,“此过滤器仅与 pal8 像素格式帧相关”。您的测试 GIF 是全 RGB。

    你仍然可以运行

    ffmpeg -i in.gif -vf palettegen=stats_mode=single,scale=30*iw:-1:flags=neighbor a%d.png
    

    您仍然可以对 pal8 GIF 使用 showpalette

    【讨论】:

    • 谢谢!我尝试使用您的命令,它返回使用的特定颜色或自定义调色板。并且还尝试将 GIF 转换为 pal8 ffmpeg -i bbb-nodither.gif -pix_fmt pal8 -y pal8.gif,两个输入 GIF 的默认调色板仍然相同。你知道为什么吗?
    • 如果输入的 GIF 是 RGB,则 GIF 中没有嵌入调色板,因此没有自定义调色板可显示。因此它显示了默认调色板。如果您在不运行调色板生成器的情况下转换为 pal8,它将再次使用默认调色板,这就是将显示的内容。
    • 关于我提到的两个 GIF 文件,在它们上应用 ''xxd" 我可以看到里面的调色板,也得到了 ImageMagick 的结果 "convert bbb-nodither.gif -format %c -depth 8 直方图:信息:- |"
    • 对不起,我不知道 xxd 是做什么的。使用 IM,看起来您将深度降低到 8 位,即 256 种颜色,然后显示 256 种最常用的颜色。这与我的命令最终做的事情是一样的,制作 png。
    • xxd 只是一个以十六进制转储二进制文件的工具。 IM 用于确认我通过 xxd 看到的是真正的调色板 - 顺便说一句,奇怪的是 IM 只返回 254 色,而不是 256。
    【解决方案2】:

    这是我的总结--

    使用以下命令获取ffmpeg中的默认调色板:

    ffmpeg -v fatal -i input.mp4 -vf "showpalette=30" -y palette-default.png
    

    该命令可以根据输入文件生成特定的调色板:

    ffmpeg -v fatal -i input.mp4 -vf "palettegen,scale=30*iw:-1:flags=neighbor" -y palette-specific.png
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      相关资源
      最近更新 更多