文章

🎞️ 使用 FFmpeg 将视频生成 GIF 动图

使用 FFmpeg 将视频文件转换为 GIF 动图的详细步骤

安装 FFmpeg

首先,需要安装 FFmpeg。可以使用 asdf 管理工具来安装。

1
2
3
4
5
6
asdf plugin add nasm
asdf install nasm 2.16
asdf global nasm 2.16
asdf plugin add ffmpeg
asdf install ffmpeg 6.0
asdf global ffmpeg 6.0

FFmpeg 支持的所有格式插件

如果你希望将视频转换为 WebP 格式,需要开启 libwebp 支持。可以通过以下命令安装所需的库:

1
2
3
4
5
sudo dnf install libwebp libwebp-devel -y

ASDF_FFMPEG_ENABLE="libwebp" asdf install ffmpeg 6.0

ffmpeg -i input.mp4 -vcodec libwebp -filter:v fps=fps=20 -lossless 1 -loop 0 -preset default -an -vsync 0 -s 800:600 output.webp

更多 WebP 参数

命令格式

使用 FFmpeg 转换视频为 GIF 动图的基本命令格式如下:

1
ffmpeg [参数] [动图文件名.gif]

举个例子,如果视频文件名为 video.mp4,而你希望生成的动图文件名为 pic.gif,则可以使用以下最简单的命令:

1
ffmpeg -i video.mp4 pic.gif

如果来源不是视频而是图片,则需要将图片按数字编号连起来(数字必须连续)。

其他参数说明

以下是一些可用的参数,更多详细信息可以参考 FFmpeg 官方文档

  • -ss xx:xx:xx:从指定的时间 xx:xx:xx 开始生成 GIF。
  • -t xx:从开头持续 xx 秒的视频用于生成动图。
  • -s AAxBB:生成的动图分辨率为 AAxBB
  • -vf scale=xxx:-1:等比例调整分辨率,xxx 指定横向,竖直方向将跟随等比例调整。
  • -r xx:生成动图的帧率,每秒播放的图片数。
  • -b:v xx:调整码率以影响清晰度,例如 xx 设为 1M,即每秒钟播放的数据量为 1M
  • -threads xx:执行的线程数。
  • -crf xx:平衡视频质量和文件大小,取值 0~51,越大视频质量越差,建议取值 17~28,默认为 23
  • -c:v xx:指定编码格式,FFmpeg 对 MP4 默认使用 H264(libx264)。
  • -vf "transpose=XXX":旋转视频,0:逆时针旋转 90 度并垂直翻转;1:顺时针旋转 90 度;2:逆时针旋转 90 度;3:顺时针旋转 90 度后并垂直翻转。
本文由作者按照 CC BY 4.0 进行授权