利用ffmpeg截图和生成gif

bash 复制代码
ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 output.jpg



ffmpeg -i input.mp4 -ss 00:00:10 -vframes 180 output.jpg
-vframes 180代表截取180帧,
实测后发现如果视频是60fps,那么会从第10秒截取到第13秒
 
  • -i input.mp4:指定输入视频文件。
  • -ss 00:00:10:定位到视频的第10秒。
  • -vframes 1:指定只提取一帧。
  • output.jpg:输出截图文件。

从视频中提取多帧截图

bash 复制代码
ffmpeg -i input.mp4 -vf fps=1/60 output_%03d.jpg
 
  • -vf fps=1/60:设置每秒提取一帧,1/60表示每60秒提取一帧。
  • output_%03d.jpg:输出文件命名格式,%03d表示三位数字编号。
从视频中提取特定时间段的截图
bash 复制代码
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 -vf fps=1/10 output_%03d.jpg
 
-vf 是 -filter:v 的简写,表示对视频流使用视频滤镜。

fps=1/10 指的是帧率为 每秒 1/10 帧,也就是 每 10 秒提取一帧。意味着1分钟内截图6张图
  • -ss 00:01:00:开始时间,从第1分钟开始。
  • -to 00:02:00:结束时间,到第2分钟结束。
  • -vf fps=1/10:每10秒提取一帧,如果视频有1分钟,那么仅截图6张图
从视频中提取高质量截图

如果需要提取高质量的截图,可以指定输出图片的质量:

bash 复制代码
ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 -q:v 2 output.jpg
 
  • -q:v 2:设置输出图片的质量,数值越小质量越高,范围是1-31。
从视频中提取指定分辨率的截图
bash 复制代码
ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 -s 640x360 output.jpg
 
  • -s 640x360:设置输出图片的分辨率为640x360。

关键帧限制​ ​:若视频关键帧间隔大,快速定位(-ss在-i前)可能无法精确到非关键帧。,所以为了精确,需要先-i然后再-ss

截取第5秒的第1帧(快速定位,可能不精确)
bash 复制代码
ffmpeg -ss 5 -i input.mp4 -vframes 1 -q:v 2 output.jpg

特点​ ​:-ss在-i前,优先用关键帧定位,速度快但可能不精确。

精确截取第5秒的帧(较慢但准确)
bash 复制代码
ffmpeg -i input.mp4 -ss 5 -vframes 1 -q:v 2 output.jpg
  • ​特点​ :-ss在-i后,逐帧解码到指定时间,速度慢但更精确。

截取第5.5秒的帧(精确到小数)

bash 复制代码
ffmpeg -ss 5.5 -i input.mp4 -vframes 1 output.png
输出PNG格式
bash 复制代码
ffmpeg -ss 5 -i input.mp4 -vframes 1 -compression_level 0 output.png

-compression_level:取值范围:0 到 9

含义:

0:最小压缩,生成的文件较大,但处理速度快

9:最大压缩,文件体积小,但处理速度慢

默认值:-compression_level 6

时间精度​ ​:支持毫秒级时间(如00:00:05.500)。

文件名

bash 复制代码
ffmpeg -ss 5 -i input.mp4 -vframes 1 output_%03d.jpg
  • 效果​ :生成 output_001.jpg。
  • ​占位符说明​ :
    • %03d:3位数字编号(如 001, 002)。
    • %d:无填充编号(如 1, 2)。

使用 ffmpeg 实现视频中每隔n帧截图一张,可以使用以下命令:

bash 复制代码
ffmpeg -i input.mp4 -r 7.5 -q:v 2 output_%03d.jpg

参数详解:

-r n表示一秒内我一共想提取n帧,也就是每秒的帧率,即fps

计算公式:n=视频的fps/每隔x帧截取一次图片

  • -r 7.5表示如果原视频是 30fps,每 4 帧截图一次,30/4= 7.5fps。

  • 如果原视频是 60fps,每5帧截图一次,60/5=12

生成调色板后做成gif

复制代码
生成调色板
./ffmpeg -i ./jietu/output_%03d.jpg -vf "fps=10,scale=320:-1:flags=lanczos,palettegen" palette.png
在调色板的基础上生成gif
./ffmpeg -i ./jietu/output_%03d.jpg -i palette.png -lavfi "fps=10,scale=480:-1 [x]; [x][1:v] paletteuse" output3.gif
相关推荐
可乐鸡翅yeah_8 小时前
网页端 M3U8 播放器性能监控,怎么看播放卡顿指标
javascript·ffmpeg·音视频·safari·m3u8
开开心心就好12 小时前
超市定时播音软件,免费版支持循环播放
智能手机·ffmpeg·ocr·word·vim·音视频·visual studio
企业数字化笔记14 小时前
视频成片怎么稳定导出?编码选择、GPU/CPU降级与媒体交付验收
java·python·ffmpeg
企业数字化笔记15 小时前
视觉智能体怎么选技术?目标检测、跟踪、分割、OpenCV和FFmpeg的职责划分
opencv·目标检测·ffmpeg
企业数字化笔记1 天前
视频字幕如何烧录到成片?硬字幕、软字幕、样式控制与播放验收
java·ffmpeg
AIGC小尼2 天前
MiniMax-H3 8G 显存 AI 漫剧进阶实战|ComfyUI 命令行调参、角色锁定与 FFmpeg 批量脚本全解析
人工智能·ffmpeg·comfyui·ai漫剧
物极必反10243 天前
QT使用FFMpeg编译安卓程序.md
qt·ffmpeg·安卓
胡家伟++3 天前
从一段经文到 5 分半水墨动画短片:全 AI 流水线完整实录(即梦 + TTS 克隆 + ffmpeg + 思维链重构)
人工智能·ffmpeg·aigc
allnlei3 天前
Opus In-Band FEC 详解:原理、实现与开源方案
ffmpeg·音视频·gstreamer
VidDown4 天前
从一堆脚本到能维护的系统:视频处理管道的工程化
服务器·ffmpeg·音视频·视频编解码