mcpField
V
video-analysis

video-analysis

github.com/editframe创意与媒体1993 次安装2 周前更新
代码仓库

关于 video-analysis

使用 ffprobe 和 mp4dump 命令行工具检查视频文件,并输出可用 jq 筛选的 JSON。适用于提取格式、流、数据包、帧和 MP4 盒结构信息。

主要功能

  1. 01检查文件格式与媒体流
  2. 02读取数据包和帧元数据
  3. 03查询编解码器与尺寸
  4. 04检查 MP4 盒结构
  5. 05用 jq 筛选 JSON 输出

适用场景

  1. 01检查视频时长和编解码器
  2. 02统计帧数或关键帧
  3. 03查看音频采样率
  4. 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