如何用ffmpeg从视频中平均提取指定数量的帧图片?
文章摘要
HeoGPT
这篇文章介绍了如何使用ffmpeg提取特定数量的帧图从视频中,以满足动画的业务要求。首先提到了因为5MB的大小限制导致GIF图的质量差。然后,文章讲述了在macOS上安装ffmpeg的方法,使用homebrew来完成。接着,详细解释了如何先通过ffprobe获取视频的时长,然后使用ffmpeg均匀提取视频帧。文章中提供了相关的命令代码,并展示了提取帧的效果图片。
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
投诉之前做动画的业务要求gif图不能超过5MB,这一个6秒多的视频压缩到5MB动图质量可就差太多了,后来询问发现他那支持64帧图,那可以试试,找了一圈发现ffmpeg支持提取,过程还是比较方便的。
安装ffmpeg
macOS
- 这里以macOS为例,安装homebrew
1 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
- 然后通过homebrew安装
1 | brew install ffmpeg |
Windows
- 首先,安装 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) |
- 安装 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.jpg
、output_0002.jpg
等,输出的位置在终端的默认位置,如果需要更改输出路径,需要执行命令前先cd进文件夹。
- 感谢你赐予我前进的力量
打赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 张洪Heo
评论
生成评论
匿名评论
违规举报
✅ 你无需删除空行,直接评论以获取最佳展示效果