lhg-ve-edit:EDL 剪辑流水线
目标:把清洗后的文字稿变成"机器可执行、人类可复核"的剪辑决策(EDL),再渲染成片。 核心纪律:先写 EDL,再渲染——EDL 是剪辑师的施工图,没有施工图就动工的是野路子。
1. 何时使用
- 转录清洗完成(lhg-ve-transcript 的对照表已确认)→ 进本 skill
- 用户问"这段到底该剪掉哪些" → 用第 3 节决策树
- 渲染后发现切点爆音/字幕错位 → 查第 4、5 节
- 封面不知道怎么做 → 第 7 节
2. EDL 规范
EDL(Edit Decision List)是一个 JSON 文件,描述"素材的哪些时间段要、哪些不要、怎么接"。
{
"source": "raw.mp4",
"source_duration_sec": 300.5,
"target_sec": 60,
"segments": [
{"start": 5.0, "end": 12.0, "action": "keep",
"text": "大家好我是老王", "fade_ms": 30},
{"start": 12.0, "end": 14.5, "action": "cut",
"reason": "口头禅:那个那个"},
{"start": 14.5, "end": 20.0, "action": "keep",
"text": "三个让完播率翻倍的技巧", "fade_ms": 30}
]
}
字段说明:
action:keep(保留)/cut(删除)/speed(变速,需配rate)fade_ms: 切点处音频淡变时长,keep 段必填,默认 30reason: cut 段必填,写清删除原因(口头禅/气口/废话/跑题/杂音)audio: 可选,silence表示该段是静音(用于检测残留大静音)
EDL 有效性(渲染前 hook 自动校验,见 hooks 说明):
- JSON 合法,segments 非空
- 每段
start < end,且在素材时长范围内 - 段与段之间不重叠(允许首尾相接)
- keep 段必须带
fade_ms
3. 剪辑决策树:删什么,留什么
删(进 cut):
- 口头禅与填充词(见 lhg-ve-transcript 口头禅库)——一级词全删
- 气口与长停顿——忘词型停顿全删;换气气口在快节奏片子里删
- 废话:重复说过的意思("这个很重要,真的很重要"留一次)
- 跑题:偏离本期主题的闲聊(除非是有人设魅力的梗)
- 杂音:咳嗽、喷麦、环境突响
留(进 keep):
- 钩子:前 5 秒一个字不许动(除非钩子本身要重写——那是脚本问题,打回 lhg-ve-script)
- 金句:观点最锋利的一句话,前后各留 0.5 秒呼吸感
- 案例与数字:具体例子、具体数字是记忆点
- 转折词:"但""关键是""最狠的是"——它们是节奏的钉子
节奏铁律:
- 60 秒口播,平均每 3–5 秒一个切点/画面变化——没有变化的段落观众会划走
- 语速:中文口播 220–260 字/分钟是舒适区;超过 300 字/分钟像吵架,低于 180 像催眠
- 变速(
speed)只用于"不得不留但太长"的段落,加速上限 1.25×,再快就失真
4. 切点音频处理
切点爆音是小白剪辑最常见的翻车:两个片段硬接,波形不连续,"啪"一声。
- 每个 keep 段首尾加 30ms 淡入淡出(
afade),这是本插件的默认值 - 对白类口播 30ms 足够;音乐垫底的 vlog 可放到 100ms
- 检查方法:渲染后戴耳机听每个切点前后 1 秒,有"咔哒"声就加长淡变重渲
5. ffmpeg 渲染命令模板
以下命令按顺序执行(<...> 为占位符,按实际路径替换):
# 1) 按 EDL 剪辑拼接(示例:两段 keep,先分别截取再 concat)
ffmpeg -i <raw.mp4> -ss 5.0 -to 12.0 -c:v libx264 -c:a aac seg1.mp4
ffmpeg -i <raw.mp4> -ss 14.5 -to 20.0 -c:v libx264 -c:a aac seg2.mp4
printf "file 'seg1.mp4'\nfile 'seg2.mp4'\n" > list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy cut.mp4
# 2) 切点淡变(对每段 keep 首尾 30ms;也可用 acrossfade 做段间交叉淡化)
ffmpeg -i cut.mp4 -af "afade=t=in:st=0:d=0.03,afade=t=out:st=<段尾-0.03>:d=0.03" faded.mp4
# 3) 烧字幕(样式见第 6 节,ass 文件由字幕样式生成)
ffmpeg -i faded.mp4 -vf "ass=<styled.ass>" subtitled.mp4
# 4) 响度归一到 -14 LUFS(短视频平台标准,防忽大忽小)
ffmpeg -i subtitled.mp4 -af loudnorm=I=-14:TP=-1.5:LRA=11 -c:v copy final.mp4
耗时诚实说明:1080×1920、60 秒成片,普通笔记本渲染约 1–3 分钟;10 分钟以上长素材按比例放大,重编码画质越高越慢。动手前先告诉用户"大概要 X 分钟",别让用户干等。
6. 字幕样式规范
- 位置:底部,距离下边缘 ≥12% 画面高度(防被平台 UI 遮挡)
- 单行 ≤18 字,停留 0.6–8 秒;双语/方言注释用第二行小字
- 样式:白色字 + 黑色描边(
BorderStyle=1, Outline=2),字号为画面高度的 4–5% - 关键词高亮:钩子词、金句词用黄色标出——但一屏不超过 3 个黄词,多了等于没标
- 禁止:花哨字体(艺术字体先保证可读)、字幕压人脸、字幕超出安全区
7. 封面规范
- 尺寸:1080×1920(竖屏),长宽比严格 9:16
- 标题:≤3 行,每行 ≤8 字,字号足够"缩略图大小可读"
- 人物:有表现力的人脸帧优先(惊讶/大笑/严肃),人脸占画面 1/3 以上
- 背景:干净,不与标题抢注意力;可加轻微暗角突出文字
- 文件 ≤2MB(部分平台上传限制)
8. 自检重渲染流程
渲染完不许直接交付,走一遍:
- 看一遍成片(1× 速度,不许拖进度条跳看)
- 听切点:每个剪辑点前后 1 秒,戴耳机
- 对字幕:字幕时间轴与口型是否同步(误差 >0.3 秒重调)
- 查时长:成片时长与目标偏差 ≤10%
- 跑
/video-audit:确定性脚本 + 人工评审清单
发现问题的修复顺序:先修 EDL(源头),再重渲染——不许在 final.mp4 上打补丁(比如单独改字幕文件而不重烧),补丁式修复会让 EDL 与成片不一致。
9. 反模式
- ❌ 没有 EDL 直接渲染——返工时你连"当时为什么剪掉那段"都想不起来
- ❌ 切点不加淡变——"啪啪"的爆音是廉价感的最大来源
- ❌ 在 final.mp4 上打补丁——EDL 与成片不一致,后患无穷
- ❌ 变速超过 1.25×——声音失真,观众听得出
- ❌ 字幕压人脸 / 超出安全区——平台 UI 会再压一层,等于白做
- ❌ 渲染前不预估耗时——用户干等 20 分钟会骂人
10. 自检与反馈
每次执行完本 skill,做一次轻量自检:
- EDL 写了吗?用户确认了吗?→ 没确认不许渲染
- 渲染前 hook 放行了吗?→ 被拦截就修 EDL,不要关 hook
- 四件套齐了吗?(final.mp4 + 封面 + EDL + 清洗对照表)
- 自己看了一遍成片吗?→ 没看不许交付
标准冒烟用例:对插件自带 fixtures/ 跑 video_audit.py,确认坏 fixture 的 EDL/时长/封面埋点全命中(见仓库根 smoke_test.py)。
反馈渠道:以 [QC] <一句话问题> 为标题提交到 https://github.com/lhg-plugs/lhg-video-edit/issues,正文写清"输入 → 错误输出 → 期望输出"。ffmpeg 模板在新版本跑不通请附版本号。
出品:刘洪光
本 skill 由真人出镜 IP「刘洪光」(安徽合肥)出品,归属 lhg-skills。
- GitHub 主页:https://github.com/lhg-skills —— 全部 skill 开源在此,欢迎 star
- 视频号:搜「刘洪光实名上网」
- 微信:lhgsmsw