--- name: one-prompt-video description: 一句话生成一条完整的口播视频:写稿 → 生成口播数字人(即梦 CLI / Seedance 2.5,本人照片 + 本人声音)→ 做 B-roll(截图、本人素材、代码动画)→ HyperFrames 合成 → 分段渲染 → 抽帧检查 → 按平台出版本。用户说“帮我做一条口播视频”“一句话出片”“按我的风格做期教程视频”“把这期做成成片”时使用。 --- # 一句话成片 把一条 1–3 分钟的口播教程视频从零做到可发布。人只需要给主题和素材、确认花钱的步骤、最后审片。 ## 〇、开工前要拿到的东西 | 东西 | 用途 | 没有时 | |---|---|---| | 主题 + 目标观众 + 必须出现的事实 | 写稿 | 问一次 | | 往期视频的标题 / 文案 / 链接 | 学他的写稿风格 | 用写稿 skill 里已有的风格 | | 一张本人正脸照 | 口播数字人的参考图 | **最好从他真实视频里截一帧**,不要用 AI 生成的人像 | | 一段 8 秒左右干净的本人声音 | 口播数字人的参考音频 | 从往期视频里切一段没有配乐的 | | 要发哪些平台 | 决定出几个版本 | 默认只出一个 | **花钱的步骤一律先问**:每次提交生成前,列出模型、时长、预计积分,等对方明确说“提交”再提交;提交后报 submit_id 和余额。重跑也要问。 ## 一、写稿 1. 用写稿 skill(没有就先根据他往期视频总结一个)写三列分镜表:阶段|口播|画面。 2. 每段口播 ≤ 15 秒;画面列标清【A】口播 /【B】B-roll /【B+A小窗】,B-roll 写明是截图、本人素材还是说明动画。 3. 不编造数字;画面里不出现平台 logo、水印、网址。 4. 分镜表给对方确认后再往下做。 ## 二、口播画面(A-roll) 1. 即梦 CLI 全能参考(multimodal2video),Seedance 2.5,16:9,参考图 + 参考音频,按分镜段落逐段生成。提示词见 `references/prompts.md`。 2. 生成后逐段转文字(whisper),和台词逐字比对;念错的段落只重跑那一段(先报价再提交)。念错的词如果在全屏 B-roll 下面,可以直接换用别的 take 里那一句的声音,不必重跑。 3. 下载原片保存,**不要转码压缩后再用**。 ## 三、B-roll - **截图 / 录屏**:真实页面、终端、文件夹。平台标识、账号、隐私打码。 - **本人素材**:往期视频片段、封面、照片,按原比例用,不裁切人脸。 - **说明动画**:用代码动画 skill;每个动画先定好落在哪句台词上(用字级时间轴的 cue),再逐帧画。一个画面只讲一件事。 ## 四、口播粗剪(最容易出问题的一步) 用 ffmpeg 一次滤镜图完成(每段 trim → setpts → scale → fps=30,再 concat),规则: 1. **只在停顿里下刀**:剪点吸附到 ±0.25 秒内最安静的 20ms;停顿段必须在下一个字开口前 0.05 秒收住,否则会带进半个字。 2. **倍速按帧率选**:25 帧素材 1.2×、24 帧(Seedance)1.25×,正好映射到 30 帧,一帧不重复。1.1× 之类会周期性重复帧(跳帧)。 3. **气口**:每句话讲完留 0.5–1 秒;关键句(包袱、情绪句)后约 1 秒;笑声按原速放完再切。 4. **气口不够长**时慢放静默段,用 `minterpolate` 补帧;补帧会吃掉末尾几帧 → **多喂 0.25 秒原素材,再按精确帧数截断**(`tpad=stop_mode=clone,trim=end_frame=N`,音频同样 apad + atrim 到对应采样数)。素材到头没法多喂时,别慢放,改用下一条素材开口前的静默当气口。 5. **口播画面不做任何处理**:不缩放(不做 100%/120% 跳切)、不推拉、不调色、不叠颗粒。720p 放大会发虚;两条不同 take 硬接的地方,用 B-roll 转场或小窗放大盖住。 6. 缩放用 lanczos,中间文件 CRF ≤ 12,每秒一个关键帧(`-g 30`)。 7. 粗剪后跑 `scripts/check_frames.py`:总帧数 = 时长 × 30;步骤段不允许出现 ≥2 帧的定格(章节卡除外)。 ## 五、时间轴 - whisper 字级对齐到成片口播,得到每句 s / e 和每个字的时间 ct;B-roll、字幕、动画都按 ct 取 cue。 - 笑声、极短的词附近对齐常常错位。关键位置(要哔掉的词、硬切点)**把那一小段单独切出来转文字**确认,别直接信对齐结果。 ## 六、HyperFrames 合成 - 一个 index.html:口播 `