用途:把一个视频文件量化成“剪辑 DNA”,用于两类场景——拆解参考/竞品爆款视频的节奏,或作为 conform 模式输入,把现有视频重剪为该语法。
主要能力:用 ffprobe 提取时长、分辨率、帧率、宽高比;用 ffmpeg 场景检测得到全部切点,并推导 cut_count、mean_shot_len、shortest_shot、longest_shot、每 10 秒切数 cuts_per_10s 以及 payoff_hold(最长镜头及其与均值的比值);判定音频模式(music-only / vo+music / speech-only);有声乐时尽力提取节拍网格与 bpm;按需输出词级转录 words.json;最后对 8 种创作者语法原型打分,选出最佳匹配并归一化为 0–1 置信度,记录次优原型。
使用方式:
python3 skills/atoms/planning/analyze-reference-grammar/scripts/analyze_grammar.py --source <video> --output-dir <dir> [--no-transcribe]
source 与 output_dir 必填;加 --no-transcribe 可跳过 Whisper 转录以提速。输出为 output_dir 下的 grammar-profile.json,以及可选的 words.json 和 manifest.json。
分类打分规则:音频模式精确匹配 40 分;cuts_per_10s 与原型目标越接近得分越高(最多 30 分);payoff_hold 要求匹配 20 分;宽高比匹配最多 10 分(9:16 为原生,16:9 或 1:1 略有扣分)。
限制与失败模式:源文件不存在时直接报错退出;ffmpeg / ffprobe 未安装需 brew install ffmpeg;无场景变化时 cut_count 为 0、cuts 为 [0.0];Whisper 未安装则静默跳过转录并退化为能量启发式判断,manifest 记警告;节拍提取失败则 bpm 为 null 并继续输出其余内容;视频无音轨时 audio_mode 默认 music-only,has_music 与 has_speech 均为 false,bpm 为 null;视频短于 2 秒时 cuts_per_10s 可能为空或仅一个元素,分类置信度可能低于 0.4。