霜刃片头曲-06-制作记录.md

《霜刃》片头曲 · 06 制作记录(交付)

成片:2 分 21 秒 / 1344×768(2.39:1 加黑边)/ 24fps / 立体声 48kHz 制作日期:2026-09-20(生成 03:35→15:28,后期 15:30→16:00) 状态:✅ 全流程完成,成片可播 下载页:http://192.168.31.76:8899/46-武侠片头曲项目/


一、交付物

文件说明下载页
post/04_成片_2.39x1_混音.mp4交付主片:裁 2.39:1 + 黑边 + 剧名淡入 + 完整混音链接
post/04_母版_16x9_混音.mp416:9 母版(不裁幅、不叠字),便于二次剪辑链接
post/03_final_239.mp42.39:1 含剧名,静音画面层—
post/03_master_169.mp416:9 画面层—
post/01_concat.mp4 · 02_grade.mp4拼接版与调色版(中间产物,便于回退)—
music/v1-male.flac主音轨《霜刃引》男声独唱(48kHz)链接
music/v2-female.flac · v3-duet.flac女声独唱版 / 男女对唱版—
shots/shot01–18.mp418 个镜头母版—
qa/shot*_sheet.jpg每镜 6 帧联系表(质检用)目录
title/title_xiaobiaosong_1344x768.png剧名叠加层(带 alpha);title_kaiti_* 为备选—
assets/23 张素材(4 角色设定稿 + 9 场景板 + 7 道具 + 3 特写)目录
相册18 镜已自动收录(ComfyUI 输出)http://192.168.31.76:8900 → video/

二、成片规格核验

项实测目标结论
时长141.21 s音乐 141.52 s✅ 收在尾奏余韵里
总帧数3388 帧17×192 + 124 = 3388✅ 精确
分辨率1344×768(2.39:1 内容 + 黑边)—✅
帧率24 fps24✅
音轨AAC 立体声 48kHz,mean −15.2 dB / max −0.2 dB对齐原歌曲 −15.6/0.0✅
剧名135.2s 起 1.4s 淡入,持续到片尾—✅ 已抽帧确认

三、生成运行记录

11 小时 53 分钟,18 镜全部成功,零失败、零硬挂。

项值
时间窗03:35:32 → 15:28:15
单镜耗时34–43 分钟(192 帧 / 12 步 / 1344×768),含 5 分钟冷却合计 38–48 分钟/镜
最短shot18(124 帧)16.4 分钟
底座Minimax-h3_Singularity_ref2va_Pruned_v1.3_int8.safetensors
节点官方 MiniMaxH3ReferenceToVideo(comfy_extras)+ 独立 MotionContext 包;零加速节点
采样res_multistep + simple,12 步,单采
冷却基础 300s + 等温度回落到 ≤62°C;实测出片后 60°C → 5 分钟内降到 44°C
续接仅镜10→镜11 用 AV latent(h3_ctx_duizhi)

09-15 / 09-17 两次整机硬挂的教训全部生效:单镜独立任务、192 帧远离 90 分钟红线、强制冷却、断点续跑、失败即停。连续 11.9 小时满载没有再出现硬挂。


四、过程中抓到的三个真问题(都已修复)

4.1 剧名叠加层根本叠不上去(后期前抓到)

PNG 作为 ffmpeg 输入是单帧流,fade 的时间轴永远停在 t=0,alpha 恒为 0 —— 剧名实际不会出现。 修复:加 -loop 1 把字层变成连续视频流。已在 2.39:1 裁幅下抽帧确认落位。

若没在后期前验证,会是「跑完 12 小时才发现片名没上」。

4.2 混音输入标号写反,歌曲被压到 20%(交付前抓到)

-i video -i MUSIC 时 [0:a] 是画面自带的环境音、[1:a] 才是歌曲,我最初把 volume=0.20 加在了歌曲上。 实测成片 mean −30.9 dB(原歌曲 −15.6 dB),差 15 dB —— 相当于整片只有气氛没人声。 修复:歌曲 1.0 / 环境音 0.20,并关掉 amix 默认的 normalize=1(它还会把每个输入再减半)。 修复后 mean −15.2 dB / max −0.2 dB ✅

4.3 AV latent 续接段会短 22 帧(质检时发现)

MotionContextTrim 会裁掉钉入的 22 帧前缀,所以续接段的交付帧数 = 采样帧数 − 22。镜11 因此只有 170 帧(应 192),会让后半段整体比音乐早 0.917 秒。 修复:把前一个镜头(镜10,静止的云海远景剪影)末帧克隆延长 22 帧吸收缺口。对画面几乎不可察觉,时间轴精确回到 3388 帧。

这条是方法论级的发现:以后凡是带 AV latent 续接的段,采样帧数要按「目标帧数 + 22」来给,否则整条时间轴会漂。


五、18 镜质检结论

