1154 字
约 3 分钟
0
ffprobe 技术入门(中文)

ffprobe 技术入门(中文)

ffprobe 是 ffmpeg 家族里"只看不改"的只读工具箱。它读取媒体文件的头信息,告诉你文件是什么格式、每个流(视频/音频/字幕)用什么编码、分辨率、码率、时长、元数据等——不做任何转换,不产生新文件

与 ffmpeg 成对:ffprobe 负责"看",ffmpeg 负责"改"


一、它是什么 / 一句话

ffprobe = 音视频文件的"体检/查看窗口"。输入一个文件路径,输出它的容器格式、流列表、各流编码参数、时长、元数据等结构化信息。零破坏,纯只读。

二、什么时候用它(判断场景)

场景 用 ffprobe? 为什么
想知道某个视频"是不是 .mp4 / 几秒 / 多少分辨率 / 什么编码" 快速看头信息
想确认某文件有没有声音轨、音轨是什么格式 列出流
转码/合并前先确认源文件参数 避免 ffmpeg 转错或失败
脚本里要"读取文件的时长/宽度/高度"做判断 输出 JSON/可编程
想把文件转码、改格式、合并且产生新文件 ❌ 用 ffmpeg ffprobe 不改文件
只想确认装没装 ffprobe -version 见安装

[!tip] 判断口诀:要不要产出新文件?要 → ffmpeg;只要读信息 → ffprobe。

三、核心概念

  • 容器 Container:外层壳(.mp4.mkv.ts.webm),决定文件扩展名与装箱方式。
  • 流 Stream:里面的各轨道——video(视频)、audio(音频)、subtitle(字幕)、data(数据/章节点)。
  • 编码 Codec:每个流怎么压缩,如 h264h265/hevcvp9aacopusmp3
  • 一个文件可以有多个流(多个音轨/字幕轨),ffprobe 会把每一个都列出来。

四、常用命令模板(可直接抄)

# 0) 版本检查
ffprobe -version

# 1) 只读最基础信息:容器格式 + 时长 + 音频/视频流概要 ★最常用
ffprobe input.mp4
#    输出示例包含:Input #0, mov,mp4, Duration: 00:01:23.45, Video: h264 1280x720, Audio: aac

# 2) 只输出视频流(不打印音频/章节等)
ffprobe -v error -select_streams v -show_streams input.mp4

# 3) 只问"文件总时长(秒)"
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1 input.mp4

# 4) 只问"宽度 x 高度"
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 input.mp4

# 5) 输出成 JSON(脚本友好,自动化必用)
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

# 6) 只列出有哪些流 + 编码(概览)
ffprobe -show_streams -of compact=p=0 input.mp4 | grep -E 'codec_name|codec_type'

[!tip] 常用参数组合 -v error:只显示错误,不显示重复的格式头信息,配合 -of/-show_entries 得到干净的单行结果,便于脚本解析。

五、输出格式 -of / -print_format 选择

格式 适合 示例
default 人看 段落式
json 脚本 { "format": {...}, "streams": [...] }
csv / flat / compact 简单取值 一行一个值
# 例:把时长取成纯数字
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4

# 例:JSON 里取第 0 个视频流的 codec_name
ffprobe -v quiet -print_format json -show_streams input.mp4 | python3 -c "import json,sys;d=json.load(sys.stdin);print([s['codec_name'] for s in d['streams'] if s['codec_type']=='video'])"

六、最常用参数速查

参数 含义
-v error / -v quiet 只输出错误/几乎不出杂讯
-select_streams 只分析某个流(v:0=第一个视频轨,a=所有音频)
-show_format 显示容器层信息(时长、大小、标签)
-show_streams 显示每个流的信息(编码、分辨率、码率…)
-show_entries 只挑需要的字段,减少输出
-of / -print_format 输出格式(default/json/csv/flat/compact
-count_frames 顺便统计实际帧数(慢,默认不数)

七、安装方法(和 ffmpeg 一起装)

ffprobe 随 ffmpeg 一起发布,装了 ffmpeg 就有 ffprobe

# macOS: brew install ffmpeg
# Linux: sudo apt install ffmpeg
# Windows: 用 ffmpeg 完整包(gyan.dev build / winget / choco),其 /bin 内含 ffprobe.exe

装完验证:ffprobe -version

八、和 yt-dlp 的关系

  • yt-dlp 的 FFmpegPostProcessor 常先 ffprobe 确认已下载文件的关键参数,再决定 ffmpeg 该怎么做(如封面尺寸、是否需转码)。
  • --ffmpeg-location <路径> 可同时指定 ffmpeg 与 ffprobe 所在目录。
  • 相关代码:yt_dlp/postprocessor/ffmpeg.py

[!tip] 成对记忆:ffprobe "看",ffmpeg "改"。先看([[ffprobe 技术入门]])再改([[ffmpeg 技术入门]]),是处理音视频的标准流程。

ffprobe 技术入门(中文)
http://www.clxhxhhr.top/posts/466/
作者
clxstart
发布于
2026-09-07
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。