ffprobe 是 FFmpeg 工具集中的一个多媒体分析工具,用于提取音视频文件的元数据、格式信息、流信息等。以下是 ffprobe 的基本用法和常见场景:
1. 显示文件基本信息
ffprobe input.mp4
- 输出文件的容器格式、时长、码率、流信息(视频/音频/字幕等)等基础信息。
2. 以 JSON 格式输出详细信息
ffprobe -v error -show_format -show_streams -print_format json input.mp4
-show_format:显示容器格式信息(如时长、文件大小、比特率等)。-show_streams:显示所有流(视频、音频、字幕等)的详细信息。-print_format json:以 JSON 格式输出,便于程序解析。
3. 显示特定信息字段
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
- 输出文件的总时长(秒):
-show_entries format=duration:仅显示时长字段。-of default=noprint_wrappers=1:nokey=1:仅输出数值,去除冗余信息。
4. 查看视频流信息
ffprobe -v error -select_streams v:0 -show_entries stream=width,height,codec_name -of csv=p=0 input.mp4
- 输出视频的宽度、高度、编码格式:
-select_streams v:0:仅选择第一个视频流。-of csv=p=0:以 CSV 格式输出,不显示表头。
5. 查看音频流信息
ffprobe -v error -select_streams a:0 -show_entries stream=sample_rate,channels,codec_name -of csv=p=0 input.mp4
- 输出音频的采样率、声道数、编码格式。
6. 显示关键帧时间戳
ffprobe -v error -select_streams v:0 -show_frames -show_entries frame=pts_time,key_frame -of csv=p=0 input.mp4
- 输出所有帧的时间戳和是否为关键帧(
1是关键帧,0不是)。
命令解析
ffprobe -v error -show_frames -select_streams v:0 test.h264 | findstr "pict_type"
作用
ffprobe部分:-v error:仅显示错误信息(抑制冗余输出)。-show_frames:输出每一帧的详细信息。-select_streams v:0:仅分析第一个视频流(v:0)。test.h264:输入的视频文件(裸 H.264 流)。
- 管道
|+findstr/grep:- 过滤输出结果,仅保留包含
pict_type的行(即帧类型标记)。 pict_type的可能值:I:关键帧(Intra-coded frame)。P:预测帧(Predicted frame)。B:双向预测帧(Bi-directional frame)。
- 过滤输出结果,仅保留包含
输出示例
pict_type=I
pict_type=P
pict_type=B
...
Windows 与 Linux 平台用法对比
1. Windows 平台
- 直接使用
findstr(Windows 原生命令):ffprobe -v error -show_frames -select_streams v:0 test.h264 | findstr "pict_type"
2. Linux/macOS 平台
- 将
findstr替换为grep:ffprobe -v error -show_frames -select_streams v:0 test.h264 | grep "pict_type"
注意事项
- 文件格式:
test.h264是裸 H.264 流文件,如果输入是 MP4/MKV 等容器格式,命令同样适用。- 若文件是其他格式(如
.mp4),需确保视频流的编码是 H.264。
- 性能问题:
-show_frames会逐帧分析文件,大文件可能较慢。- 如果只需关键帧信息,可以用更高效的方式:
ffprobe -v error -show_frames -select_streams v:0 -show_entries frame=pict_type -of csv test.h264 | grep -n I
- 输出格式控制:
- 如需更简洁的输出(仅帧类型),可添加
-of csv:ffprobe -v error -show_frames -select_streams v:0 -show_entries frame=pict_type -of csv test.h264
- 如需更简洁的输出(仅帧类型),可添加
实际应用场景
- 检查关键帧分布:确认视频中是否有规律的关键帧(影响视频编辑和流媒体分片)。
- 调试编码问题:验证是否缺少关键帧(例如直播流丢帧问题)。
- 自动化脚本:提取帧类型用于后续处理(如过滤非关键帧)。
7. 检查文件是否损坏
ffprobe -v error -i input.mp4
- 如果文件损坏或无法解码,会输出错误信息;无输出则表示文件正常。
8. 输出帧数统计
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of csv=p=0 input.mp4
- 统计视频流的总帧数(注意:可能需要完整解码文件,耗时较长)。
常用参数说明
| 参数 | 作用 |
|---|---|
-v error |
隐藏冗余日志,仅显示错误 |
-show_format |
显示容器格式信息 |
-show_streams |
显示所有流信息 |
-select_streams v:0 |
选择第一个视频流 |
-select_streams a:0 |
选择第一个音频流 |
-of json/-of csv |
指定输出格式 |
-print_format json |
同 -of json |
典型应用场景
- 脚本处理:用 JSON 格式输出并解析元数据。
- 质量控制:检查视频分辨率、编码格式是否符合要求。
- 调试:分析文件是否损坏或编码参数异常。
如果需要更复杂的功能(如分析帧内容),可以结合 ffmpeg 或其他工具使用。