规格:17/18 精确达标(1344×768 / 192 帧 / 8.00s / 带音轨);镜11 为 170 帧(续接裁剪,已按 4.3 补帧)。镜18 为 124 帧。

画面抽检(联系表见 qa/):

镜内容抽检结论
01雪原古战场大远景✅ 构图与场景板一致,缓推到位,无文字无崩坏
05药庐苏晚回眸✅ 回眸过程完整、朱红披帛甩出有力、脸干净
08裴无涯近景✅ 银面具反光、皮指套叩栏、长街灯火 bokeh 全对,脸无畸变
11刀剑相击✅ 双人身份正确、有火星、与镜10 轴线延续
17雪中擦肩✅ 双人身份(黑衣狐裘 vs 月白朱红披帛)完全正确,远景无脸崩

未做 FaceRefine:中近景人脸(镜5/8/12)抽检均干净,未发现需要修复的崩坏,因此省下数小时 GPU 时间。


六、后期管线(可复现)

18 镜 → fixup(补帧对齐网格)→ concat(拼接)
      → grade(冷青/去饱和0.90/胶片曲线/暗角)
      → finish(裁 2.39:1 + 黑边 + 剧名 alpha 淡入)
      → mix(《霜刃引》0dB + H3 环境音 −14dB,压缩+限幅)
cd ~/Downloads/h3-tasks/sd-yin
~/Downloads/vlm-env/bin/python post_produce.py --stage all

⚠️ 必须用 ~/Downloads/vlm-env/bin/python(系统 python3 无 requests)。


七、脚本清单

脚本作用
h3_shot.py逐镜执行器(官方节点图 + 温度冷却 + 断点续跑 + 内存哨兵)
shots_a.json / shots_b.json18 镜清单:完整六段式提示词、参考图、seed、latent 配置
rescue_current.py接住 GPU 上正在跑的任务(重启执行器时不浪费在途算力)
post_produce.py后期总装(fixup/concat/grade/finish/mix)
make_title.py剧名排版器(小标宋/楷体两版)
inspect_shots.py镜头质检(规格 + 联系表)
music_to_grid.py歌曲 → 镜头网格换算
abc_sections.pyABC 乐谱段落解析
yue2_three_versions.py三版本歌曲生成
h3_run.log / batch_detached.log运行日志

八、v2 修订(用户反馈后返工,2026-09-20 18:00–19:10)

用户审片指出两处「有点搞笑」的动作。诊断结论:都是提示词歧义,不是模型能力问题。

8.1 镜7(48s)男主"背身开门" —— 几何自相矛盾

原提示词同一段里写了「门向内开 + 他背对镜头走出去」,又写了「摄影机在他身后跟随」。 摄影机在他身后 = 门在摄影机背后,这个动作根本无法入画;模型只能自己发明一个能同时满足「背对镜头」与「有扇门」的动作,于是变成背着手开门。

改法:把「开门」与「走人」拆成两个互不干扰的节拍,并禁止任何手部碰门。

要点:模型不需要做精细物体交互——只让它同时渲染「一扇自己转开的门」和「一个人往外走」。

8.2 镜8(59s)反派叩栏过快过多 —— "evenly spaced" 被读成连击

原提示词写 taps the stone three times, evenly spaced。「均匀间隔的三次」被执行成了均匀快速的连续敲击,看着像打拍子,反而消解了「老谋深算」。

改法:全程只敲一次,且用静止来演城府。

8.3 返工数据

项值
重跑镜头镜7(seed 20260962→20260963)、镜8(20260969→20260971)
耗时镜7 约 34 分钟 + 冷却,镜8 33.9 分钟 + 冷却,共约 73 分钟
是否影响他镜否——两镜都不在 AV latent 续接链上(只有镜10→镜11 用 latent)
后期重建post_produce.py --stage all --force,19.2 分钟
修复后复核镜7 抽帧 49/52/55s:门敞开→走出→背身走远 ✅;镜8 抽帧 59/61/63s:手仅 59s 一次起落、其后完全静止 ✅
响度复核mean −15.2 dB / max 0.0 dB(与原曲一致)
旧版备份shots/_v1_backup/shot07_v1_背身开门.mp4、shot08_v1_快速连击.mp4

⚠️ 坑:备份文件若放在 shots/ 目录下,会被执行器的 shot*.mp4 通配匹配到,导致后期报「镜头数不对:20/18」。备份必须放子目录。

8.4 镜8 v3 —— 改为「坐太师椅」(用户第二次反馈,2026-09-20 19:20–20:30)

用户要求把镜8 从「立于垛口」改成「坐在太师椅上」。这个方向是对的:坐着的反派比站着的更有压迫感,也更贴「老谋深算」。

前置问题:原有 9 块场景板里没有太师椅。让 H3 凭空画椅子风险高,所以先补一块场景板。

