视频生产线 · METHODOLOGY · 2026.05

四个环节,
把视频从素材带到平台。

真人长视频后期的方法论沉淀。逐字稿提取、字幕生产、封面设计、发布文案 —— 每一步都是 12 期实战踩坑迭代出来的工程化流程,不是教科书。

系列 · 12 期已发布
沉淀周期 · 2 个月
单集出片 · 3 分钟字幕烧录
覆盖平台 · 视频号 / 抖音 / 小红书
01 / SOURCE
A
逐字稿提取
把音频精准转 SRT,作为字幕和文案的源头
02 / RENDER
B
字幕生产线
中英双语 PIL 渲染 + 并发烧录,3 分钟出片
03 / VISUAL
C
封面方法论
4 比例一键出齐,badge + 主标 + 副标的三件套
04 / SHIP
D
发布文案
三平台字段差异 + 视频号字数铁律
§ 01 — TRANSCRIPT

逐字稿提取

把录制好的音频转成精准 SRT。这是整个后期的源头 —— 字幕来自它,发布文案的金句也来自它。一个错的时间码会让后面所有环节崩盘,所以前置的 QA 比省事更重要。

WHY为什么不一口气整段 ASR

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 直接报错。

HOW切段 ASR · 推荐方案

  1. 抽音频 mp3 16kHz mono
  2. 切成 ≤ 3 分钟的段落(gap 落在停顿处)
  3. 每段独立 ASR,prompt 写死「音频时长 N 秒,时间码不得超过」
  4. 合并时按段偏移叠加时间码
RESULT 每段独立,时间码不会累积错乱。任何一段出 bug 只影响那一段,重做成本可控。

HOWHOTWORDS — 把本期产品名喂给 ASR

ASR 默认词典认不出新模型 / 工具名,会拼成「C dance」「Sora 2」「Vio」这种荒诞错字。每期录前 30 秒过一遍本期 transcript 里出现的具体产品 / 模型 / 概念名,喂进 prompt 作为 HOTWORDS。

AI 工具 Seedance 2.0 GPT image Nano Banana Sora Veo NotebookLM Cursor Claude Code
模型公司 OpenAI Anthropic Google 字节跳动 火山引擎 MiniMax DeepSeek
AI 概念 SOP API prompt token RAG Agent MCP Memory

QA GATE 1ASR 输出验证

ASR 出 SRT 立刻跑这四条检查,任何一条挂掉就 abort,不进入下游:

  • 每条 duration ≤ 10s(超过即 stretch bug)
  • end_ms ≤ 视频时长(超出即错乱)
  • 相邻字幕不重叠
  • 编号连续递增

TRAPparse_ts 的隐蔽坑

判断时间码第三段是「秒」还是「毫秒」时,用 字符串长度 len(c_str) == 3,不能用 数值 int(c) >= 100

原因:Gemini 输出 "018" 长度是 3(毫秒),但 int 是 18(< 100)会被误判为秒。这类「前导 0 三位数」在 Gemini 输出中很常见。

§ 02 — SUBTITLE

字幕生产线 v3

不用 ASS / libass。改用 PIL 渲染圆角半透明 PNG,再 ffmpeg overlay 叠加。原因是 libass 的半透明 box alpha 不生效、不支持圆角、中英文双行会变成两个 box 中间有间隙。PIL 路线一次出齐,干净。

七步标准流程

抽音频 切段 ASR fix_srt split_long_srt translate sync_timecodes shift_orphan_particles PIL 渲染 + overlay

v3 是 EP0010 迭代后的版本。三类反模式(中文之间空格 / 词中间断 / 专有名词错)在 v3 里全部被处理掉。

HOW中文断行词典

按字符数硬切会把复合词拆开(「人工 | 智能」「火山 | 引擎」)。维护一份 CN_NO_BREAK_WORDS 词典做保护,新期遇到新词组就加。

一步一步 最佳实践 一镜到底 管理层 几百万 分镜头 字节跳动 火山引擎 视频号
RULE merge 短尾时:中-中用紧拼(无分隔符),中-英 / 英-英用空格。

