关于 video-analysis
使用 ffprobe 和 mp4dump 命令行工具检查视频文件,并输出可用 jq 筛选的 JSON。适用于提取格式、流、数据包、帧和 MP4 盒结构信息。
主要功能
- 01检查文件格式与媒体流
- 02读取数据包和帧元数据
- 03查询编解码器与尺寸
- 04检查 MP4 盒结构
- 05用 jq 筛选 JSON 输出
适用场景
- 01检查视频时长和编解码器
- 02统计帧数或关键帧
- 03查看音频采样率
- 04判断 MP4 是否为分片格式
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ editframe/ skills --skill video-analysis安装后在 Claude Code 中输入/video-analysis确认已加载。
详细介绍
视频分析
使用 CLI 工具分析 MP4/视频文件。所有命令均输出 JSON,便于使用 jq 进行筛选。
FFprobe 基础
格式 + 流(最常见)
ffprobe -v quiet -print_format json -show_format -show_streams FILE.mp4
关键字段:.format.duration、.streams[].codec_name、.streams[].codec_type
流选择
-select_streams v:0 # first video stream
-select_streams a:0 # first audio stream
-select_streams v # all video streams
数据包(采样级数据)
ffprobe -v quiet -print_format json -show_packets FILE.mp4
关键字段:.packets[].pts_time、.packets[].flags、.packets[].size
标志含义:K = 关键帧,D = 丢弃,_ = 无
仅关键帧数据包
ffprobe -v quiet -print_format json -show_packets -select_streams v:0 FILE.mp4 | \
jq '[.packets[] | select(.flags | test("K"))]'
统计关键帧数量
ffprobe -v quiet -print_format json -show_packets -select_streams v:0 FILE.mp4 | \
jq '[.packets[] | select(.flags | test("K"))] | length'
帧(解码后的帧信息)
ffprobe -v quiet -print_format json -show_frames FILE.mp4
关键字段:.frames[].pict_type(I/P/B)、.frames[].key_frame、.frames[].pts_time
限制帧数(更快)
ffprobe -v quiet -print_format json -show_frames -read_intervals "%+#100" FILE.mp4
仅读取前 100 帧。
常见查询
时长
ffprobe -v quiet -show_entries format=duration -of csv=p=0 FILE.mp4
帧数
ffprobe -v quiet -select_streams v:0 -show_entries stream=nb_frames -of csv=p=0 FILE.mp4
编解码器信息
ffprobe -v quiet -print_format json -show_streams FILE.mp4 | \
jq '.streams[] | {codec: .codec_name, type: .codec_type, profile: .profile}'
视频尺寸
ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height -of csv=p=0 FILE.mp4
采样率 / 声道数(音频)
ffprobe -v quiet -select_streams a:0 -show_entries stream=sample_rate,channels -of csv=p=0 FILE.mp4
MP4 Box 结构(mp4dump)
mp4dump --format json FILE.mp4
关键 Box
ftyp:文件类型/品牌moov:影片元数据(包含所有轨道信息)mvhd:影片头信息(时长、时间刻度)trak:轨道容器mdhd:媒体头信息(每轨道的时间刻度/时长)stbl:采样表(stts、stss、stsz、stco)stss:同步采样表(关键帧位置)moof:影片片段(分段式 MP4)mdat:媒体数据
查找特定 Box
mp4dump --format json FILE.mp4 | jq '.. | objects | select(.name == "mvhd")'
检查分段式 MP4
mp4dump --format json FILE.mp4 | jq '[.. | objects | select(.name == "moof")] | length'
非零表示分段式。
JQ 模式
按字段值筛选
jq '.streams[] | select(.codec_type == "video")'
提取特定字段
jq '.streams[] | {codec: .codec_name, duration: .duration}'
统计项目数量
jq '.packets | length'
前 N 个项目
jq '.packets[:10]'
求和
jq '[.packets[].size | tonumber] | add'
CSV 输出(用于脚本编写)
ffprobe -v quiet -select_streams v:0 -show_entries packet=pts_time,flags,size -of csv=p=0 FILE.mp4
输出:0.000000,1263,K__(每个数据包占一行)
测试资源
示例文件位于 elements/test-assets/:
10s-bars.mp4- 带音频的 10 秒彩条frame-count.mp4- 帧计数测试bars-n-tone.mp4- 多轨道测试
评论
支持 Markdown