之前做动画的业务要求gif图不能超过5MB,这一个6秒多的视频压缩到5MB动图质量可就差太多了,后来询问发现他那支持64帧图,那可以试试,找了一圈发现ffmpeg支持提取,过程还是比较方便的。

安装ffmpeg

macOS

  1. 这里以macOS为例,安装homebrew
1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  1. 然后通过homebrew安装
1
brew install ffmpeg

Windows

  1. 首先,安装 Chocolatey。以管理员身份运行 PowerShell 并执行以下命令:
1
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((Invoke-WebRequest -Uri https://chocolatey.org/install.ps1).Content)
  1. 安装 FFmpeg。等 Chocolatey 安装完成后,还在 PowerShell 里执行以下命令:
1
choco install ffmpeg

完成上述两步后,FFmpeg 应该就已经安装在你的机器上了,并已经设置好了环境变量,所以你可以在命令提示符或 PowerShell 中任何位置输入 ffmpeg 来运行它。

提取视频帧图

如果你想使用FFmpeg从视频中提取特定数量的帧(例如64帧),你可以利用其强大的滤镜和选项来实现。以下是一个方法:

获取视频的时长

首先,我们需要知道视频的时长,以便计算如何均匀提取94帧。执行以下命令获取视频的时长(单位为秒):

1
video="input_video.mp4"; duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $video)

确保替换input_video.mp4为你的视频文件名。

提取帧数

在终端输入cd,输入一个空格,然后将文件夹拖入到终端即可。例如:

1
cd /Users/zhheo/Downloads

(上面的命令每个人都不同,请勿直接使用)

例如,我们将使用ffmpeg提取94帧。执行以下命令:

1
ffmpeg -i $video -vf "fps=1/($duration/94)" output_%04d.png

这条命令会从视频的开始到结束均匀地提取94帧,输出文件名的格式为output_0001.jpgoutput_0002.jpg等,输出的位置在终端的默认位置,如果需要更改输出路径,需要执行命令前先cd进文件夹。

生成的图片