← 返回 Skill 列表
extension
分类: 其它API Key 暂未确认

松哥C线视频流水线

松哥拆管理 C 线竖屏/横屏知识视频全自动生产流水线。当用户要求制作、重做、升级「C 线」「松哥拆管理」系列视频(C6/C7/C8...),或提到'出片''合成视频''左侧叙事漫画+右侧松哥+底部字幕'的版式时使用。覆盖:事实核查 → 出图(硅基流动)→ 逐句 TTS → 时间轴 → 15 帧合成(静态版/动感版)→ ffmpeg 拼接 → 交付包。

person作者: user_f7f66316hubcommunity

松哥拆管理 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 → 与 voice amix
  • 输出后 ffprobe 核对时长 == timeline.total(误差 < 0.05s)

7. 交付

  1. 复制到 /workspace/C6视频终版vN.mp4(检查文件名无+)
  2. 由 timeline.cue 重新生成 .srt(按新时间轴,不要用旧 SRT)
  3. 打包 C6视频交付包.zip(先删旧包,只放成片 + srt)
  4. 出发布执行单(流程/文案/置顶评/回评模板)
  5. 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 + 全段重渲染,段时长全部变化。