HOW承接字迁移 (shift_orphan_particles)

split 后会产生大量「X | 的 Y」被拆开(「GPT image2」+「的模型...」)。把 承接字开头的下一条首字迁到上一条末尾,时间码不变,只重烧录。

ORPHAN_FIRST = 的了是嘛吧呀哦啦么个些种件儿之乎也已

约束:迁后上条 visual_len ≤ 16;时间 gap < 1500ms。EP0010 一次性迁了 18 条断点。

HOWPIL 渲染关键参数

ZH_FONTNoto Sans CJK SC VF · weight 900 (Black)
EN_FONTArial Bold
ZH_SIZE120 (2160 宽 / 12 字单行)
EN_SIZE84
LETTER_SPACING4
BOX_RADIUS24
BOX_ALPHA0xA0 · 37% 不透明黑
BOTTOM_MARGIN2300px (2160×3840 视频)

TRAPOOM + CloudDrive 抢 I/O

BATCH_SIZE = 60 是甜区,超过就 OOM。451 条字幕一口气 overlay 直接 Cannot allocate memory: -12

中间 stage_N.mp4(400MB+)写在 CloudDrive 上,云同步开始上传,第 2 批写入慢 5–10 倍。EP0006 第 1 批 6 分钟 vs 第 2 批 30+ 分钟,被这个坑过一次。

FIX 全流程在本地盘 cache 跑,最后 cp 成片回 CloudDrive。

QA GATE 3烧录前 SRT 验证(最后防线)

烧录脚本 parse_srt 之后、ffmpeg 之前,对中英字幕都跑:

  • duration ≤ 10s
  • end_ms ≤ 视频时长
  • 相邻不重叠

任一失败 sys.exit("字幕 QA 不通过"),不进入烧录。

字幕 bug 会「静默上线」—— ffmpeg PNG overlay 不验证时间码,错位/重叠都不会报错。所以 3 道 QA 缺一不可:Gate 1 抓 ASR、Gate 2 强制英文时间码对齐中文、Gate 3 烧录前最后兜底。

HOW并发烧录提速 11.5×

把视频按字幕条数均分 5 段,段边界落在字幕间隙(前一条结束 + 后一条开始 的中点),用 ProcessPoolExecutor 并发烧录,最后 concat demuxer 合并。

3 分钟EP0007 实测 · 8:59 视频 / 288 条字幕
11.5×对比 EP0006 串行 34 分钟
4 workerAMD Radeon 890M iGPU + h264_amf 甜区
§ 03 — COVER

封面方法论

封面是 CTR 的咽喉。视频内容再好,封面没扣住三秒就过去了。这一套结构经过 EP0006 到 EP0012 七期迭代,已经是一个可工程化的「填配置即出齐 4 比例」的脚本。

800 装一次 · 500 卸一次
龙虾病毒
一代人有一代人的鸡蛋要领

三件套结构

每张封面 = badge + 主标 + 副标 + Gemini 水彩背景 + PIL 文字叠层。每个元素位置按 height 比例算,4 个比例一套配置批量出。

BADGE
红色钩子,数字 / 痛点 / 反差源
主标
2–4 字主题词,强名词当主语
副标
一句点睛,「一个广告人 + 动作」

HOW4 比例 · 一键出齐

比例尺寸用于
3:41080×1440小红书 / 视频号缩略图
9:161080×1920抖音竖版 / 视频号全屏
16:91920×1080YouTube / B站 / 抖音横版
4:31440×1080备用 / 横版紧凑场景

脚本每期复制改文案 + 主题元素 prompt 即可。一次跑约 90 秒出 4 张。

HOWPIL 叠层布局(按 height 比例)

元素verticalhorizontal
title_size0.125 × h0.16 × h
sub_size0.039 × h0.052 × h
badge_size0.036 × h0.048 × h
title_y0.71 × h0.71 × h
sub_y0.84 × h0.84 × h
badge_y0.055 × h0.055 × h

所有数字按高度算,4 个比例自动适配。

