真人长视频后期的方法论沉淀。逐字稿提取、字幕生产、封面设计、发布文案 —— 每一步都是 12 期实战踩坑迭代出来的工程化流程,不是教科书。
把录制好的音频转成精准 SRT。这是整个后期的源头 —— 字幕来自它,发布文案的金句也来自它。一个错的时间码会让后面所有环节崩盘,所以前置的 QA 比省事更重要。
Gemini 2.5 Pro 在 5 分钟以上的整段音频上,偶尔会把短句分配 30–50 秒时间码。这种「stretch bug」会让后续所有字幕累积偏移,最末字幕的 end 会超出视频实际时长。
EP0008(519 秒)实测:SRT #7+#8 占了 53 秒(实际说话约 5 秒),末尾字幕 end = 9:39,但视频只到 8:39 → ffmpeg 烧录 dur=-8.6s 直接报错。
mp3 16kHz monoASR 默认词典认不出新模型 / 工具名,会拼成「C dance」「Sora 2」「Vio」这种荒诞错字。每期录前 30 秒过一遍本期 transcript 里出现的具体产品 / 模型 / 概念名,喂进 prompt 作为 HOTWORDS。
ASR 出 SRT 立刻跑这四条检查,任何一条挂掉就 abort,不进入下游:
≤ 10s(超过即 stretch bug)end_ms ≤ 视频时长(超出即错乱)判断时间码第三段是「秒」还是「毫秒」时,用 字符串长度 len(c_str) == 3,不能用 数值 int(c) >= 100。
原因:Gemini 输出 "018" 长度是 3(毫秒),但 int 是 18(< 100)会被误判为秒。这类「前导 0 三位数」在 Gemini 输出中很常见。
不用 ASS / libass。改用 PIL 渲染圆角半透明 PNG,再 ffmpeg overlay 叠加。原因是 libass 的半透明 box alpha 不生效、不支持圆角、中英文双行会变成两个 box 中间有间隙。PIL 路线一次出齐,干净。
v3 是 EP0010 迭代后的版本。三类反模式(中文之间空格 / 词中间断 / 专有名词错)在 v3 里全部被处理掉。
按字符数硬切会把复合词拆开(「人工 | 智能」「火山 | 引擎」)。维护一份 CN_NO_BREAK_WORDS 词典做保护,新期遇到新词组就加。
split 后会产生大量「X | 的 Y」被拆开(「GPT image2」+「的模型...」)。把 承接字开头的下一条首字迁到上一条末尾,时间码不变,只重烧录。
ORPHAN_FIRST = 的了是嘛吧呀哦啦么个些种件儿之乎也已
约束:迁后上条 visual_len ≤ 16;时间 gap < 1500ms。EP0010 一次性迁了 18 条断点。
| ZH_FONT | Noto Sans CJK SC VF · weight 900 (Black) |
| EN_FONT | Arial Bold |
| ZH_SIZE | 120 (2160 宽 / 12 字单行) |
| EN_SIZE | 84 |
| LETTER_SPACING | 4 |
| BOX_RADIUS | 24 |
| BOX_ALPHA | 0xA0 · 37% 不透明黑 |
| BOTTOM_MARGIN | 2300px (2160×3840 视频) |
BATCH_SIZE = 60 是甜区,超过就 OOM。451 条字幕一口气 overlay 直接 Cannot allocate memory: -12。
中间 stage_N.mp4(400MB+)写在 CloudDrive 上,云同步开始上传,第 2 批写入慢 5–10 倍。EP0006 第 1 批 6 分钟 vs 第 2 批 30+ 分钟,被这个坑过一次。
烧录脚本 parse_srt 之后、ffmpeg 之前,对中英字幕都跑:
任一失败 sys.exit("字幕 QA 不通过"),不进入烧录。
字幕 bug 会「静默上线」—— ffmpeg PNG overlay 不验证时间码,错位/重叠都不会报错。所以 3 道 QA 缺一不可:Gate 1 抓 ASR、Gate 2 强制英文时间码对齐中文、Gate 3 烧录前最后兜底。
把视频按字幕条数均分 5 段,段边界落在字幕间隙(前一条结束 + 后一条开始 的中点),用 ProcessPoolExecutor 并发烧录,最后 concat demuxer 合并。
封面是 CTR 的咽喉。视频内容再好,封面没扣住三秒就过去了。这一套结构经过 EP0006 到 EP0012 七期迭代,已经是一个可工程化的「填配置即出齐 4 比例」的脚本。
| 比例 | 尺寸 | 用于 |
|---|---|---|
| 3:4 | 1080×1440 | 小红书 / 视频号缩略图 |
| 9:16 | 1080×1920 | 抖音竖版 / 视频号全屏 |
| 16:9 | 1920×1080 | YouTube / B站 / 抖音横版 |
| 4:3 | 1440×1080 | 备用 / 横版紧凑场景 |
脚本每期复制改文案 + 主题元素 prompt 即可。一次跑约 90 秒出 4 张。
| 元素 | vertical | horizontal |
|---|---|---|
| title_size | 0.125 × h | 0.16 × h |
| sub_size | 0.039 × h | 0.052 × h |
| badge_size | 0.036 × h | 0.048 × h |
| title_y | 0.71 × h | 0.71 × h |
| sub_y | 0.84 × h | 0.84 × h |
| badge_y | 0.055 × h | 0.055 × h |
所有数字按高度算,4 个比例自动适配。
AI 美化真人脸的失真是 IP 灭顶之灾。脸不像本人 = 账号信任崩塌。
EP0010 教训:发型也不能武断描述(避用 "buzzed / crew cut"),直接参考真人头像复制。
三个平台,三套字段规则,三种算法逻辑。同一个视频不能套同一份文案 —— 视频号「描述+标签合一」、抖音「标题独立」、小红书「话题写正文末」。下面是字段级速查表。
|/|不行),可用汉字「丨」(U+4E28) 替代竖线。仅允许 《》"":+?%°# 开头,空格分隔。大流量词 + 精准长尾混搭。#标签#xxx,直接写在正文末尾结论:生产流程不用改,广告策略需要适配。
| 短标题 | 翻完源码后我劝你别养虾了 |
| 描述 | 翻完 OpenClaw 整套源码 所谓灵魂就是角色扮演 创始人跑了 1184 个恶意插件入侵 花钱养虾不如直连大脑 全程 Claude Code 制作 |
| 标签 | #AI智能体 #ClaudeCode #别养虾了 #AI编程 #科技认知 |
短标题 13 字 / 描述 + 标签合计 87 字 · 标签 5 个混搭 · 描述全程信息点不完整句子。