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 |
|
#6 在 视频 分类中
每月 2,684 次下载
在 5 个 Crates 中使用
175KB
3.5K SLoC
基于 pngquant 的最高质量 GIF 编码器。
gifski 使用 pngquant 的特性将视频帧转换为 GIF 动画,以实现高效的跨帧调色板和时间抖动。它产生的动画 GIF 每帧使用数千种颜色。
它是一个 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,您必须尝试不同的尺寸和质量设置。命令行工具将在压缩期间显示估计的总文件大小,但请注意,这个估计非常不精确。
构建
- 通过rustup安装Rust 或运行
rustup update
。此项目只支持最新的Rust版本。如果您不定期运行rustup update
,可能会遇到编译错误、关于“不稳定版”的警告等。 - 克隆存储库:
git clone https://github.com/ImageOptim/gifski
- 在克隆的目录中,运行:
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,这可能 非常困难 才能正常工作,因此默认情况下并未启用。
您必须安装 ffmpeg
和 libclang
,同时它们各自的相关C头文件必须安装在默认系统包含路径中。具体取决于平台和版本,但通常需要安装诸如 libavformat-dev
、libavfilter-dev
、libavdevice-dev
、libclang-dev
、clang
等软件包。请注意,这些依赖项的安装可能相当困难。尤其是在macOS和Windows上,仅安装它们就需要 专业知识,否则可能会浪费几个小时来解决无休止的愚蠢的安装和编译错误,这些问题我无法帮助解决。如果您正在进行交叉编译,请尝试取消注释 [patch.crates-io]
部分末尾的 Cargo.toml
,其中包含一些针对ffmpeg的实验性修复。
安装依赖项后,使用以下命令进行编译:cargo build --release --features=video
或cargo 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