{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "audio-sync-assembly",
  "built": "2026-10-26",
  "control_level": 4,
  "control_level_label": "L4 高权限",
  "capabilities": [
    "execute_command",
    "write_file"
  ],
  "required_controls": {
    "agent": [
      "sandbox_recommended",
      "graded_authorization"
    ],
    "admin": [
      "approval_process",
      "rollback_support",
      "full_audit"
    ]
  },
  "evidence": [
    {
      "file": "scripts/",
      "summary": "Execute local script or command: (Executed by host agent) ffmpeg commands: setpts / trim / tpad / atempo / apad / atrim / concat"
    },
    {
      "file": "本地工作目录",
      "summary": "File read/write & artifact export: Scenes and final MP4s in project renders/, assembly scripts or command plans in assembly/, subtitle files in captions/"
    }
  ],
  "verification": {
    "method": "第二遍换角度重做机械核对（不沿用第一遍结论）：① 全量文件清单——skills/audio-sync-assembly 下仅 2 个文件（SKILL.md、references/ffmpeg-retiming.md），无脚本/资产可执行；② 正则扫描本目录（https?:// / api / token / secret / cookie / .env / curl / wget / npx / pip install）仅命中说明性文本，零端点零凭证；③ 逐条回查 external_deps 的调用点是否真实出现在被引文件；④ 把文档声称的清单字段与 templates/timeline-manifest.example.json 的实际 JSON 结构逐字段比对；⑤ 检查 SKILL.md 点名的 references 是否存在、有无悬空引用。",
    "second_pass": [
      {
        "item": "「外部依赖只有本地 CLI」是否成立（决定蓝档还是黄/橙档）",
        "status": "ok",
        "detail": "本目录正则扫描无 http(s)://、无 fetch/requests、无 token/env/cookie；SKILL.md 只出现 ffprobe 与 this repo's media probe script，references 只出现 ffmpeg filter 片段。不存在素材外发或端点查询，故落蓝档。"
      },
      {
        "item": "ffmpeg 命令模板是否真能跑（不是示意伪代码）",
        "status": "ok",
        "detail": "references/ffmpeg-retiming.md 给的是标准 filtergraph 语法（setpts=factor*(PTS-STARTPTS)、tpad=stop_mode=clone:stop_duration、atempo、concat=n=...），可原样接进 -filter_complex；缩放/fps/format 同段给出，属可执行模板。"
      },
      {
        "item": "SKILL.md 的时间线清单字段与 templates/timeline-manifest.example.json 是否一一对应",
        "status": "discrepancy",
        "detail": "SKILL.md 列了扁平 11 项（Scene ID / Source render path / Source duration / Target duration / Audio path / Audio trim start-end / Inserted silence / Hold frames / Segment retime ratios / Global scene start / Proof timestamps），模板 JSON 却是嵌套结构：project{name,width,height,fps,output} + segments[{id,video,source_duration,target_duration,audio,strategy,maps}] + captions{} + music{} + proofs[]。差异在于「插入静音/保持帧/分段重定比」被折叠进 strategy+maps（maps 里用 hold_source_time 表达保持帧），「全局场景起点」由脚本按目标时长累加算出而非显式字段，「证明时间戳」在 proofs[] 而非 segment 内。按 SKILL.md 的字段名手写 JSON 不会与模板同构，照抄者需以模板为准。"
      },
      {
        "item": "「this repo's media probe script once available」是否说明探测脚本当前不存在",
        "status": "discrepancy",
        "detail": "措辞（once available）把探测脚本当成「将来可能有」，但 pin 内仓库根已存在 scripts/probe_media.py（ffprobe -print_format json 的封装，输出时长/体积/码率/视频编码与分辨率/帧率/像素格式/音频编码/采样率/声道），且 render-qa-and-surgical-changes 明确点名它。属文档措辞落后于仓库状态，不影响行为，但会让读者低估可用工具。"
      },
      {
        "item": "与 captions-and-music-bed 的职责是否重叠冲突",
        "status": "ok",
        "detail": "本 skill 只把「生成字幕/建音乐床」写进组装顺序的第 3-6 步（顺序约束），字幕规则与 ducking 判据全部留给 captions-and-music-bed，无重复定义。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "f6b043d9fd3b8a9820af143a47db8c74f1194fb4",
    "sha256": "099bc62047c52f2e5db3b5533fed1c43905457a675f9a0501c409678ccf9e556",
    "reviewed_by": null,
    "reviewed_at": null
  },
  "assessed_at": "2026-10-25",
  "method_version": "2.0",
  "mirror": {
    "archive": "https://skillpub.pages.dev/r2/v/2026-09-28/audio-sync-assembly.tar.gz",
    "sha256": "099bc62047c52f2e5db3b5533fed1c43905457a675f9a0501c409678ccf9e556",
    "commit": "f6b043d9fd3b8a9820af143a47db8c74f1194fb4"
  },
  "original": {
    "github": "https://github.com/saranambiar/hyperframes-video-agent-skills/tree/main/skills/audio-sync-assembly",
    "path": "skills/audio-sync-assembly",
    "commit": "f6b043d9fd3b8a9820af143a47db8c74f1194fb4"
  }
}