#gif #encoder #maker #converter #command-line-tool #gifquant

bin+lib gifski

基于 pngquant 的 GIF 制作工具,用于制作外观精美的 animGIF

20 个稳定版本

1.32.0 2024 年 4 月 24 日
1.14.4 2024 年 2 月 9 日
1.14.1 2024 年 1 月 23 日
1.13.1 2023 年 11 月 11 日
0.6.2 2017 年 11 月 19 日

#6视频 分类中

Download history 409/week @ 2024-05-03 338/week @ 2024-05-10 480/week @ 2024-05-17 482/week @ 2024-05-24 456/week @ 2024-05-31 1153/week @ 2024-06-07 633/week @ 2024-06-14 490/week @ 2024-06-21 475/week @ 2024-06-28 477/week @ 2024-07-05 455/week @ 2024-07-12 519/week @ 2024-07-19 1068/week @ 2024-07-26 592/week @ 2024-08-02 585/week @ 2024-08-09 385/week @ 2024-08-16

每月 2,684 次下载
5 个 Crates 中使用

AGPL-3.0-or-later

175KB
3.5K SLoC

gif.ski

基于 pngquant 的最高质量 GIF 编码器。

gifski 使用 pngquant 的特性将视频帧转换为 GIF 动画,以实现高效的跨帧调色板和时间抖动。它产生的动画 GIF 每帧使用数千种颜色。

(CC) Blender Foundation | gooseberry.blender.org

它是一个 CLI 工具,但也可以编译为 C 库,以便在其它应用中无缝使用。

下载和安装

请参阅 发行版 页面以获取可执行文件。

如果您有 Homebrew,您也可以使用以下命令安装:brew install gifski

如果您有 rustup 的 Rust (1.63+),您也可以使用以下命令从源代码构建:cargo install gifski

用法

gifski 是一个命令行工具。Windows 和 Linux 上没有 GUI(macOS 有一个)。

建议首先将视频导出为 PNG 帧。如果您已安装 ffmpeg,您可以在终端中运行

ffmpeg -i video.webm frame%04d.png

然后从帧制作 GIF

gifski -o anim.gif frame*.png

您还可以调整帧的大小(使用 -W <宽度 in 像素> 选项)。如果输入的视频曾经使用有损视频编解码器进行编码,建议至少将帧的大小减半,以隐藏压缩伪影和视频编解码器执行的色度子采样。

有关更多选项,请参阅 gifski -h

制作较小 GIF 文件的技巧

预计质量会有很大损失,但收益很小。GIF 无论您如何妥协,都不是很好的压缩格式。

  • 使用 --width--height 来减小动画的大小。这会带来最大的影响。
  • 添加 --quality=80(或更低的数字)以降低整体质量。您可以使用
    • --lossy-quality=60 较低的值会使动画更嘈杂/有颗粒感,但会减小文件大小。
    • --motion-quality=60 较低的值会在带有运动的帧中引起模糊或条纹,但会减小文件大小。

如果您需要制作一个适合预定义文件大小的GIF,您必须尝试不同的尺寸和质量设置。命令行工具将在压缩期间显示估计的总文件大小,但请注意,这个估计非常不精确。

构建

  1. 通过rustup安装Rust 或运行 rustup update。此项目只支持最新的Rust版本。如果您不定期运行 rustup update,可能会遇到编译错误、关于“不稳定版”的警告等。
  2. 克隆存储库: git clone https://github.com/ImageOptim/gifski
  3. 在克隆的目录中,运行: cargo build --release

从C使用

查看 gifski.h 以获取 C API。要构建库,运行

rustup update
cargo build --release

并将库链接到 target/release/libgifski.a。请遵守 LICENSE

为软件包维护者提供的C动态库

构建过程使用 cargo-c 正确构建动态库并生成pkg-config文件。

rustup update
cargo install cargo-c
# build
cargo cbuild --prefix=/usr --release
# install
cargo cinstall --prefix=/usr --release --destdir=pkgroot

可以省略 cbuild 命令,因为 cinstall 会在尚未构建的情况下触发构建。

许可证

AGPL 3或更高版本。我可以提供替代许可选项,包括 商业许可。如果您想将其用于与该许可证不兼容的产品,请告知我。

内置视频支持

此工具可选支持直接解码视频,但遗憾的是,它依赖于ffmpeg 4.x,这可能 非常困难 才能正常工作,因此默认情况下并未启用。

您必须安装 ffmpeglibclang,同时它们各自的相关C头文件必须安装在默认系统包含路径中。具体取决于平台和版本,但通常需要安装诸如 libavformat-devlibavfilter-devlibavdevice-devlibclang-devclang 等软件包。请注意,这些依赖项的安装可能相当困难。尤其是在macOS和Windows上,仅安装它们就需要 专业知识,否则可能会浪费几个小时来解决无休止的愚蠢的安装和编译错误,这些问题我无法帮助解决。如果您正在进行交叉编译,请尝试取消注释 [patch.crates-io] 部分末尾的 Cargo.toml,其中包含一些针对ffmpeg的实验性修复。

安装依赖项后,使用以下命令进行编译:cargo build --release --features=videocargo build --release --features=video-static

编译时支持视频功能将应用ffmpeg 许可协议。您可能需要获得 H.264/H.265 视频的专利许可(我建议使用 VP9/WebM)。

gifski -o out.gif video.mp4

为 iOS 进行交叉编译

简单的方法是使用包含的gifski.xcodeproj文件来自动为所有 Apple 平台构建库。将其添加为子项目到您的 Xcode 项目中,并使用gifski-staticlib Xcode 目标进行链接。请参阅GUI 应用程序以了解如何集成库的示例。

手动为 iOS 进行交叉编译

确保您已通过rustup安装了 Rust。运行一次

rustup target add aarch64-apple-ios

然后构建库

rustup update
cargo build --lib --release --target=aarch64-apple-ios

构建将打印“正在丢弃不受支持的 crate 类型cdylib”警告。当为 iOS 构建时这是正常且预期的(cdylib 选项适用于其他平台)。

这将创建一个位于./target/aarch64-apple-ios/release/libgifski.a的静态库。您可以将此库添加到您的 Xcode 项目中。请参阅gifski.app以了解如何从 Swift 使用 libgifski 的示例。

依赖项

~2.4–4MB
~61K SLoC