把一条已完成的口播视频交给 Popto,最容易踩的坑是顺序:拆解跑完直接进生成,成片往往贴着原片的段落走,听感像在读同一篇稿子。可用的顺序只有一条——先跑完拆解,中间做一次人工改写,再把改写稿按段贴进生成。真正的判断点不在“有没有用数字人”,而在拆解还原出的段落骨架,有没有在改写这一步被换掉内容。
如果目标是让数字人成片只保留原片结构、不保留原片内容,顺序应是拆解 → 人工改写 → 生成,三步不能合并。拆解只负责把原片还原成段落与时间轴,改写负责在不改段落数量与顺序的前提下替换论据、案例、结论,生成只负责按段贴稿和设置停顿。任何一步的产出物缺失或段落数对不上,建议停在上一步。具体字段名以 Popto 页面实际显示项为准。
用一条已完成的口播视频走一遍拆解
先不要急着看数字人页面,先摸清拆解这一步到底输出什么:是分段文案、是纯文案,还是带时间轴的段落数组。做法是拿一条现成口播视频跑一次拆解,把输出文件落在项目目录里,然后逐层看字段名,而不是凭名字猜能力。
如果拆解输出是 JSON,可以用下面的命令把实际字段名和层级打出来;如果输出是纯文案或页面表格,就把同样的信息手抄成一份字段清单,不确定的字段先标注为待确认,不做能力推断。
# 顶层有哪些字段
jq 'keys' 01_extract/raw_output.json
# 段落级有哪些字段
jq '.segments[0] | keys' 01_extract/raw_output.json
# 一共拆出多少段
jq '.segments | length' 01_extract/raw_output.json
把结果整理成一张小表,例如:字段名 / 所在层级 / 是否可直接编辑 / 备注。常见会出现在段落级的字段通常与序号、文本、起止时间有关,但名称各版本可能不同,凡是没在输出里亲眼看到的名字,一律记为待确认。这一步的产出物建议存成 01_extract/fields.txt,后面改写和比对都以它为准。
人工把拆解结果改写成自己的口播稿
拆解结果不能直接进生成,这是分工里被跳过最多的一步。改写要守住骨架、换掉内容,规则可以先定死三条:段落数量与顺序不动;只替换论据、案例、结论;句长句子结构可以随意改,但段落边界不合并、不拆分。
- 逐段编号写入
02_rewrite/script_v1.md,编号与拆解输出的段落序号一一对应。 - 每段只做替换,不做增删;确实需要删的段落,先在文件里保留编号并写“待删-原因”,等生成前统一确认。
- 改写幅度大的段落(例如只留下过渡句、论据全换)在段末标 [重写],方便合成后重点比对。
验证方式很直接:把 script_v1.md 的段落数和拆解输出的段落数并排数一遍,数量不一致就先回改,不要带进下一步。风险边界也要说清楚——这一步只保证结构与原片不同、内容是你自己的,不保证成片一定过原创判定,具体判定标准需结合发布平台确认。
把改写稿按段贴进数字人生成流程
进入生成环节时,要确认三件事怎么对应:段落顺序、分段边界、语气或停顿设置。段落顺序就是 script_v1.md 的编号顺序;分段边界决定数字人在哪里换气、哪里停顿;语气与停顿通常落在音色、语速、段间停顿这类页面项上。
下面是一个对齐用的通用骨架,只说明字段之间的对应关系,不是某个接口的官方格式;实际提交时以 Popto 页面上的输入项和参数项为准,字段名对不上就按页面实际项改。
{
"segments": [
{ "index": 1, "text": "第一段改写稿内容", "pause_after_ms": 400 },
{ "index": 2, "text": "第二段改写稿内容", "pause_after_ms": 300 }
],
"voice": "<页面里选择的音色项>",
"speed": "<页面里的语速项>"
}
如果页面只提供整篇文本输入,没有分段项,就在段落之间保留一个空行,并用句末标点控制停顿,同时把改写稿里的段落编号删掉再粘贴,避免数字人把编号读出来。生成时用到的音色、语速、停顿等设置,建议截图或抄成 03_generate/settings.txt,后面比对时才有依据。
合成后逐段对比改写稿与原片结构
合成完不要只看整片感觉,要按段比对。检查项固定四项:段落数是否与改写稿一致、顺序是否一致、各段时长占比是否与原片相差不大、是否仍有高度相似的句子。前两项靠人工数,时长只能从拆解输出里的时间轴或人工粗估得到,没有可靠时间轴时不要编百分比。
# 整片时长(只作参考,不能代表单段时长)
ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 03_generate/final.mp4
相似句的判定可以先用保守口径:连续与原片相同的一串字,且不是行业术语或不可避免的固定说法,就标出来回改。把结果写进 04_check/compare.md,格式为段落号 + 检查项 + 处理动作(通过 / 回改写)。只要还有标为“回改写”的段落,就回到第二步,而不是在生成参数上继续调。
把三步固化成固定操作顺序
把顺序写成清单,下一次生产就不用临时决定先做哪一步。目录按步骤分,产出物按版本号递增,改动只新增文件、不覆盖旧文件,这样每一步都能倒查。
project/<项目名>/
01_extract/ # 拆解原始输出、fields.txt(字段清单)
02_rewrite/ # script_v1.md、script_v2.md(按段编号)
03_generate/ # settings.txt(音色/语速/停顿)、final.mp4
04_check/ # compare.md(逐段比对表)
- 拆解:输入原片,输出段落结构与字段清单;产出物落
01_extract/。 - 改写:输入段落结构,输出按段编号的改写稿;产出物落
02_rewrite/。 - 生成:输入改写稿与生成设置,输出成片与设置记录;产出物落
03_generate/。
对应的门禁也一并写死:拆解输出里看不到段落边界,就不进改写;改写稿段落数与拆解输出对不上,就不进生成;生成环节没有留下设置记录,就不进比对;比对里还有高度相似段落,就退回改写。这三条门禁比任何参数调优都更能决定成片是否像在复读原片。