ffprobe
是 FFmpeg 工具集中的一個強大命令行工具,主要用于分析多媒體文件(如視頻、音頻等)的格式和內容信息。它可以提取文件的元數據、編解碼器信息、流詳情、幀信息等,而無需對文件進行轉碼或修改。
基本用法
ffprobe [選項] 輸入文件
常用功能及示例
1. 顯示文件基本信息
默認輸出文件的格式、流信息(視頻/音頻/字幕等):
ffprobe input.mp4
2. 以 JSON 格式輸出詳細信息
適合程序解析:
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
-v quiet
:隱藏日志信息。-print_format json
:輸出 JSON 格式。-show_format
:顯示文件格式信息(如時長、碼率等)。-show_streams
:顯示所有流(視頻、音頻等)的詳細信息。
3. 查看特定信息
-
查看視頻分辨率、幀率:
ffprobe -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 格式(無表頭)。
-
查看音頻采樣率和聲道數:
ffprobe -v error -select_streams a:0 -show_entries stream=sample_rate,channels -of csv=p=0 input.mp4
4. 查看幀信息(關鍵幀、PTS 等)
ffprobe -show_frames input.mp4
- 輸出每一幀的詳細信息(如幀類型、時間戳等)。
5. 檢查關鍵幀(I幀)位置
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. 查看文件時長
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
7. 查看編解碼器信息
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)。 |
代碼示例
PS C:\Users\Mayn\Desktop> ffprobe .\testVideo.mp4
ffprobe version 7.1-essentials_build-www.gyan.dev Copyright (c) 2007-2024 the FFmpeg developersbuilt 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-librubberbandlibavutil 59. 39.100 / 59. 39.100libavcodec 61. 19.100 / 61. 19.100libavformat 61. 7.100 / 61. 7.100libavdevice 61. 3.100 / 61. 3.100libavfilter 10. 4.100 / 10. 4.100libswscale 8. 3.100 / 8. 3.100libswresample 5. 3.100 / 5. 3.100libpostproc 58. 3.100 / 58. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\testVideo.mp4':Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41encoder : Lavf58.20.100Duration: 00:00:12.10, start: 0.000000, bitrate: 2770 kb/sStream #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 : VideoHandlervendor_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 : SoundHandlervendor_id : [0][0][0][0]
版本信息和編譯配置詳情
ffprobe version 7.1-essentials_build-www.gyan.dev Copyright (c) 2007-2024 the FFmpeg developersbuilt 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-librubberbandlibavutil 59. 39.100 / 59. 39.100libavcodec 61. 19.100 / 61. 19.100libavformat 61. 7.100 / 61. 7.100libavdevice 61. 3.100 / 61. 3.100libavfilter 10. 4.100 / 10. 4.100libswscale 8. 3.100 / 8. 3.100libswresample 5. 3.100 / 5. 3.100libpostproc 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 | 后處理(去塊效應等) |
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\testVideo.mp4':Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41encoder : Lavf58.20.100Duration: 00:00:12.10, start: 0.000000, bitrate: 2770 kb/sStream #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 : VideoHandlervendor_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 : SoundHandlervendor_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
(默認音頻流標記)。