AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 790799
Accepted
Alain Reve
Alain Reve
Asked: 2025-02-10 01:50:51 +0800 CST2025-02-10 01:50:51 +0800 CST 2025-02-10 01:50:51 +0800 CST

如何将动画 gif 转换为单独的帧,然后再转换回动画 gif?

  • 772

我想手动修改动画 gif。因此,我尝试将其转换为单个(可编辑)帧,然后绘制修改内容,然后重新组装这些帧。

首先,我将 31 秒长的 mp4 转换为动画 gif:

ffmpeg   -i Daisies.mp4   -r 15   -vf scale=512:-1   -ss 00:00:03 -to 00:00:06   DaisiesOK.gif

这个动图还可以。

然后我将此动画 gif 转换为单独的帧:

convert DaisiesOK.gif Daisies.png

第一帧看起来还好,除了它是 256 种颜色,但接下来的帧非常苍白,充满了透明像素。

这些帧转换为动画 gif:

convert -delay 20 -loop 0 *.png Daisies.gif

给出了非常丑陋的视频,雏菊有白色的“阴影”,它们开始的地方(它们摇摆)留下了白色雏菊边缘的印记。

如果我尝试使用 jpeg 而不是 png,情况会更糟,大部分视频都只是黑色。

我如何提取保留所有颜色信息的帧?问题出在 imagemagick 还是 ffmpeg?

ffmpeg
  • 2 2 个回答
  • 578 Views

2 个回答

  • Voted
  1. Best Answer
    Marcus Müller
    2025-02-10T02:59:12+08:002025-02-10T02:59:12+08:00

    第一帧看起来还不错,只是它是 256 色的,

    您可能已经意识到这一点,但 gif 是一种基于调色板的图像格式,调色板条目只有 8 位,即最多 256 种不同的颜色。并且生成 gif 的方式不是“巧妙地”使用输入视频中最流行的颜色,而是使用固定的默认调色板。

    但接下来的图像非常苍白,充满了透明像素。我如何提取保留所有颜色信息的帧?问题出在 imagemagick 还是 ffmpeg?

    这就是 gif 动画的工作原理。您提取的帧包含所有颜色信息。如果没有前一帧,它们就毫无用处。因此,问题不在于任何程序,而在于您要求它们执行的操作:生成动画 gif,它是一系列帧,其中包含透明像素,其中一帧与前一帧相同,而有变化的像素则包含彩色像素。

    确保您确实想要动画 gif。如今,浏览器播放 MP4 比播放 gif消耗更少的CPU 能力,而且它们在任何情况下看起来都更好。您还可以尝试动画 PNG。

    然后我将这个动画 gif 转换为单独的帧……

    ffmpeg 也可以用来从 gif 中提取帧;convert不需要绕道:

    ffmpeg -i DaisiesOK.gif frame_%03d.png
    

    这里的问题是,为什么不直接将输入转换Daisies.mp4为 8 位色彩空间,在转换过程中生成最佳调色板(使用palettegen视频滤镜),然后将帧直接转储到 PNG 中。绕道使用 GIF 似乎适得其反。

    • 7
  2. Chris Davies
    2025-02-10T02:47:06+08:002025-02-10T02:47:06+08:00

    你错过了-coalesce旗帜

    magick convert -coalesce DaisiesOK.gif Daisies.png
    

    但还请注意,ImageMagick 确实喜欢将整个处理过的图像以原始格式加载到 RAM 中。您需要足够的内存来实现这一点。

    • 3

相关问题

  • 使用 ffmpeg 从 FLAC 到 ALAC 的无损音频转换

  • 来自 PNG 帧的 H.264/MPEG-4:如何以及如何调整压缩

  • ffmpeg 命令在脚本内静默失败,但在直接运行时有效

  • 将 MKV 内的音频转换为 AC3 或 DTS,保留 6.1 声道

  • ffmpeg:普通文件名的“找不到协议”

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve