ffprobe
是 FFmpeg 工具集中的一个强大命令行工具,主要用于分析多媒体文件(如视频、音频等)的格式和内容信息。它可以提取文件的元数据、编解码器信息、流详情、帧信息等,而无需对文件进行转码或修改。
基本用法
bash
ffprobe [选项] 输入文件
常用功能及示例
1. 显示文件基本信息
默认输出文件的格式、流信息(视频/音频/字幕等):
bash
ffprobe input.mp4
2. 以 JSON 格式输出详细信息
适合程序解析:
bash
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
-v quiet
:隐藏日志信息。-print_format json
:输出 JSON 格式。-show_format
:显示文件格式信息(如时长、码率等)。-show_streams
:显示所有流(视频、音频等)的详细信息。
3. 查看特定信息
-
查看视频分辨率、帧率:
bashffprobe -v error -select_streams v:0 -show_entries stream=width,height,avg_frame_rate -of csv=p=0 input.mp4
-select_streams v:0
:选择第一个视频流。-of csv=p=0
:输出 CSV 格式(无表头)。
-
查看音频采样率和声道数:
bashffprobe -v error -select_streams a:0 -show_entries stream=sample_rate,channels -of csv=p=0 input.mp4
4. 查看帧信息(关键帧、PTS 等)
bash
ffprobe -show_frames input.mp4
- 输出每一帧的详细信息(如帧类型、时间戳等)。
5. 检查关键帧(I帧)位置
bash
ffprobe -v error -select_streams v:0 -show_entries frame=pkt_pts_time,pict_type -of csv=p=0 input.mp4
pict_type=I
表示关键帧。
6. 查看文件时长
bash
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
7. 查看编解码器信息
bash
ffprobe -show_streams -show_format input.mp4
- 输出中包含
codec_name
(如h264
、aac
)。
常用选项
选项 | 说明 |
---|---|
-show_format |
显示文件容器格式信息(如 MP4、MKV)。 |
-show_streams |
显示所有流(视频、音频、字幕等)的详细信息。 |
-show_frames |
显示每一帧的详细信息(可能输出很长)。 |
-select_streams v:0 |
仅选择第一个视频流(a:0 表示第一个音频流)。 |
-v error |
隐藏冗余日志,仅显示错误。 |
-print_format json |
以 JSON 格式输出(还支持 xml , csv 等)。 |
-of default |
控制输出格式(如 -of csv=p=0 输出简洁 CSV)。 |
代码示例
cmd
PS C:\Users\Mayn\Desktop> ffprobe .\testVideo.mp4
ffprobe version 7.1-essentials_build-www.gyan.dev Copyright (c) 2007-2024 the FFmpeg developers
built with gcc 14.2.0 (Rev1, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.100 / 61. 19.100
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\testVideo.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.20.100
Duration: 00:00:12.10, start: 0.000000, bitrate: 2770 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 720x1280, 2714 kb/s, 30 fps, 30 tbr, 90k tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 48 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
版本信息和编译配置详情
cmd
ffprobe version 7.1-essentials_build-www.gyan.dev Copyright (c) 2007-2024 the FFmpeg developers
built with gcc 14.2.0 (Rev1, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.100 / 61. 19.100
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100
1. FFprobe 版本信息
- 版本号 :
ffprobe version 7.1-essentials_build-www.gyan.dev
- 这是由第三方开发者 GyanD 编译的 FFmpeg 7.1 版本(非官方构建)。
essentials_build
表示这是一个精简版,可能只包含常用功能。
- 版权声明 :
Copyright (c) 2007-2024 the FFmpeg developers
FFmpeg 是一个开源项目,版权归开发者社区所有。
2. 编译环境
- 编译器 :
built with gcc 14.2.0
使用 GNU Compiler Collection (GCC) 14.2 编译,支持 C/C++。 - 构建系统 :
MSYS2 project
在 Windows 上通过 MSYS2 环境编译(兼容 Linux 工具的 Windows 开发环境)。
3. 编译配置(configuration:
)
这一长串 --enable-xxx
和 --disable-xxx
是 FFmpeg 编译时的选项,表示启用了哪些功能库。关键点:
通用功能
--enable-gpl
:启用 GPL 许可证(允许使用 GPL 授权的代码)。--enable-static
:生成静态链接库(所有功能集成到单个可执行文件)。
硬件加速支持
--enable-cuda-llvm
:NVIDIA CUDA 加速(通过 LLVM)。--enable-dxva2
/--enable-d3d11va
:Windows 硬件解码(DirectX)。--enable-nvenc
/--enable-nvdec
:NVIDIA 显卡的编码/解码。
编解码器支持
- 视频 :H.264 (
libx264
)、H.265 (libx265
)、VP9 (libvpx
)、AV1 (libaom
) 等。 - 音频 :AAC (
libfdk-aac
)、MP3 (libmp3lame
)、Opus (libopus
) 等。
其他库
--enable-libass
:字幕渲染支持。--enable-libfreetype
:字体渲染。--enable-libvmaf
:视频质量评估工具。
4. 库版本信息
FFmpeg 由多个子库组成,版本号如下:
库名称 | 版本号 | 说明 |
---|---|---|
libavutil |
59.39.100 | 工具库(数学、日志等基础功能) |
libavcodec |
61.19.100 | 编解码器核心库(H.264/AAC等) |
libavformat |
61.7.100 | 容器格式解析(MP4/MKV等) |
libavdevice |
61.3.100 | 设备输入/输出(摄像头、屏幕捕获) |
libavfilter |
10.4.100 | 音视频滤镜(裁剪、缩放等) |
libswscale |
8.3.100 | 图像缩放/色彩转换 |
libswresample |
5.3.100 | 音频重采样(采样率转换) |
libpostproc |
58.3.100 | 后处理(去块效应等) |
cmd
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\testVideo.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.20.100
Duration: 00:00:12.10, start: 0.000000, bitrate: 2770 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 720x1280, 2714 kb/s, 30 fps, 30 tbr, 90k tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 48 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
这是 ffprobe
对 testVideo.mp4 文件的解析结果,详细说明了视频的容器格式、元数据和基本参数。以下是逐项解析:
1. 容器格式
Input #0, mov,mp4,m4a,3gp,3g2,mj2
表示这是一个 MP4 容器 (兼容多种格式,如 QuickTime.mov
、3GP 等)。
2. 元数据(Metadata)
major_brand: isom
文件的主要品牌标识符,isom
表示标准 ISO 媒体格式(MP4 的基础)。minor_version: 512
次要版本号,用于兼容性标记。compatible_brands: isomiso2avc1mp41
兼容的品牌列表:isom
:ISO 基础格式。iso2
:ISO 扩展格式。avc1
:表示视频流是 H.264 编码。mp41
:MP4 版本 1。
encoder: Lavf58.20.100
文件由 FFmpeg 的libavformat
库(版本 58.20.100)生成。
3. 基础参数
Duration: 00:00:12.10
视频总时长:12 秒 100 毫秒。start: 0.000000
起始时间戳为 0(正常情况)。bitrate: 2770 kb/s
文件的总平均码率:2770 kbps(视频 + 音频)。
4. 流信息(Stream Information)
4.1. 视频流(Stream #0:0)
- 编码格式 :
h264 (High)
(H.264 High Profile),四字符码为avc1
。 - 像素格式 :
yuv420p
(标准 4:2:0 色彩采样)。- 色彩参数 :
tv, bt709
:使用 BT.709 色彩空间(高清视频标准)。
progressive
:逐行扫描(非交错)。
- 色彩参数 :
- 分辨率 :
720x1280
(竖屏视频)。 - 码率 :
2714 kb/s
(占整体码率的主要部分)。 - 帧率 :
30 fps
:帧率为 30 帧/秒。30 tbr
(理论帧率)、90k tbn
(时间基单位)。
- 元数据 :
handler_name: VideoHandler
(默认视频流标记)。
4.2. 音频流(Stream #0:1)
- 编码格式 :
aac (LC)
(AAC Low Complexity Profile),四字符码为mp4a
。 - 采样率 :
48000 Hz
(标准采样率)。 - 声道 :
mono
(单声道)。 - 码率 :
48 kb/s
(低码率,适合语音或背景音)。 - 元数据 :
handler_name: SoundHandler
(默认音频流标记)。