步骤做法结果
补场景板即梦 5.0 + 2k 生成两张(椅子背对镜头 / 椅子侧对镜头)0 积分(1110→1110 实测)
选型用侧对镜头那张(sc_throne_chair_facing.png)背对镜头那张只能拍后脑勺,而本镜核心是「抬眸 + 面具反光」的正面戏
重跑镜8seed 20260971→20260975,参考图换成新场景板 + 裴无涯三视图33.5 分钟,192 帧 / 8.00s ✅
后期重建post_produce.py --stage all --force18.6 分钟

提示词关键改动

新场景板:assets/sc_throne_chair_facing.png(交付用)、sc_throne_chair_back.png(备选:椅子朝向远处灯火,适合拍「俯瞰江山」的背影镜头,本次未使用)。 提示词存于 ~/Downloads/h3-tasks/sd-yin/prompts/sc_throne_chair2.txt。

复核:成片 57/59/61/63s 抽帧确认——端坐太师椅、四分之三侧对镜头、银面具接月光、手搭卷云扶手,仅 59s 一次起落;响度 mean −15.2 dB / max 0.0 dB ✅ 旧版备份:shots/_v1_backup/shot08_v2_站立叩栏.mp4。

8.5 镜8 v4(定稿)—— 站姿 + 明暗交替的脸(用户第三次反馈,2026-09-21 00:30–01:25)

用户定调:回到站姿,不用敲击动作,改用「明暗交替的脸」来演城府。

这个方向比"叩击"高级:光在变、人不变——动作层面的完全静止 + 光照层面的持续变化,才是"看不透"的视听表达。叩击是"人在动",而静止是"人在忍",后者更冷。

提示词设计

数据

项值
重跑镜8seed 20260975→20260981,参考图换回 sc_city_tower.png + 裴无涯三视图
耗时33.4 分钟 + 冷却
后期重建18.5 分钟
复核抽帧 0.5/2.0/3.5/5.0/6.5/7.75s:暗→亮→暗→亮→微暗,六帧头位与视线完全一致 ✅;成片 57/59/61/63s 同样成立 ✅
响度mean −15.2 dB / max 0.0 dB ✅
备份shots/_v1_backup/shot08_v3_坐太师椅.mp4

三条弯路的价值:v1 快速连击 → v2 站立单次叩击 → v3 坐太师椅 → v4 站姿 + 明暗交替(定稿)。 结论:用"光照变化"代替"动作"来演内心,既绕开了模型做精细手势的短板,又比任何动作都更克制。

新增经验:当需要「不动声色地表现压迫感」时,不要写动作,改写成光照事件(流云掠月 / 灯焰摇曳 / 帘影扫过),并明写 does not move his body at all + 具体时间点的光照变化。模型对光照变化的渲染能力远强于对手部动作的控制能力。


九、经验沉淀(下次直接复用)

  1. 音乐先行,且用 ABC 乐谱头部拿精确 BPM(比音频估计可靠);但 ABC 的段落标记不能当音频结构用——实测两者不一致,内容强度要按音频能量包络排。
  2. 让 BPM 与 H3 帧数网格对齐:本片 120 BPM → 4 小节 = 8.000s = 192 帧(恰好是 17k+5),剪辑点天然落在乐句上。
  3. 192 帧比 260 帧更安全(34–43 分钟 vs 54–86 分钟),且切点更密、片头更活。
  4. 场景板作 <Picture 1> 当首帧是控制构图最有效的手段(13 小时那次与本次都验证)。
  5. AV latent 续接段要按「目标 + 22 帧」给采样帧数(见 4.3)。
  6. ffmpeg 叠加 PNG 必须 -loop 1(见 4.1)。
  7. 混音时 [0:a] 是画面自带音、[1:a] 是外挂音轨,别写反;amix 记得 normalize=0(见 4.2)。
  8. 长跑要脱离工具会话(setsid),并另起一个轻量等待任务挂在会话上以获取完成通知。
  9. 冷却不是干等:读温度等回落 + 读宿主内存,这才是 09-15 那次冻死的真正防线。
  10. 写动作前先做一遍「摄影机能不能拍到」的几何自检:镜7 的返工就是「背对镜头」与「门在他身后」两条要求互相矛盾——描述里同时出现「背对摄影机」+「摄影机在他身后」+「他从门里出来」时,门必然在镜头背后,模型只能瞎编。每个镜头都要问:机位在哪、主体朝哪、被交互的物体在画面里吗。
  11. 不要让模型做精细物体交互(开门闩、握把手、解绳结):改成「物体自行运动 + 主体随后移动」,把两个动作解耦。
  12. 数量词要封顶:three times / evenly spaced 这类会被执行成快速连击。要「克制的一次」就明写 one tap only + no second tap + no drumming,并给出具体时间点(如 At 00:05.500)。用静止演情绪比用重复动作更可靠。
  13. 备份文件不要放在被通配的工作目录里(见 8.3 的坑)。
下载此文件