PRODUCTION MAP / JIAHUI YANG / 2026-09-20
Jiahui Yang · 播客制作流水线
画面与声音先分别处理,在 Resolve 剪辑中汇合。
再用剪辑后的音轨制作字幕与 HTML,导出透明叠层,回到 Resolve 合成成片。
先看整条线
先剪出节目,再给这条时间线做字幕。遮罩、深度和增强音频都作为素材参与剪辑;字幕导出后才加入最终合成。
flowchart LR
S["Source media"] --> P["Picture + audio"]
P --> E["Resolve edit"]
E --> F["Final composite"]
E -->|"timeline audio"| C["Caption overlay"]
C --> F
F --> O["Final film"]
classDef artifact fill:#DBC8B8,stroke:#B13254,color:#554037,stroke-width:2px
class O artifact
两机位 RGB → 人物遮罩 + 静态深度 → Fusion 景深合成。
原音频 → Adobe Podcast 手动增强 → 独立 WAV 或视频内音轨。
ChatGPT 字幕 → 人工校对 → Claude HTML → 透明 MOV。
画面:遮罩与静态深度
C018 与 P1030090 分别处理,保持各自帧率、尺寸和帧索引。两条支线从同一机位原片出发,最后在 Fusion 汇合。
2A · 人物遮罩:先分出两人,再沿时间传播
flowchart LR
V["Camera RGB"] --> S["SAM3 seeds"]
P["Points + boxes"] --> S
S --> M["MatAnyone2 chunks"]
M --> B["Overlap blend"]
B --> L["Left / right alpha"]
L --> U["Subjects alpha"]
U --> H["Expanded holdout"]
classDef manual fill:#F7EBE1,stroke:#B13254,color:#554037,stroke-dasharray:5 4
classDef artifact fill:#DBC8B8,stroke:#B13254,color:#554037,stroke-width:2px
class P manual
class L,U,H artifact
并集 alpha 控制人物边缘保护。
holdout 扩大人物覆盖区,用于补背景,降低虚化时人物颜色溢入背景。
全帧 PNG 与推理块可重算;原片、提示参数、三个修正 seed、实际脚本和最终 MOV 留下。
机位、参数与保存文件
| 机位 | 处理画布 / 遮罩尺寸 | 生产入口 |
|---|---|---|
| C018 | 2160 × 1214 · 24000/1001 fps | a001_full_matte.py + a001_full_matte_remainder.py |
| P1030090 | 1920 × 1080 · 30000/1001 fps | p1030090_mattes.py |
稳定段使用 160 帧块、32 帧重叠;进出场使用单独提示与修正。 浮点 alpha 在重叠区融合后再编码。并集为左右 alpha 相加后截断到有效范围。
输出后缀:person_left_alpha.mov、person_right_alpha.mov、
subjects_alpha.mov、subjects_holdout.mov。
主合成接并集与 holdout;左右单人遮罩保留作独立编辑素材。
配方:workflow/comfyui/scripts/、episode/、graphs/、patches/、versions.json
2B · 背景深度:短片估计,整段共用一张图
flowchart LR
B["Empty background"] --> V["Video Depth Anything"]
V --> M["Temporal median"]
M --> N["Normalize depth"]
N --> E["Static depth EXR"]
classDef artifact fill:#DBC8B8,stroke:#B13254,color:#554037,stroke-width:2px
class E artifact
深度采样与模型
Video Depth Anything Small,video_depth_anything_vits.pth,448 输入、FP16。
从 32 帧短片中取中间 16 帧做中值,再用 0.5 / 99.5 百分位统一归一化。
C018 使用深度批次的第 8–23 帧;P1030090 输入第 210–241 帧,取第 218–233 帧。
输出后缀为 background_depth_static_rgb_half.exr。
声音:两种入口,两种交付
Adobe Podcast 是手动上传和下载。这里保留操作记录、参数与处理结果,方便下一期照着做。
3A · 主采访:外录原音频 → 独立增强 WAV
flowchart LR
A["Original recording"] --> T["Trim + split"]
T --> D["Adobe Podcast"]
D --> C["Crossfade stitch"]
C --> W["Enhanced WAV"]
W --> R["Resolve audio"]
classDef manual fill:#F7EBE1,stroke:#B13254,color:#554037,stroke-dasharray:5 4
classDef artifact fill:#DBC8B8,stroke:#B13254,color:#554037,stroke-width:2px
class D manual
class W artifact
C018_adobe_enhanced_stitched.wav;原外录 AAC 另存在 input。3B · C016 / C017:原音轨 → 写回视频
flowchart LR
A["Camera audio"] --> D["Adobe Podcast"]
D --> M["Merge / select"]
M --> V["Video audio track"]
V --> R["Resolve edit"]
M --> W["C017 WAV variants"]
classDef manual fill:#F7EBE1,stroke:#B13254,color:#554037,stroke-dasharray:5 4
classDef artifact fill:#DBC8B8,stroke:#B13254,color:#554037,stroke-width:2px
class D manual
class V,W artifact
本期音频参数与文件位置
主采访从外录音频偏移 24.360083333 秒开始取段,48 kHz 双声道。 四段上传文件均小于 500 MB,相邻段有 20 秒重叠;下载后用 0.5 秒互补余弦交叉淡化拼接,输出 24-bit PCM WAV。
本期 Adobe 输出记录:Enhance Speech v2,speech 50%、background 10%、music 10%。 C017 另留 background / music 30% 的版本。下次按当时界面重新设置。
原音频:input/external_recording_original_audio.m4a、C016 / C017 的 *_original_audio.m4a
参数与拼接脚本:workflow/audio/reference/
本期完整文件:Render/Jiahui Yang.dra/MediaFiles/A001_04131556_C018_adobe_enhanced_stitched.wav
字幕与 HTML:从节目时间线出发
字幕文本由用户通过 ChatGPT 手动生成;HTML 由 Claude 按已保存的 video_caption skill 制作。 对话操作记录下来,导出脚本与实际素材留在包里。
flowchart LR
T["Timeline audio"] --> G["ChatGPT subtitles"]
G --> S["Corrected SRT"]
S --> H["Claude HTML"]
A["Chapters + assets"] --> H
H --> B["Browser capture"]
B --> O["Transparent MOV"]
classDef manual fill:#F7EBE1,stroke:#B13254,color:#554037,stroke-dasharray:5 4
classDef artifact fill:#DBC8B8,stroke:#B13254,color:#554037,stroke-width:2px
class G,H manual
class S,O artifact
分段 / 合并 / 校对 SRT,改字记录、章节与术语事件全部保留。
本期完整 HTML、头像、八张行走帧;聊天内容已嵌入 HTML。
截图时隐藏采访视频与背景。背景图、采访画面由 Resolve 单独合成。
Claude skill 内的制作步骤
- 把分段 SRT 接回节目时间轴,人工核对识别错误,保存校对稿。
- 将 SRT 转成 JSON,整理章节与术语的出现时间。
- 准备行走动画帧、头像和聊天内容,填入 HTML 模板。
- 调整字幕、进度条、术语卡与聊天布局,控制采访窗口出现的时段。
- 逐帧更新 HTML 时间,截图透明画面,编码为 ProRes 4444。
本期字幕音频由剪辑导出的 Timeline 1.mov 提取,按 0–1268 秒、1268–2536 秒和余下部分分成三段。
原始 ChatGPT prompt 未找到;保留用户说明及实际文本产物。
导出视口 1080 × 607,放大至 2160 × 1214,24000/1001 fps。 完整叠层约 1:03:22。行走动画使用实时时钟,重新导出可能有帧级差异。
制作 skill:workflow/captions/skill/README.md
本期 HTML:workflow/captions/episode/progress_bar_preview.html
导出入口:workflow/captions/capture_overlay.py
交付:Render/Jiahui Yang.dra/MediaFiles/overlay_full_2160x1214.mov
Resolve:合成画面,交付节目
Fusion 先生成景深处理后的采访画面。Resolve 时间线负责剪辑、调色、画面布局、声音,以及透明 HTML 叠层的最终组合。
5A · Fusion:补背景,再把虚化变化加回人物外侧
flowchart LR
R["Camera RGB"] --> P["Prepare background"]
F["Frozen frame"] --> P
H["Soft holdout"] --> P
P --> B["Depth blur"]
D["Static depth"] --> B
P --> C["Apply blur delta"]
B --> C
R --> C
M["Subjects alpha"] --> C
C --> O["Fusion output"]
classDef artifact fill:#DBC8B8,stroke:#B13254,color:#554037,stroke-width:2px
class O artifact
节点与公式:为什么两种遮罩都需要保留
| 图中步骤 | 实际节点 | 用途 |
|---|---|---|
| Frozen frame | TimeStretcher1 | 从同机位 RGB 取冻结帧。 |
| Soft holdout | SUBJECT_EXP → Blur1 → Bitmap2 | 扩张遮罩再柔化,用来覆盖人物区域补背景。 |
| Prepare background | Merge1 | 按 holdout 把冻结帧合入 RGB,得到待虚化背景。 |
| Depth blur | DEPTH → CustomTool1 → VariBlur1 | 映射静态深度,控制空间变化的虚化强度。 |
| Subjects alpha | SUBJECT → Bitmap1 | 读取并集遮罩的红色通道作为人物保护权重。 |
| Apply blur delta | CustomTool2 → MediaOut | 把背景虚化的差值加回原图,保留人物。 |
output = RGB + (1 - subjects_alpha) * (blurred_background - prepared_background)
人物内部 alpha 接近 1,保持原 RGB;人物外侧 alpha 接近 0,加入背景虚化变化。 冻结帧位置、虚化参数及各镜头设置由 Resolve 项目保存。
5B · 时间线:这些层一起进入最终渲染
flowchart LR
V["Interview + B-roll"] --> R["Resolve timeline"]
B["Background image"] --> R
A["Audio + beep"] --> R
C["Caption overlay"] --> R
R --> O["Final render"]
classDef artifact fill:#DBC8B8,stroke:#B13254,color:#554037,stroke-width:2px
class O artifact
Jiahui Yang - portable。文件留存:输入、配方、今晚的渲染依赖
整个 Jiahui Yang/ 一起拷走。原料只有一份;脚本、手动步骤和本期编辑状态一起保存。
相机视频、原音频、B-roll、背景图与提示音。共有素材的唯一实体放这里。
ComfyUI 脚本与版本、提示参数、Adobe 记录、字幕稿、HTML、导出工具。
Resolve 项目、可用 RGB、遮罩 MOV、深度 EXR、增强音频和透明叠层。
| 成片所需 | 保留位置 | 旧位置为何可成为清理候选 |
|---|---|---|
| 拍摄 / B-roll RGB | input/;C018、P103 另留今晚所需 RGB 转码 | 新包已有对应输入或当前可用素材;原位置为重复入口。 |
| 人物遮罩、静态深度 | MediaFiles 内 8 个遮罩 MOV + 2 个 EXR | 全片逐帧序列、推理块由原片与配方重建。 |
| 原音频、当前增强结果 | input 原音频;视频内增强轨;MediaFiles 增强 WAV | 上传切片、重复下载、已拼接的分段不再承担唯一音频来源。 |
| 字幕、HTML、头像 / 行走帧 | workflow/captions/;MediaFiles 完整透明 MOV | 实际源文件与完整导出均已收录。 |
| 背景图、消音提示音 | input/ | Render 中只放指向 input 的相对链接。 |
| 剪辑、调色、合成接线 | Render/Jiahui Yang.dra/project.drp | 由 Resolve 项目保存;原项目库继续保留。 |
MediaFiles = Render/Jiahui Yang.dra/MediaFiles/。该目录只有一层:16 个实体文件 + 10 个指向 input 的相对 symlink。
C016 / C017 的相机原编码此前已被替换;本包保存现有 FFV1 视频与另存原音频。
外录 MKV 已不在历史位置;目前保存的是从它无重编码提取的 AAC 原音轨。
Adobe、ChatGPT、Claude 的操作与产物可复用;再次调用服务不保证生成完全相同的结果。
迁移与清理范围
复制整个项目文件夹并保留相对 symlink,如 cp -a 或 rsync -a。
同时存在于 input 与 Render 的媒体只保留一个实体。换路径后的 Resolve 恢复步骤见包内 README。
ComfyUI 安装、模型权重、Python 环境、全局 video_caption skill、共享 Blender 素材和其他节目均保留。 本包记录软件版本与节点补丁,模型和运行环境需要在工作电脑上另行准备。
已按审核清理旧副本。59 组旧副本和中间文件已按用户批准的清单永久删除。
路径与保留去向见 workflow/review/DELETE_REVIEW.md,执行记录见 workflow/review/deletion_completion.json。
下一期:保留方法,替换本期数据
| 可以沿用 | 每期需要重新给 |
|---|---|
| ComfyUI 分块 / 融合 / 导出脚本 | 原片、尺寸帧率、范围、人物提示点 / 框、空背景采样区间。 |
| Adobe 分段与拼接方法 | 新原音频、视频起点偏移、当次增强设置和下载结果。 |
| video_caption skill、HTML 模板、导出脚本 | 新时间线音频、校对 SRT、章节术语、头像、聊天和布局内容。 |
| Fusion 合成结构 | 新 RGB / 遮罩 / 深度引用、冻结帧、各镜头参数与剪辑。 |
新一期建立独立目录和新的运行状态;本期保存的完成记录仅用于回看参数。 转码按需生成 Resolve 可读视频与 PCM 音频,保持帧率、帧数、方向和时间偏移。