1实现原理 · 为什么它能做到
时序真源被钉死为「最新批准的旁白音频 + 场景渲染」,并显式禁止从旧成片反推时序——这是全流程所有重定时、字幕、音乐决策的共同基准。
skills/audio-sync-assembly/SKILL.md
- Use the latest approved narration audio as timing source.
注:这里在做什么:把「以谁为准」写成第一条 Source Of Truth。族内失败模式清单里有对应的一条 "Do not infer timings from old final MP4s if source renders and audio clips exist.",防止每改一版就从上一版成片继续推导而使误差累积。
强调「干预最小化」:按场景形态分档给策略(整段 setpts / 分段重定时 / 插静音加保持帧 / 小幅度 atempo / 只重定时产品时刻之前那段),而不是默认全局变速。
skills/audio-sync-assembly/SKILL.md
Choose the smallest timing intervention:
注:这里在做什么:这是本 skill 最核心的生产判据——先问「最小的时间干预是什么」,并把「整条视频重定时」列为最常见的错误(见 Common Mistakes 首条)。
任何决策之前先探测:每个片段都要量时长、帧率、分辨率、是否含音轨、采样率与声道,命令走 ffprobe 或仓库自带探测脚本。
skills/audio-sync-assembly/SKILL.md
- Duration. - Frame rate. - Resolution. - Audio stream presence.
注:这里在做什么:把「先量再算」固化成流程第一步,避免靠估计做 setpts 比例;同段给出 ffprobe 与「this repo's media probe script」两条路径。
组装顺序把字幕钉在「无音乐旁白母版」上:先拼出 narration-only master,再从它生成字幕、压字幕、建音乐床、混音,最后出成片与预览片。
skills/audio-sync-assembly/SKILL.md
3. Generate captions from narration-only master.
注:这里在做什么:用顺序消掉「字幕对着带音乐的成片做」这一整类时序漂移,也是与 captions-and-music-bed 的分工线(后者第一行即以「旁白时间线稳定」为前提)。
分段切点按语义事件切,明确禁止等分切:场景转场、产品时刻、问题揭示、图表节点、标题揭示、结尾保持、旁白停顿。
skills/audio-sync-assembly/SKILL.md
Avoid splitting on arbitrary equal chunks.
注:这里在做什么:把「按秒数均分」这种看似公平、实则必然错位的做法列为反例——切点必须绑定叙事事件。
预览片不是全片重渲:只对本次改动的敏感处出片段(更新旁白处、产品演示转场、问题时序、字幕样式段、最后 10 秒、任何被改动的场景边界)。
skills/audio-sync-assembly/SKILL.md
Generate preview clips for:
注:这里在做什么:把验证成本压到与改动规模相称,与仓库 AGENTS.md 的「只在受影响处出证明」一致。
2核心能力
01整段/分段重定时、保持帧停顿、音频 tempo 微调与显式拼装的 FFmpeg 命令模板
02音频替换决策规则:探旧新时长 → 保下游同步则小幅 tempo → 措辞时序实质变化则重建分段图并重生成字幕
03短语级视觉对齐:把台词起音映射到全局时间戳(问题卡、产品状态、图表点、场景标题揭示、CTA/logo 到达)
04时间线清单字段规范:场景 ID、源渲染路径与时长、目标时长、音频路径与裁剪起止、插入静音、保持帧、分段重定比、全局场景起点、证明时间戳
05停顿处理判据:插静音 + 保持或轻微动效、不擅自抬高音乐、把停顿时长计入下游场景起点
06回归防护清单:只改一场却重定时全片、替换音频顶掉下游、忘更字幕时序、非关键帧起点的流拷贝、音乐早于片子结束
3外部依赖
| 类型 | 依赖 |
|---|---|
| cli | ffmpeg(setpts / trim / tpad / atempo / apad / atrim / concat / fps / scale / setsar),走 filter_complex 显式拼装 |
| cli | ffprobe(探测时长/帧率/分辨率/音轨/采样率与声道) |
| package | 仓库根确定性脚本 scripts/probe_media.py 与 scripts/timeline_manifest_to_ffmpeg.py(本 skill 以「this repo's media probe script」泛指,非自身目录自带) |
| package | 模板 templates/timeline-manifest.example.json(记录目标时序的 JSON 结构) |
| package | 输入素材:最新批准的旁白音频与场景渲染(用户/项目本地提供,非外部服务) |
4风险提醒 风险提醒:蓝色 · 知晓即可
风险提醒:蓝色 · 知晓即可
- 时间线清单的字段规范与仓库模板不同构 — SKILL.md 的扁平 11 项字段 vs templates/timeline-manifest.example.json 的嵌套结构(strategy/maps/proofs)。若严格按 SKILL.md 字段名手写清单,scripts/timeline_manifest_to_ffmpeg.py 读不到 maps/hold_source_time,重定时与保持帧会退化成默认整段 setpts。使用时应以模板结构为准。
- 非关键帧起点的流拷贝风险已被点名,但无自动检测 — Common Mistakes 写了 Copying stream segments with non-keyframe starts and causing preview oddities.,但 skill 目录内没有可执行检查,实际仍需人工看 preview。
- atempo 是「同步优先」的折中,用户未必接受 — 规则是 use small audio-only `atempo` only if preserving downstream sync matters more than raw duration——判据依赖「用户更在意下游同步」这一假设,skill 未定义何时必须先问用户。
- FFmpeg 版本/滤镜可用性未声明前提 — 模板使用 setpts/trim/tpad/atempo/concat/apad/atrim;主流发行版 ffmpeg 均支持,但文档未写最低版本或平台前提(仓库 README 示例却是 PowerShell 风格),跨平台用户需自行试跑。
- 替换音频后的字幕重生成是「应当」而非强制门禁 — Regenerate captions from the new narration master. 写在规则段而非 QA 门禁段;若跳过,成片仍会通过 probe 检查(时长/音轨正常),字幕错位不会被脚本发现。
风险提醒:蓝色,知晓即可。本 skill 目录只有 SKILL.md 与一份 references/ffmpeg-retiming.md(纯指令,无可执行文件);实际接触面是本地 CLI(ffmpeg/ffprobe)与本地文件读写(渲染、清单、字幕、预览片段、证明帧),符合范式蓝档「仅调用本地工具/CLI,或仅本地读写」。**没有把素材送外部服务**:全量扫描本 skill 目录内无 http(s):// 端点、无 fetch/requests、无 token/env 读取、无上传或生成服务调用;音频与画面全部在本地 ffmpeg 管线内处理。仓库根 scripts/ 的 Python 脚本也只做本地 ffprobe/ffmpeg 调用与文件读写(见 second_pass 回查)。九件同族 skill 判级口径一致:目录内只有 SKILL.md(+ 可选 references/*.md),行为面是本地读写与本地 CLI,无端点、无凭证、无素材外发。
5第二遍独立确认
- [ok] 「外部依赖只有本地 CLI」是否成立(决定蓝档还是黄/橙档) — 本目录正则扫描无 http(s)://、无 fetch/requests、无 token/env/cookie;SKILL.md 只出现 ffprobe 与 this repo's media probe script,references 只出现 ffmpeg filter 片段。不存在素材外发或端点查询,故落蓝档。
- [ok] ffmpeg 命令模板是否真能跑(不是示意伪代码) — references/ffmpeg-retiming.md 给的是标准 filtergraph 语法(setpts=factor*(PTS-STARTPTS)、tpad=stop_mode=clone:stop_duration、atempo、concat=n=...),可原样接进 -filter_complex;缩放/fps/format 同段给出,属可执行模板。
- [discrepancy] SKILL.md 的时间线清单字段与 templates/timeline-manifest.example.json 是否一一对应 — 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 不会与模板同构,照抄者需以模板为准。
- [discrepancy] 「this repo's media probe script once available」是否说明探测脚本当前不存在 — 措辞(once available)把探测脚本当成「将来可能有」,但 pin 内仓库根已存在 scripts/probe_media.py(ffprobe -print_format json 的封装,输出时长/体积/码率/视频编码与分辨率/帧率/像素格式/音频编码/采样率/声道),且 render-qa-and-surgical-changes 明确点名它。属文档措辞落后于仓库状态,不影响行为,但会让读者低估可用工具。
- [ok] 与 captions-and-music-bed 的职责是否重叠冲突 — 本 skill 只把「生成字幕/建音乐床」写进组装顺序的第 3-6 步(顺序约束),字幕规则与 ducking 判据全部留给 captions-and-music-bed,无重复定义。
6结论
适合:适合:已有一段或多段渲染好的场景 + 一条(或多条)批准过的旁白,需要拼成一条时序精确的成片;旁白长度与画面节奏不一致、需要插停顿或保持帧、需要把视觉节拍对齐到具体台词、或旁白被替换后要重排下游时序的场合。也适合作为装配层被 end-to-end-video-playbook 在 build-in-layers 的第 3-6 步调用。
不适合:不适合:① 需要设计或生成场景画面(走 hyperframes-scene-builder / motion-design-systems);② 字幕措辞与样式、音乐选曲与 ducking 判据(走 captions-and-music-bed);③ 已批准成片的极小改动验收(走 render-qa-and-surgical-changes,避免用装配脚本重排全片);④ 环境无 ffmpeg/ffprobe 时——本 skill 的全部判据都建立在本地 ffmpeg 管线之上,无纯代码替代路径。
安装 agent 直装可复制
① 本站镜像 更新 2026-09-28
方式 A · 人下载镜像包下载 audio-sync-assembly.tar.gz
sha256:
方式 B · JSON 格式安装指南,复制给 agent099bc62047c52f2e…agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
② 上游 GitHub · 原始来源
来源信息 GitHub 原始
作者 / 仓库saranambiar / saranambiar/hyperframes-video-agent-skills
Stars48
最近推送2026-06-14
本 skill commit
f6b043d9fd许可Apache-2.0(仓库根 LICENSE 为 Apache License Version 2.0;GitHub API license.spdx_id = Apache-2.0)
本站信息
收录日期2026-09-06
分类内容创作
侦查报告AI 侦查 · 2 遍 · 2026-09-06
本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。