基础操作
FFMPEG 的基础操作包括查看视频信息、提取帧等常用功能。
查看视频信息
基础信息查看
bash
ffmpeg -i input.mp4详细格式信息
bash
ffmpeg -i input.mp4 -hide_banner仅显示流信息(JSON 格式)
bash
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4查看视频时长
bash
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4查看视频分辨率
bash
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.mp4视频取帧
基础取帧
从视频中提取所有帧为图片序列。
bash
ffmpeg -i input.mp4 -start_number 0 output_dir/%08d.png指定帧率取帧
按指定帧率提取帧(例如每秒提取 1 帧)。
bash
ffmpeg -i input.mp4 -vf fps=1 output_dir/%08d.png提取指定时间段的帧
提取视频中某个时间段的帧。
bash
# 从第 10 秒开始,提取 5 秒的帧
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:05 -start_number 0 output_dir/%08d.png提取指定数量的帧
提取视频中的前 N 帧。
bash
# 提取前 100 帧
ffmpeg -i input.mp4 -vframes 100 -start_number 0 output_dir/%08d.png提取关键帧(I 帧)
只提取关键帧,文件更少。
bash
ffmpeg -i input.mp4 -vf "select='eq(pict_type,I)'" -vsync vfr output_dir/%08d.png参数说明
| 参数 | 说明 |
|---|---|
-i | 输入视频文件 |
-start_number | 输出文件名起始编号 |
%08d.png | 输出文件名格式(8位数字,不足补零) |
-vf fps=1 | 视频滤镜,设置帧率为每秒 1 帧 |
-ss | 开始时间(格式:HH:MM:SS) |
-t | 持续时间 |
-vframes | 提取的帧数 |
-vsync vfr | 可变帧率同步 |
批量处理
批量提取帧(Shell 脚本)
bash
#!/bin/bash
for file in *.mp4; do
mkdir -p "${file%.mp4}_frames"
ffmpeg -i "$file" -start_number 0 "${file%.mp4}_frames/%08d.png"
done批量查看信息
bash
#!/bin/bash
for file in *.mp4; do
echo "=== $file ==="
ffprobe -v quiet -show_format -show_streams "$file" | grep -E "(duration|width|height|codec_name)"
done常用参数说明
输入输出参数
-i: 指定输入文件-y: 自动覆盖输出文件(不询问)-n: 不覆盖输出文件(如果存在则跳过)
视频参数
-vcodec/-c:v: 视频编码器-vf: 视频滤镜-r: 设置帧率-s: 设置分辨率(例如:1920x1080)
时间参数
-ss: 开始时间-t: 持续时间-to: 结束时间
下一步:学习转码与压缩相关内容。
