ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Hyperframes 字幕轨(Rail Track)规范:面向 talking-head 视频的标准下三分之一字幕设计与实现

Hyperframes 字幕轨(Rail Track)规范:面向 talking-head 视频的标准下三分之一字幕设计与实现 Hyperframes 字幕轨Rail Track规范面向 talking-head 视频的标准下三分之一字幕设计与实现【免费下载链接】hyperframesWrite HTML. Render video. Built for agents.项目地址: https://gitcode.com/GitHub_Trending/hy/hyperframes导读本篇文章聚焦 hyperframes 开源仓库中embedded-captions技能的核心构件之一——字幕轨rail track即承载大部分对白文本的「标准下三分之一字幕」的完整技术规范其权威出处为 skills/embedded-captions/references/rail.md。这套规范定义了字幕轨在 talking-head / 解说 / 配音类视频中的定位、几何摆放、行数长度与时间同步纪律、克制的视觉样式、emphasis重点词高亮以及它与「嵌入轨embed track」的交接规则。读完本文你将掌握如何在 hyperframes 的 caption 流水线中设计、校验并渲染出一条「永远在前、永不遮挡、清晰可读」的基准字幕轨并理解与之配套的源码级校验门timing / occlusion / rail-climax 交接。一、什么是 rail track默认字幕轨的定位在 hyperframes 的embedded-captions技能中一句被说出的对白有且仅有三种渲染状态见 skills/embedded-captions/SKILL.md 的 Caption model状态含义如何呈现drop填充词——um/uh、口吃、自我修正不显示rail默认——普通口语内容逐字干净的下三分之一字幕在前层清晰可读重读词可加内联emphasis高亮但不脱离字幕轨embed被提升的高潮词——头条节拍一个大的词合成在主体背后遮罩遮挡设计化进出场rail 是默认轨也是主力轨。对于 talking-head / 解说 / 配音类视频典型输出是「整段转写文本都在 rail 上只有高潮climax被提升到 embed」。原文档特别强调Rail is not a fallback — its the baseline——字幕轨不是兜底方案而是基线。据此本技能的非协商规则Non-negotiables之一即是Rail-first for talking-head / explainer不要将整段转写全部嵌入画面大部分文本走 rail只提升峰值词「把所有词都 embed」是常见错误。1.1 实现层面的落地方式原文档的实现注记Implementation note给出了明确的工程方向专门的 rail 渲染器是下一步构建目标在此之前rail 是一个纯fg前景字幕轨可以直接映射到 hyperframes 原生 caption 流水线即media-use技能的 captions 能力优先复用而非手写在接线完成前用简单的data-caption-layerfg组合来渲染 rail——这些字幕不需要遮罩叠加matte overlay。这与 skills/embedded-captions/scripts/render-and-composite.sh 中 Standard 模式的合成逻辑完全一致rail.html单独渲染为透明 WebMrail.webm再通过 ffmpeg 的overlayalpha 合成在最上层因此永远不会被主体遮挡而index.htmlembed 高潮层先与主体遮罩叠加让主体遮挡高潮文字。两个独立 hyperframes 渲染通道并行执行_base_shadow与_rail_shadow节省近一半的 Chromium 渲染时间。字幕轨的「在前层」是通过合成顺序实现的bg_plus_caps.mp4视频 embed→ 叠加 matte主体盖住 embed→ 叠加 rail.webmrail 永远在顶部。代码位于 render-and-composite.sh。二、位置与安全区Position safe area原文档对 rail 的几何摆放给出了明确基准这些数字与media-use技能的字幕定位约定完全吻合见 skills/media-use/audio/references/captions/authoring.md 的 Positioning 一节下三分之一、水平居中。横屏16:9基线距底部边缘约80–120px竖屏9:16下部中间距底部600–700px避开平台 UI。标题安全区title-safe边距文本保持在大约90% 宽度以内并处于任何 letterbox/pillarbox 黑边之内参见 letterbox 探测永不贴帧边缘。同一时刻屏幕上只有一组字幕。不累积、不级联——那是 embed 轨的行为。字幕位于主体之上遮罩不会遮挡它rail 在前层。2.1 源码中的对应佐证media-use的定位规则横屏1920×1080底部 80–120px 居中、竖屏1080×1920下部中间距底部约 600–700px与 rail.md 逐项一致anchor主题quiet rail 默认中body.bottomPx: 96正是该区间的中间值见 skills/embedded-captions/themes/anchor.json安全区探测在决策门Decision gate中强制执行letterbox/pillarbox 探测用于计算安全内容矩形并约束字幕摆放见 SKILL.md 的 Pre-flight probes。三、行数、行长与时间纪律Lines, length, timing字幕轨的排印约束非常具体是「可读性」的第一道防线≤ 2 行。广电级目标约为每行32–42 字符在从句/短语边界换行绝不在单词中间断开绝不留下孤零零的单字行。词同步word-synced。每个字幕组的窗口必须完整包住它的词group.in ≤ 第一个词的 start、group.out ≥ 最后一个词的 end每组在屏时长 ≥0.5s组间保持约1.5s 最小间隔纪律避免闪烁strobe。词级时间与转写本的偏差控制在80ms 以内与全项目同一门槛。分组 短可读短语参见 caption-grouping.md——不采用 embed 轨的「短语 一个构图」规则在这里只是清晰的字幕分块。3.1 源码级验证check-timing.cjs这些纪律不是纸面规定而是由 skills/embedded-captions/scripts/check-timing.cjs 硬性校验的DRIFT_TOL 0.0880ms——plan.json 中每个词的start与 transcript.json 对应词的差超过 80ms 即报 issue窗口包络检查group.in晚于组内最早词的start会被标记「词被延迟」历史上曾因此出现过 800ms 延迟 buggroup.out早于最晚词的end会被标记「词被裁切」时间×空间重叠检测对无plane的组脚本会用 CSS 估算每组纵向 band基于font-size: calc(x * var(--h))、line-height、大小写字符宽 0.72/0.6若两组在时间上重叠0.05s且纵向 band 重叠超过 2%则报重叠——除非显式声明allow_overlap: true打包词packed words检测禁止把多个转写词塞进一个带单一时间戳的条目如FUTURE OF否则第二个词会继承第一个词的时间戳而提前触发——check-timing.cjs会要求拆成独立词条创意替换CREATIVE_SUBS当字幕文本 ≠ 转写文本时如15%替代fifteen percent必须在CREATIVE_SUBS中登记否则视为「不在转写中」。在渲染流水线中render-and-composite.sh会以--strict模式运行该检查失败即中止渲染ABORTED绝不带着 500ms 的错位交付。3.2 分组实操参考caption-grouping.md 给出了词级转写输入格式与分组规则输入为transcript.json的词数组{ text, start, end, type }丢弃type: spacing在以下任意一处切新组停顿 ≥ 500ms、句末标点、强逗号后随 ≥ 250ms 停顿、语篇重置词but/so/you know、或组达到 6 词 / 2.5s先到为准每组in w[0].start - 0.08提前 80ms 进入out min(下一组.in - 0.05, w[n-1].end 0.6)尾词后滞留约 0.6s允许编辑性裁剪删除填充词、压缩虚词但保留语义与时间真实性——「你在为讲话排印而不是做法庭记录」。四、外观刻意克制Look — restrained on purpose字幕轨的视觉设计原则是「读得清但不抢戏」字号约calc(0.045 * var(--h))1080 高度下约 48px1290 高度下约 58px——可读但不是主角。rail 是字幕刻意远小于 embed 的正文字体/高潮字体。必须以var(--h)比例表达绝不硬编码 px以便跨分辨率缩放。而 embed 高潮是按帧独立定尺的见 composition-craft 的 POP 一节——绝不把高潮字号设成 rail 的倍数。字体一个干净的 sansInter / Helvetica Now / Neue Haas字重500–600白色或近白色。不加画调grading的可读性方案只在字形局部施加轻量文字处理——柔和的深色投影或贴合文本框尺寸的圆角渐变 pill / 30–40% 的 scrim不是全画幅条也绝不是整帧调色。当背景亮度 180 时必须保留 scrim绝不允许裸白字。动效极简150–250ms 的淡入 / 淡出。无 glitch、无 scale-pop、无逐词编排——那些能量留给 embed。4.1 源码中的印证anchor主题anchor.json正是这条规范的工程化body.fontPx: 46≈ 0.045h 1080、layer: fg在前层、entrance/exit: fade纯淡入淡出、字重与色板低调近白#F2EFE9 米色强调。其voice字段写道「no spectacle: discipline IS the style」——克制本身就是风格这也是取代 Standard 模式的保守默认。亮度探针luminance probe在决策门中规定字幕区平均亮度 60直接白字60–180加字形 scrim180必须不透明文字 scrim裸浅色字永远不行。五、emphasis标志激活词高亮active-word highlight这是 rail 上唯一携带的「强度」当一个词被评定为emphasis短语中的 1–2 个重击词时在 rail 上给予内联提升强调色 和/或 加重字重可选卡拉 OK 式激活词弹跳≤1.1× 缩放在词被念出时出现。保持内联它不脱离 rail。任何想要脱离 rail 的词那是一个embed而不是 emphasis。这与 SKILL.md 的 Caption model 表完全对应emphasis的呈现状态是「rail emphasis 高亮内联——留在 rail 上」。六、rail 永不做什么What the rail never does原文档用一组否定句划定了 rail 的行为边界这正是它与 embed 轨的分工永不跑到主体后面那是 embed永不累积成多行诗那是 embed永不跨越人脸、不把遮挡当效果永不给底层视频调色或加纹理不为「减少块数」而丢内容——拆成更多组即可。唯一允许的删除是填充词um/uh、确切口吃、自我修正密集的口语连接胶you know、sort of可为了可读性修剪内容词与结构词必须保留。6.1 工程约束逐字与确定性全项目硬规则SKILL.md Non-negotiables确定性——无Math.random()、无Date.now()、无repeat:-1WCAG 对比度最终渲染会 lint人脸任何 0.3s 窗口内至少 30% 不被遮挡。「内容词与结构词保留」这一条与 embed 轨的「captions are always verbatim」遥相呼应见 composition-craft.md唯一可删的只有纯粹语音感叹词um/uh/er/ah、确切口吃the the the 保留一个、自我修正回退I think— I mean actually… 只保留 I mean actually。七、与 embed 的交接Hand-off to embedrail 与 embed 在同一个渲染中共存rail 贯穿整条片段一个嵌入的高潮在其出现的时刻覆盖在 rail 之上若二者会碰撞rail 可短暂清空或在 embed 下方变暗哪些短语应被提升由 SKILL.md 的 Caption model 中角色标注决定被提升的短语按照 composition-craft.md 创作。7.1 交接的代码级保证check-rail-climax.cjs「提升词不得在 rail 中重复出现」由专门的交接门 skills/embedded-captions/scripts/check-rail-climax.cjs 强制它在 headless Chromium 中同时加载index.htmlembed 高潮层与rail.html逐字 rail先以 0.1s 步长 seek 高潮层时间线收集.climax可见词及其屏幕窗口[winIn, winOut]再在同一窗口内检查 rail 是否也揭示了这些词——若确认重复注意它会计算「有效可见度」自身 opacity × 所有祖先的 opacity避免把容器淡出后仍 opacity:1 的词误判为可见则exit 2渲染中止该门保守设计只有确认的重复才失败任何无法判定的情况无 rail.html、无 puppeteer、时间线未注册、无高潮一律exit 0基础设施问题永不阻塞渲染。正确交接姿势来自该脚本的错误信息在提升词之前冻结 rail让高潮承载该词跨过 rail 的翻页保持高潮并在该思想单元结束时退出高潮——rail 永不再揭示提升词。7.2 渲染流水线中的完整门禁链render-and-composite.shStandard 模式在渲染前依次执行check-timing.cjs --strict——80ms 时间漂移硬失败check-occlusion.cjs --strict——主体遮挡 帧边缘溢出像素级基于 Chromium DOM rect × matte alpha有 watchdog 防 sharp 原生库挂死check-overflow.cjs rail.html——rail 层的帧溢出检查rail 没有其他自动化覆盖check-rail-climax.cjs——上述交接门。所有门禁结果写入_gates.txt并在完成时汇总。可分别用OCCLUSION_SKIP1与RAIL_CLIMAX_SKIP1有意识地覆盖不建议在交付时使用。八、在流水线中落地从素材到 final.mp4结合 SKILL.md 的五步流水线rail 轨的完整生产路径如下主题模式下由render-theme.sh封装# 1. 初始化项目技能会自动检查/更新全局技能集 hyperframes init project --non-interactive --video video.mp4 --skillembedded-captions # 2. 并行预处理主体抠像 ∥ 转写 → 安全区 bash scripts/prepare.sh project # → frames_fg/ transcript.json safe-zones.json # 3. 唯一创意步骤按身份identity编写创作 JSON # Cinematic: cinematic.json → make-cinematic.cjs → plan.json → index.html # Theme: theme.json → render-theme.sh # 4. 渲染前视觉 QA约 2s/帧不渲染 node scripts/preview-frames.cjs project # 5. 门禁 → 合成 → final.mp4Standard 模式含 rail embed 双通道 bash scripts/render-and-composite.sh project对 rail 轨最有意义的细节prepare.sh并行运行matte.cjs主体抠像与transcribe.cjsWhisperX 词级转写——rail 的字幕窗口依赖词级时间戳若音频接近静音transcribe.cjs会警告Whisper 会在静音上幻觉出 Thank you. 之类的词必须听从警告并拒绝而不是给编造的词配字幕转写模型选择默认small.en会静默把非英语音频翻译成英语见 skills/media-use/audio/references/transcribe.md 的 Language Rule——已知英语用small.en已知非英语用--model small --language iso未知语言用--model small自动检测字幕轨的合成顺序index.htmlembed渲染后先叠主体遮罩主体盖住高潮rail.html渲染为透明 WebM 后在最上层 alpha 合成——这就是「rail 永远在前」的工程实现时长钳制输出会被钳到 matte/source 的实际时长防止 Whisper 时间戳超出素材导致「主体漂浮在黑底上」的尾部残影。九、何时用 rail、何时选别的表面原文档与技能目录CATALOG明确rail 表面类身份正是用来构建「rail.html index.html 高潮」这种结构的而列流column-flow类身份放弃 rail、全部做成 embed 风格——只推荐用于「情绪重于逐字」的诉求绝不用于必须逐字可读的解说/配音。一句话决策来自 SKILL.md解说/访谈/必须逐字可读 → rail/panel 表面身份诗意/社交/cinematic → 按语域选列流身份炸/特效/VFX → 主题身份不确定时选anchor词可读、场景安全但先给短名单让用户选择。结语字幕轨rail是 hyperframesembedded-captions技能中最低调、却最常被调用的轨它承载大多数对白、永远在前、永不遮挡用克制的排印与严格的时间纪律保证逐字可读。理解它的位置与安全区、行数与时间规则、克制的视觉系统、emphasis内联高亮以及「绝不做什么」的边界是正确使用它的前提而check-timing.cjs、check-rail-climax.cjs与render-and-composite.sh则从源码层面把每一条纪律变成可执行的门禁。当你在设计下一条 talking-head 视频的字幕时请记住rail 不是兜底它是基线embed 是稀缺的、应得的峰值。【免费下载链接】hyperframesWrite HTML. Render video. Built for agents.项目地址: https://gitcode.com/GitHub_Trending/hy/hyperframes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表