// alternatives / ffprobe
ffprobe 替代方案
先说结论:很多搜「MP4 分析工具」的人其实要的就是 ffprobe,而且它是免费的、装得上、 一条命令就出结果。本工具不是它的替代品,而是在它停下的地方接着往下走。
一、ffprobe 是什么
ffprobe 是 FFmpeg 项目自带的码流探测工具,纯命令行。它不解码画面,只读元数据与包结构, 因此快、稳、几乎什么格式都能看。常用选项:
- -show_format——容器级信息(时长、总码率、格式名);
- -show_streams——每条流的信息(编码格式、profile、分辨率、帧率、像素格式);
- -show_frames——逐帧信息(帧类型、是否关键帧、包大小、PTS/DTS);
- -show_packets——逐包信息(时间戳、大小、位置);
- -select_streams v:0——只看第一条视频流;
- -of json / csv / xml——输出格式;
- -read_intervals——只读指定时间段,避免扫全片。
典型问法「这个文件是什么编码、码率多少、有多少帧、I/B/P 怎么分布」——ffprobe 一条命令就答完,不用开浏览器。
二、它比本工具强的地方
| 能力 | 说明 |
|---|---|
| 格式覆盖极广 | FFmpeg 支持的容器与编码它都能探;本工具只做 MP4 类容器里的 H.264 / H.265 |
| 可脚本化 | JSON / CSV 输出,直接进批处理、监控与 CI——本工具没有导出 |
| 精确时间戳 | PTS / DTS / 时长逐帧给出,本工具不提供逐帧时间戳导出 |
| 无需图形环境 | 服务器、容器里都能跑 |
| 零学习成本 | 几乎每台开发机上都已经装了 |
三、它停在哪,本工具从哪接着走
ffprobe 给出的最细粒度是「帧」:这一帧是 I 还是 P,多大,什么时候解码。 它不会告诉你这一帧里面哪一块被压得最狠。QP 与运动矢量是编码层级的数据, 而 ffprobe 在包层级就停住了。
- 块级 QP。本工具把每一块的 QP 按解码帧铺成热力图, 并给出该块相对本帧基准 QP 的偏差。
- 运动矢量。箭头直接叠在画面上,看得到这一块的运动往哪走、有多大。
- 容器结构与块数据同一屏。想看这个样本落在文件的哪个字节,点一下就跳到对应 Hex。
- 免安装。ffprobe 要装;本工具是一个网址,在拿不到命令行的机器上(锁死的办公本、平板)也能用。
两个工具都不是「更好」的关系:ffprobe 回答「这个文件是什么」,本工具回答「这一帧里哪里不对」。 而且本工具与 FFmpeg 有明确的上游依赖关系,归属与许可声明见 来源与许可。
四、对照表
| 能力 | ffprobe | MP4 Analyzer |
|---|---|---|
| 形态 | 命令行 | 网页,零安装 |
| 编码格式 / 码率 / 分辨率 | 有 | 有(文件信息视图) |
| 帧类型 I/P/B | 有(pict_type、key_frame) | 有(帧列表) |
| 逐帧时间戳 | 有(PTS / DTS) | 有(不导出) |
| 块级 QP | 无 | 有(热力图 + 点选读值) |
| 运动矢量 | 无 | 有 |
| MP4 Box 结构 + Hex | 部分(-show_format 等) | 有(交互树) |
| 脚本 / 导出 | 有(JSON / CSV / XML) | 无 |
| 格式覆盖 | FFmpeg 支持的绝大多数容器 | MP4 类容器,H.264 / H.265 |
| 价格 | 免费开源 | 免费,免注册 |
五、怎么选
| 你的问题 | 用 |
|---|---|
| 这是什么编码 / 码率多少 / 有多少帧 | ffprobe |
| I/B/P 帧怎么分布、每帧多大 | ffprobe |
| 要在脚本或 CI 里跑 | ffprobe |
| 非 MP4 容器(TS / MKV / WebM 等) | ffprobe |
| 这一帧里哪一块 QP 高 | 本工具 |
| 这一块的运动矢量往哪走 | 本工具 |
| 想看画面同时又想看 Box 结构 | 本工具 |
一句话:先跑 ffprobe;如果它给不出你要的那一层答案,再打开本工具。 更完整的横向对比见 同类工具对比。
// alternatives / ffprobe
ffprobe alternative
Up front: a lot of people searching for an "MP4 analysis tool" actually want ffprobe, and it is free, installable and answers in one command. This tool is not a replacement for it — it picks up where ffprobe stops.
1. What ffprobe is
ffprobe ships with the FFmpeg project and is command-line only. It does not decode pictures; it reads metadata and packet structure, which is why it is fast, dependable and works on almost anything. The options you end up using:
- -show_format — container-level facts (duration, overall bitrate, format name);
- -show_streams — per-stream facts (codec, profile, resolution, frame rate, pixel format);
- -show_frames — per-frame facts (frame type, keyframe flag, packet size, PTS/DTS);
- -show_packets — per-packet facts (timestamps, size, position);
- -select_streams v:0 — first video stream only;
- -of json / csv / xml — output format;
- -read_intervals — read only part of the file instead of scanning the whole thing.
The classic questions — what codec is this, what is the bitrate, how many frames, how are I/B/P distributed — ffprobe answers all of them in one command, without opening a browser.
2. Where it beats this tool
| Capability | Detail |
|---|---|
| Enormous format coverage | Anything FFmpeg supports; this tool handles H.264 / H.265 in MP4-family containers only |
| Scriptable | JSON / CSV output that slots into batch jobs, monitoring and CI — this tool exports nothing |
| Exact timestamps | Per-frame PTS / DTS and duration; this tool does not export per-frame timestamps |
| No graphical environment needed | Runs on servers and inside containers |
| Zero learning curve | Already installed on nearly every development machine |
3. Where it stops, and where this tool continues
The finest granularity ffprobe gives you is the frame: this one is I or P, this big, at this decoding time. It will not tell you which part of that frame was squeezed hardest. QP and motion vectors are coding-layer data, and ffprobe stops at the packet layer.
- Block-level QP. This tool lays each block's QP over the decoded frame as a heatmap, and reports the block's deviation from the frame's base QP.
- Motion vectors. Arrows drawn straight onto the picture, so you can see where a block's motion goes and how large it is.
- Container structure and block data together. Want to know which byte of the file a sample lives at? Click through to the matching hex.
- No install. ffprobe has to be installed; this tool is a URL, so it also works on the machines where you cannot get a shell — a locked-down laptop, a tablet.
Neither tool is "better": ffprobe answers "what is this file", this tool answers "what is wrong inside this frame". And this tool has an explicit upstream dependency on FFmpeg — see source & license for the attribution.
4. Side by side
| Capability | ffprobe | MP4 Analyzer |
|---|---|---|
| Form | Command line | Web page, zero install |
| Codec / bitrate / resolution | Yes | Yes (file info view) |
| Frame type I/P/B | Yes (pict_type, key_frame) | Yes (frame list) |
| Per-frame timestamps | Yes (PTS / DTS) | Yes (not exportable) |
| Block-level QP | No | Yes (heatmap plus click-to-read) |
| Motion vectors | No | Yes |
| MP4 box structure + hex | Partial (-show_format and friends) | Yes (interactive tree) |
| Scripting / export | Yes (JSON / CSV / XML) | No |
| Format coverage | Most containers FFmpeg supports | MP4-family containers, H.264 / H.265 |
| Price | Free, open source | Free, no account |
5. Which to pick
| Your question | Use |
|---|---|
| What codec is this, what bitrate, how many frames | ffprobe |
| How are I/B/P distributed, how big is each frame | ffprobe |
| Run it inside a script or CI job | ffprobe |
| Non-MP4 containers (TS / MKV / WebM and so on) | ffprobe |
| Which blocks in this frame have high QP | This tool |
| Where does this block's motion vector point | This tool |
| You want the picture and the box structure at once | This tool |
In one line: run ffprobe first; if it cannot give you the layer you need, open this tool. For the wider picture, see the full comparison.