video-analysis
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseVideo Analysis
视频分析
Analyze MP4/video files using CLI tools. All commands output JSON for jq filtering.
使用CLI工具分析MP4/视频文件。所有命令均输出JSON格式,以便用jq进行过滤。
FFprobe Basics
FFprobe基础
Format + Streams (most common)
格式 + 流(最常用)
bash
ffprobe -v quiet -print_format json -show_format -show_streams FILE.mp4Key fields: , ,
.format.duration.streams[].codec_name.streams[].codec_typebash
ffprobe -v quiet -print_format json -show_format -show_streams FILE.mp4关键字段:、、
.format.duration.streams[].codec_name.streams[].codec_typeStream selection
流选择
bash
-select_streams v:0 # first video stream
-select_streams a:0 # first audio stream
-select_streams v # all video streamsbash
-select_streams v:0 # 第一个视频流
-select_streams a:0 # 第一个音频流
-select_streams v # 所有视频流Packets (sample-level data)
数据包(样本级数据)
bash
ffprobe -v quiet -print_format json -show_packets FILE.mp4Key fields: , ,
.packets[].pts_time.packets[].flags.packets[].sizeFlag meanings: = keyframe, = discard, = none
KD_bash
ffprobe -v quiet -print_format json -show_packets FILE.mp4关键字段:、、
.packets[].pts_time.packets[].flags.packets[].size标志含义: = 关键帧, = 丢弃, = 无
KD_Keyframe packets only
仅查看关键帧数据包
bash
ffprobe -v quiet -print_format json -show_packets -select_streams v:0 FILE.mp4 | \
jq '[.packets[] | select(.flags | test("K"))]'bash
ffprobe -v quiet -print_format json -show_packets -select_streams v:0 FILE.mp4 | \
jq '[.packets[] | select(.flags | test("K"))]'Count keyframes
统计关键帧数量
bash
ffprobe -v quiet -print_format json -show_packets -select_streams v:0 FILE.mp4 | \
jq '[.packets[] | select(.flags | test("K"))] | length'bash
ffprobe -v quiet -print_format json -show_packets -select_streams v:0 FILE.mp4 | \
jq '[.packets[] | select(.flags | test("K"))] | length'Frames (decoded frame info)
帧(解码后帧信息)
bash
ffprobe -v quiet -print_format json -show_frames FILE.mp4Key fields: (I/P/B), ,
.frames[].pict_type.frames[].key_frame.frames[].pts_timebash
ffprobe -v quiet -print_format json -show_frames FILE.mp4关键字段:(I/P/B帧)、、
.frames[].pict_type.frames[].key_frame.frames[].pts_timeLimit frame count (faster)
限制帧数量(更快)
bash
ffprobe -v quiet -print_format json -show_frames -read_intervals "%+#100" FILE.mp4Reads first 100 frames only.
bash
ffprobe -v quiet -print_format json -show_frames -read_intervals "%+#100" FILE.mp4仅读取前100帧。
Common Queries
常见查询
Duration
时长
bash
ffprobe -v quiet -show_entries format=duration -of csv=p=0 FILE.mp4bash
ffprobe -v quiet -show_entries format=duration -of csv=p=0 FILE.mp4Frame count
帧数量
bash
ffprobe -v quiet -select_streams v:0 -show_entries stream=nb_frames -of csv=p=0 FILE.mp4bash
ffprobe -v quiet -select_streams v:0 -show_entries stream=nb_frames -of csv=p=0 FILE.mp4Codec info
编解码器信息
bash
ffprobe -v quiet -print_format json -show_streams FILE.mp4 | \
jq '.streams[] | {codec: .codec_name, type: .codec_type, profile: .profile}'bash
ffprobe -v quiet -print_format json -show_streams FILE.mp4 | \
jq '.streams[] | {codec: .codec_name, type: .codec_type, profile: .profile}'Video dimensions
视频尺寸
bash
ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height -of csv=p=0 FILE.mp4bash
ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height -of csv=p=0 FILE.mp4Sample rate / channels (audio)
采样率/声道数(音频)
bash
ffprobe -v quiet -select_streams a:0 -show_entries stream=sample_rate,channels -of csv=p=0 FILE.mp4bash
ffprobe -v quiet -select_streams a:0 -show_entries stream=sample_rate,channels -of csv=p=0 FILE.mp4MP4 Box Structure (mp4dump)
MP4盒子结构(mp4dump)
bash
mp4dump --format json FILE.mp4bash
mp4dump --format json FILE.mp4Key boxes
关键盒子
- : file type/brand
ftyp - : movie metadata (contains all track info)
moov - : movie header (duration, timescale)
mvhd - : track container
trak - : media header (per-track timescale/duration)
mdhd - : sample table (stts, stss, stsz, stco)
stbl - : sync sample table (keyframe positions)
stss - : movie fragment (fragmented MP4)
moof - : media data
mdat
- : 文件类型/标识
ftyp - : 影片元数据(包含所有轨道信息)
moov - : 影片头(时长、时间刻度)
mvhd - : 轨道容器
trak - : 媒体头(每个轨道的时间刻度/时长)
mdhd - : 样本表(stts、stss、stsz、stco)
stbl - : 同步样本表(关键帧位置)
stss - : 影片片段(碎片化MP4)
moof - : 媒体数据
mdat
Find specific box
查找特定盒子
bash
mp4dump --format json FILE.mp4 | jq '.. | objects | select(.name == "mvhd")'bash
mp4dump --format json FILE.mp4 | jq '.. | objects | select(.name == "mvhd")'Fragmented MP4 check
碎片化MP4检查
bash
mp4dump --format json FILE.mp4 | jq '[.. | objects | select(.name == "moof")] | length'Non-zero = fragmented.
bash
mp4dump --format json FILE.mp4 | jq '[.. | objects | select(.name == "moof")] | length'结果非零即为碎片化MP4。
JQ Patterns
JQ模式
Filter by field value
按字段值过滤
bash
jq '.streams[] | select(.codec_type == "video")'bash
jq '.streams[] | select(.codec_type == "video")'Extract specific fields
提取特定字段
bash
jq '.streams[] | {codec: .codec_name, duration: .duration}'bash
jq '.streams[] | {codec: .codec_name, duration: .duration}'Count items
统计条目数量
bash
jq '.packets | length'bash
jq '.packets | length'First N items
获取前N个条目
bash
jq '.packets[:10]'bash
jq '.packets[:10]'Sum values
求和
bash
jq '[.packets[].size | tonumber] | add'bash
jq '[.packets[].size | tonumber] | add'CSV Output (for scripting)
CSV输出(用于脚本)
bash
ffprobe -v quiet -select_streams v:0 -show_entries packet=pts_time,flags,size -of csv=p=0 FILE.mp4Output: (one line per packet)
0.000000,1263,K__bash
ffprobe -v quiet -select_streams v:0 -show_entries packet=pts_time,flags,size -of csv=p=0 FILE.mp4输出示例:(每个数据包一行)
0.000000,1263,K__Test Assets
测试资源
Sample files in :
elements/test-assets/- - 10s color bars with audio
10s-bars.mp4 - - frame counting test
frame-count.mp4 - - multi-track test
bars-n-tone.mp4
测试文件位于目录下:
elements/test-assets/- - 带音频的10秒彩条视频
10s-bars.mp4 - - 帧计数测试视频
frame-count.mp4 - - 多轨道测试视频
bars-n-tone.mp4