RULES文案修辞铁律 · 三条

  1. 主标用强名词当主语 —— Claude Code / 千问 / Gemini / Sora / Veo / Cursor。不用「不会写代码」「我什么都不懂」这类反差自谦句式(EP0011 已经用过一次,重复就是修辞失效)。
  2. 副标格式:「一个广告人 + 动作短语」 —— EP0012「一个广告人 全程让 AI 写代码」/ EP0011「一个广告人 从 0 跑通产品的完整思路」。这是 IP 暗号,每期保留同一句法。
  3. 每期只保留 transcript 真说过的方法论暗示 —— 不凭印象编造。封面是诚信契约,看封面进来的人期待对得上视频内容。

TRAP真人脸 · 三道防线

AI 美化真人脸的失真是 IP 灭顶之灾。脸不像本人 = 账号信任崩塌。

  1. 禁字列表:prompt 严禁脸型形容词 (LEAN / sharp / cheekbones / chiseled)
  2. 每比例 3 候选:同一 prompt 跑 3 次取最像
  3. Gemini Flash 评分挑:自动对比参考图打分,分数最高的胜出

EP0010 教训:发型也不能武断描述(避用 "buzzed / crew cut"),直接参考真人头像复制。

TRAP反模式

  • ❌ 黄色巨字 + 黑描边粗黑体(YouTube thumbnail 暴力风)
  • ❌ 多元素装饰堆砌(DNA / 心脏 / 大脑 / 神经网络全有)
  • ❌ 高饱和大色块(违反灰阶为基)
  • ❌ 主标关键词被划掉 / 打码(应该突出,不是弱化)
  • ❌ 装饰性英文 Caption("ARCHIVE 2015" 含义不清)
  • ❌ AI 美化真人写实风
  • ❌ 字体被竖版 9:16 拉宽(Nano Banana 已知 bug,必须 PIL 后处理)
§ 04 — PUBLISH

发布文案

三个平台,三套字段规则,三种算法逻辑。同一个视频不能套同一份文案 —— 视频号「描述+标签合一」、抖音「标题独立」、小红书「话题写正文末」。下面是字段级速查表。

视频号XNTJ 主战场

社交推荐 → 平台推荐
短标题
≤ 16 字,不能有特殊符号(|/不行),可用汉字「丨」(U+4E28) 替代竖线。仅允许 《》"":+?%°
描述 + 标签
合计 ≤ 100 字(长视频 >1 分钟),写在同一段。标签接在描述末尾。
标签
2–5 个,# 开头,空格分隔。大流量词 + 精准长尾混搭。
填写顺序
描述+标签 → 短标题 → 首评
描述策略
写核心信息点 / 悬念,不写完整句子

抖音完播流

钩子优先
标题
独立字段,钩子放最前。建议前 10 字带数字 / 具体动作。
描述 + 标签
合一字段,描述末尾跟 #标签
填写顺序
标题 → 描述+标签

小红书搜索流

话题写正文末
标题
独立字段,可用 emoji 增加视觉
描述
含话题标签 #xxx,直接写在正文末尾
填写顺序
标题 → 描述(含标签)

算法视频号推荐机制

  1. 社交推荐 → 平台推荐:先在你的关系链小范围测,完播率达标才进推荐池
  2. 前 3 秒决定留存:标题 + 封面决定点击,开头 3 秒决定完播
  3. 发布后 2 小时是黄金期:互动数据决定是否进入更大推荐池

RISK平台风控 · AI 内容

  • 日常 AI 内容自动检测不会拦,正常发正常推
  • 大火视频触发人工审 → 被标记 AI 生成 → 限制广告投放
  • 自然推荐流量不受影响(EP0001 大火验证)

结论:生产流程不用改,广告策略需要适配。

REAL视频号文案样例(EP0001)

短标题翻完源码后我劝你别养虾了
描述翻完 OpenClaw 整套源码 所谓灵魂就是角色扮演 创始人跑了 1184 个恶意插件入侵 花钱养虾不如直连大脑 全程 Claude Code 制作
标签#AI智能体 #ClaudeCode #别养虾了 #AI编程 #科技认知

短标题 13 字 / 描述 + 标签合计 87 字 · 标签 5 个混搭 · 描述全程信息点不完整句子。