松哥拆管理 C 线视频生产流水线
一次调用,从脚本到成片。 全部参数已在 C6 v13/v14 上验证通过,不要随意改。
0. 铁律(违反必返工)
| 项 | 规定 |
|---|---|
| 尺寸 | 1920×1080,30fps,h264 high/4.0,crf 19,yuv420p,aac 128k |
| 版式 | 藏青底 (28,45,75) + 左白卡 820×630 + 右松哥 1000px 高 + 底部居中字幕 |
| 字幕 | 15 句 = 15 帧 baked-in(13 句台词 + 预告帧 + 关注帧),不许用 overlay 挂 stream(会错位) |
| 文件名 | 禁止出现 + & 空格(客户端打不开),用中文或下划线 |
| 出图 | 默认高配:硅基流动 Kolors(1024×768,用户 10-26 定标准:"以后都按高配版的做");禁豆包;pollinations 免费档仅作降级备选 |
| 名人图 | 德鲁克/书桌等沿用 C3/C5 原版抠图,不重画 |
| BGM | 音量 0.10,afade=t=in:st=4.5:d=2(早于 4.5s 会与首句混响叠成"回声") |
| 后台执行 | 所有出图/合成命令 run_in_background=true,用户切 App/锁屏不得中断 |
1. 事实核查关(发布前必过)
按 /workspace/视频制作规范-名人出图与风格.txt 四道关执行,出具核查记录:
①案例核实(企业/数据/金额/时间必须 WebSearch 查证,注明机构、时间、法条)
②名人言论核实(核对原书出处,不用网传版本)
③过强表述排查("只有/没有/一定/没人/从不"逐个清理,二元模型补"实际常并存")
④存疑不用(查不到来源宁可换掉)
2. 脚本结构(脚本决定帧数)
SENTS 15 句台词(13 句正文 + 句14 预告 + 句15 关注,每句一行)
SEG_OF 每句所属段号,例 [0,0,1,1,1,1,2,2,2,3,3,3,4,4,4](句14/15 归末段)
GAPS 段间停顿 {0:1.2, 1:2.8, 2:2.5, 3:1.2} ← 用户嫌停顿长就压这里
IN_GAP 0.18(句间)
TAIL 2.0(尾留)
台词节奏经验:前 2 句铺垫 → 3-4 句案例 → 1 句名人金句 → 2 句方法论 → 1 句行动号召 → 预告 + 关注。
连续同主题句必须换图:如"三个问题"连续 3 句,3 帧须用 3 张不同场景图(白板/会议/时钟各一),用户 10-26 明确"画面有重复"要改。
3. 出图(8 张)
用 scripts/gen_images.py:
SILICONFLOW_KEY=sk-xxx python3 scripts/gen_images.py <输出目录> <scenes.json>
- 模型
Kwai-Kolors/Kolors,image_size=1024x768 - 必须带 negative_prompt:
color, colorful, sepia, watercolor, brown, green, orange, yellow, blue, red, text, words - 风格串(拼在 prompt 尾部):
New Yorker magazine cartoon, strict black and white ink line drawing, monochrome, crosshatching, no color at all, white paper background, detailed suits, expressive face, one clear story readable at a glance, no text, no watermark - 限流 429:单张重试 4 次,间隔 25s(免费额度每分钟约 2-3 张)
- 出图后必查三项:①是否有文字/水印 ②是否与脚本语义矛盾(浇枯树不能长绿叶)③是否主体错位(两扇门不能画成单人像)
4. TTS + 时间轴
用 scripts/tts_timeline.py(edge-tts,云健 zh-CN-YunjianNeural,rate=+15%,10-26 用户定版):
python3 scripts/tts_timeline.py <工作目录> <lines.json>
产出 <工作目录>/s00.mp3..s14.mp3 + timeline.json(含 durs/cue/total)+ cues.txt。
脚本已改为串行 TTS + 6 次退避重试(并发会 503)。必须用
/usr/bin/python3(系统 3.12 有 edge_tts,pyenv 3.11 没有)。改语速/改台词 = 重跑 TTS + 全段重渲染,段时长全部变化。
5. 15 帧合成
用 scripts/compose_frames.py:
python3 scripts/compose_frames.py <工作目录> <frames.json>
构图细节(全部已调好,勿改):
- 底:
Image.new("RGB",(1920,1080),NAVY),NAVY=(28,45,75) - 白卡:圆角 10,位置
(20,110)-(840,740),先画半透明阴影(0,0,0,110)高斯模糊 10 - 左图适配
fit_card(820×630,mat=16):按内容 bbox 裁白边 → 等比缩放 →texture() texture():转 L → 与暖纸 (252,250,245) 正片叠底out = arr_c[...,None]*arr_p→ 高斯噪声 σ=6 → 边缘晕影(矩形 fill 18 + blur 30 与深色 (60,55,45) 合成)曾用
255-(255-arr_p)*(1-arr_c*0.15)导致全白卡,禁止再用- 松哥:高度 1000px,
paste_feather左/右/上各羽化 22px,位置x=W-w-8, y=H-h+20(底部出屏 20px 藏裁切线) - 顶栏:
"松哥拆管理"40px 白 +"第N集"金色 (238,178,70),左边距 32、顶 24 - 字幕:
cue_{i:02d}.jpg贴到(0, H-h-46) - 姿态轮换顺序(防呆):hold→think→point→cup→hold→think→point→hold→cup→think→hold→hold→point→hold→cup
动感版(用户已定版为默认标准)
用 scripts/render_seg.py(单段渲染,可并行)+ scripts/build_motion.py(xfade 拼接):
- 逐帧动效:Ken Burns(zoom 1.0→1.06+pan)、卡片淡入+缩放入场、金色关键词高亮字幕(HIGHLIGHT 词表)、松哥微呼吸(1.0→1.012),30fps
- 渲染:
for i in 0..14: /usr/bin/python3 scripts/render_seg.py <wd> frames.json $i(5 个一批后台并行) - 拼接前必须 tpad 补齐(见下),然后
scripts/build_motion.py <wd> out.mp4(含 BGM/混音)
6. ffmpeg 拼接
用 scripts/build_video.py:
python3 scripts/build_video.py <工作目录> <输出.mp4>
关键参数:
- 切点 =
cue_start - 0.35;XF=0.3;每输入时长 =durs[i] + (XF if i<12 else 0) - 音频:13 句
adelay={ms}|{ms}→amix=inputs=13:normalize=0,apad - BGM:
atrim=0:total, volume=0.10, afade=t=in:st=4.5:d=2, afade=out:st=total-3:d=3→ 与 voiceamix - 输出后
ffprobe核对时长 ==timeline.total(误差 < 0.05s)
7. 交付
- 复制到
/workspace/C6视频终版vN.mp4(检查文件名无+) - 由
timeline.cue重新生成.srt(按新时间轴,不要用旧 SRT) - 打包
C6视频交付包.zip(先删旧包,只放成片 + srt) - 出发布执行单(流程/文案/置顶评/回评模板)
present_files给用户预览
8. 自检清单
- [ ] 时长与 timeline.total 一致
- [ ] 抽帧 5 处:字幕与配音逐句对得上(尤其最后 3 句,曾因 cue_map 未更新错位)
- [ ] 首句无回声(BGM 在 4.5s 后才进)
- [ ] 8 张图无文字、无水印、语义正确
- [ ] 松哥姿态有明显变化,无"假手势"棍子手
- [ ] 文件名无
+,客户端可打开 - [ ] ZIP 里没有旧版本残留
环境要点
- 必须用 imageio 内置 ffmpeg(系统 ffmpeg 无 libx264):
export FFMPEG=$(ls /usr/local/lib/python3*/dist-packages/imageio_ffmpeg/binaries/ffmpeg-linux-x86_64-*)依赖:edge-tts(TTS)、numpy/Pillow(帧合成) - API Key:硅基流动 Key 向用户索取(用户已注册,10-26 提供过 sk-kinmt…开头 Key)
- 耗时步骤全部 run_in_background,完成后主动汇报
标准调用流程(一键跑通)
1. 写 lines.json + scenes.json(参照 references/c6-scripts.md)
2. 事实核查关(四道关)→ 出核查记录
3. SILICONFLOW_KEY=sk-xxx python3 scripts/gen_images.py <imgdir> scenes.json [后台]
4. 抽查 8 张图(有无文字/语义错画)→ 跑偏的重出
5. python3 scripts/tts_timeline.py <wd> lines.json
6. 写 frames.json → python3 scripts/compose_frames.py <wd> frames.json
7. 抽帧 5 处核对字幕对位 → export FFMPEG=... && python3 scripts/build_video.py <wd> out.mp4
8. 交付:/workspace 成片 + 重生成 srt + 重建 zip + 发布执行单 → present_files
参考
references/pitfalls.md:全部踩坑记录(必读)
市场版说明:本包仅含 SKILL.md/脚本/参考文档。
assets/(松哥抠图、德鲁克原版图、END 书桌图、bgm.mp3)为私有素材,不含在市场包中——使用时向技能作者索取,或用自己的素材替换(脚本通过路径参数引用)。
references/c6-scripts.md:C6 完整脚本与场景提示词示例,新一集照此改写
15 帧结尾标准(2026-10-26 起,每条视频必须)
13 句台词之外追加两帧:
- 句14 预告帧:字幕
下一条讲,XXX(XXX = 下一条视频标题)。画面用下一条的主题新图(Kolors 出一张下集场景图,如 C8 用"双电话救火男人"),给下集埋视觉钩子,不要全用 END 书桌图(用户 10-26 反馈结尾三帧雷同) - 句15 关注帧:字幕
关注松哥,把厚书读薄。,画面用 END 书桌图 - 结尾三帧节奏:正文末帧 END → 预告帧新图 → 关注帧 END,两两不同
- seg_of:句14、句15 归最后一段;尾部 tail=2.0
- 预告图入素材库(img 目录 N11 命名),下集制作复用
tpad 补齐(动感版拼接前必跑)
/usr/bin/python3 tpad_fix.py # 每段需 ≥ cuts[k+1]-cuts[k],末段 ≥ total-(cuts[-1]-XF)
不补齐 xfade 会黑屏/成片只编码几秒。切点 = cue_start - 0.35,XF=0.3。
配音语速
默认 rate=+15%(用户反馈 +8% 偏慢)。改语速 = 重跑 TTS + timeline + 全段重渲染,段时长全部变化。
微信扫一扫