Skip to content

基础操作

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: 结束时间

下一步:学习转码与压缩相关内容。