Communitygithub.com

专业视频剪辑

像专业剪辑师一样编辑视频,并从本地音效库添加音效。适用于剪辑、节奏调整、结构重组、审阅或导出视频时;选择剪切点时;添加、同步或混合音效(呼啸声、撞击声、上升音、UI音、环境音)时;或准备代理、调色、编解码器和交付时。

专业视频剪辑 是什么?

此技能提供一个完整的专业视频编辑工作流程,包含三个协同组件:编辑判断指南、基于命令行的时序编辑器 vedit,以及音效索引和放置工具。它允许开发者/AI 通过纯文本命令精确控制剪辑、调色、过渡、速度变化、遮罩、跟踪、绿幕和字幕,而无需图形界面。音效工具可索引本地 SFX 库,通过语义搜索查找音效,并通过帧精确的 cue 表将其渲染到视频上。该技能强调编辑原则(情感优先、分级剪切等),并包含 QC 脚本以确保音频响度和真峰值符合交付标准。它支持 Python 3.9+ 和 FFmpeg 5+,无需其他依赖。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Temka921/pro-video-editing/tree/HEAD

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

专业视频剪辑 是做什么的?

此技能包含三个协同工作的部分:

  1. 编辑判断力:剪什么、在哪里剪、为什么剪,使结果像是品味之人制作而非机器拼凑。
  2. 编辑器 (vedit):一个完全在命令行操作的轻量级时序编辑器。剪辑、标题、淡入淡出、音效和语音预设都通过它处理,用户也可以在浏览器中打开同一个项目。
  3. 音效工具:索引音效库、搜索音效,并将音效精准放置在特定帧上。

以下路径相对于本技能文件夹。工具需要 Python 3.9+ 和 FFmpeg 5+(无需安装其他内容)。

坦诚说明你能和不能做的事情

  • 你无法听到音频或观看视频。通过测量(转录、场景和静音检测、scripts/qc_audio.py)进行判断,并明确说明。渲染后,提供两到三个时间戳供用户实地检查。
  • 切勿发明音效文件名或 ID。仅使用 scripts/sfx_search.py 返回的 ID。
  • 如果 scripts/sfx_search.py --stats 显示没有目录存在,则表示音效库尚未建立。提供下面的单次设置并在下载前等待用户确认。如果用户拒绝或设置失败,仍进行编辑工作,并引导他们参考 references/sfx-library-setup.md。切勿自行下载任何其他音效库。

核心原则(精简版)

完整文本及示例:references/editorial-principles.md。在剪辑或审阅剪辑前请先阅读。

  1. 情感优先。 询问观众在每个时刻应感受什么。如果他们能始终感受到情感,剪辑就成功了。
  2. 剪辑层级。 当一次剪辑无法满足所有条件时,按以下列表从底部开始放弃:情感、故事、节奏、视线跟踪、平面性、空间连续性。永远不要用高优先级的项目换取低优先级的项目。
  3. 在想法结束时剪辑,即观众可能眨眼的那一刻。剪辑点应是一个可能的眨眼点。
  4. 以最少的素材做最多的事。 暗示优于明示。更少、更好的选择。不做剪辑也是一种决策。
  5. 只评判屏幕上呈现的内容。 忽略投入的努力、成本和意图。
  6. 像魔术师一样引导注意力:决定视线去向,并让下一个镜头与之匹配。
  7. 诊断后再修复。 问题往往比观众宣称感受到的位置更早出现。

工作流程

阶段操作内容参考文档
1. 收片确认交付物(平台、宽高比、帧率、时长)以及一句话概括的意图。technical-pipeline.md
2. 记录索引所有素材:带单词时间戳的转录、镜头类型、静音部分、最佳镜头。为每个设置选取一个代表性帧。editorial-principles.md
3. 粗剪使用最佳素材按顺序构建故事。先结构后打磨。editorial-principles.md
4. 精修应用剪辑层级和眨眼时间。第一次完整通过后重新审视之前舍弃的素材。editorial-principles.md
5. 音效定位、搜索、放置和混合音效。sfx-placement.md
6. 检查以观众身份完整观看一次。运行 QC 脚本。下方
7. 交付重新链接到全质量素材,匹配色彩/电平,先导出母版。technical-pipeline.md

交接工作时需说明:编辑目标、主要结构选择、删减内容及原因、已知折衷方案,以及值得尝试的替代方案。

编辑器 (vedit)

使用它实际进行编辑。先阅读 references/editor.md,其中包含所有命令、项目格式和操作方法。基本命令:

python3 editor/vedit.py new myfilm --size 1920x1080          # 新建项目文件夹(Windows 上若 python3 缺失,则使用 python)
python3 editor/vedit.py -p myfilm settings --preset vertical # 目标画布尺寸(Reels/TikTok/Shorts);也可使用 --lufs -14
python3 editor/vedit.py -p myfilm analyze clip.mp4           # 检测静音和场景变化,用于选择剪辑点
python3 editor/vedit.py -p myfilm import clip.mp4            # 打印资产 ID,如 a1
python3 editor/vedit.py -p myfilm add a1 --in 12.5 --dur 8   # 将 8 秒片段放入时间线
python3 editor/vedit.py -p myfilm grade c1 --look cinematic  # 调色;也可使用 --brightness --contrast --saturation --temperature --lut FILE
python3 editor/vedit.py -p myfilm key c1 scale --at 0 --value 1; python3 editor/vedit.py -p myfilm key c1 scale --at 8 --value 1.15 --ease inout   # 缓慢推镜头
python3 editor/vedit.py -p myfilm transition c1 c2 --type dissolve --dur 0.5
python3 editor/vedit.py -p myfilm key c1 speed --at 0 --value 1   # 速度曲线:在 `speed` 上添加更多关键帧(片段自身音频会被静音);也可使用:reverse c1, freeze c1 --at 4 --dur 2
python3 editor/vedit.py -p myfilm tracker add c1 --at 4 --x 0.6 --y 0.3   # 跟踪一个点;然后:mask c1 --effect blur, follow c1 m1 t1(模糊人脸)或 attach c2 t1(标题跟随运动)
python3 editor/vedit.py -p myfilm stabilize c1               # 平滑相机抖动(需要 FFmpeg 支持 libvidstab)
python3 editor/vedit.py -p myfilm captions subtitles.srt     # 每个字幕对应一个文字片段
python3 editor/vedit.py -p myfilm sfx a3f9c012 --at 8.0      # 音效 ID 来自 scripts/sfx_search.py;音效命中点落在 8.0 秒
python3 editor/vedit.py -p myfilm set c1 preset="voice enhancer"
python3 editor/vedit.py -p myfilm check                      # 修复它报告的每个错误
python3 editor/vedit.py -p myfilm render --preview           # 快速渲染;然后使用 `frame --at T` 查看 PNG 图片
python3 editor/vedit.py -p myfilm measure --at 4             # 亮度/色彩数值,用于判断曝光和调色
python3 editor/vedit.py -p myfilm serve                      # 让用户在浏览器中打开并调整项目
  • 你拥有完全控制权:每条命令输出 JSON,错误信息清晰,batch 可将多个编辑操作作为一个更改应用,undo 可撤销一次。关键帧可驱动缩放、位置、旋转、透明度、颜色、音量和速度;editor.md 列出了其余功能(遮罩、跟踪、绿幕、裁切、翻转、轨道静音和隐藏、画布预设)。
  • 使用 frame --at T 查看画面而非猜测,使用 measure 判断色彩,通过测量判断音频,而非声称它听起来很好。
  • 保持克制:温和的风格、一种过渡效果、少量缓慢移动。如果去掉某个效果没有任何损失,就删掉它。
  • 跟踪和遮罩通过测量而非肉眼判断:在 tracker add 后,检查 found 并使用 frame --at T 查看帧。跟踪适用于尺寸稳定、有纹理的刚性物体,会丢失转向或隐藏的目标。
  • 用户可能在您工作时于浏览器中更改时间线。在他们告知后,在编辑前运行 show。
  • 语音预设(phone call, deeper voice, robot voice 等)来自捆绑的 Premiere .prfpset 文件,也可通过 presets import FILE.prfpset 从其他文件中提取。它们近似 Premiere 的效果;参见 references/voice-presets.md。
  • 如果未设置音效库,sfx 命令会失败并提示清晰的信息;请在下方提供 SFX 设置选项。

SFX 工具包

所有脚本都支持 --help。它们仅使用标准库和 FFmpeg。

一次性设置。 本技能不包含任何音频文件,因为音效的许可证禁止重新分发。默认音效库是免费的 Sonniss GDC 2026 Game Audio Bundle,从 Sonniss 服务器下载。运行前,告知用户大小(第 1 部分 1.3 GB,包含 82 个音效;全部 5 部分共 7.5 GB,包含 347 个音效)和许可证(一句话:免费用于个人和商业媒体项目,无需署名;禁止转售或重新分发音效;禁止用于 AI 训练),并获取同意:

python3 scripts/setup_library.py --accept-license               # 第 1 部分
python3 scripts/setup_library.py --accept-license --parts all   # 全部

它会将 zip 文件保存到此技能内的 library/ 文件夹,支持断点续传,重复利用已下载部分,然后构建目录。如果找不到 python3,Windows 上使用 python。

要使用用户自己的音效(或额外使用),直接进行索引(参见 references/sfx-library-setup.md):

python3 scripts/build_catalog.py /path/to/sounds.zip        # 或一个文件夹,或一个包含 zip 文件的文件夹

无论哪种方式,结果都是一个仅文本的目录文件:~/.pro-video-editing/catalog.json。它不包含任何音频。

每个项目:

python3 scripts/sfx_search.py --stats                       # 查看可用内容
python3 scripts/sfx_search.py "fast airy whoosh" --max-dur 1.5 --limit 8
python3 scripts/sfx_search.py "button click" --exclude ID1,ID2    # 避免重复使用同一取音

python3 scripts/render_mix.py in.mp4 cues.json --check      # 检查 cue 表
python3 scripts/render_mix.py in.mp4 cues.json -o out.mp4   # 渲染
python3 scripts/render_mix.py in.mp4 cues.json --sfx-only fx.wav   # 导出音效轨用于 DAW 或调色师

python3 scripts/qc_audio.py out.mp4 --target -14            # 响度和真峰值检查

搜索输出列:id,时长,类别,peak@(音效击中点),标签,文件名。使用 peak@ 来理解音效将与剪辑何处对齐。

Cue 表

{
  "default_gain_db": -9,
  "duck": true,
  "humanize": true,
  "cues": [
    {"id": "a3f9c012", "at": 2.50, "sync": "peak", "note": "into the title card 的呼啸声"},
    {"id": "19be4d70", "at": 2.50, "gain_db": -12, "note": "其下的柔和层"}
  ]
}
  • at 是音效的同步点必须落在的视频时间。at_frame 则按帧号放置。
  • sync:peak(默认)将最响亮时刻对齐,onset 对齐起始攻击,start 对齐第一个样本。工具会自动计算开始时间,因此即使音效在剪辑开始前播放,命中点也能帧精确。
  • 每个 cue 可选参数:gain_db, fade_in, fade_out, trim_start, duration, pitch_semitones(±12 半音内),note。
  • duck 会降低音效电平以突出原始音频(对话)。humanize 会在相同音效重复时添加微小的增益和音调变化。
  • 在 note 中写明原因。这使 cue 表可审查,也有助于后续编辑。

--check 会报告未知 ID、超出视频范围的时间、重复取音、叠层过多以及过于繁忙的表。在渲染前修复它所报告的所有问题。

SFX 规则

完整指南及定位方法:references/sfx-placement.md。

  • 定位前先有理由。 每个音效都必须服务于情感或故事。如果去掉它没有任何损失,就删掉。
  • 将击中点对准剪辑或运动,而不是接近它。对于呼啸声和撞击声使用 sync: peak。
  • 轻量叠层:同一时刻最多三个音效(例如撞击、低频、尾部)。
  • 变化取音。 绝不要在连续两次中使用同一个音效;再次搜索时使用 --exclude。
  • 留出静音。 击中点前的间隙能让击中效果更强烈。
  • 保持对白清晰。 在有对话时保持 duck 开启,并在对话下将默认增益保持在 -9 dB 或更低。
  • 密度:大约每 10 秒 12 个 cue 就已经非常密集。平静的内容需要少得多。

验证检查清单

在宣布剪辑完成之前:

  • 每次剪辑都通过了层级检查,且情感优先
  • 不存在仅为增加节奏而进行的剪辑;暂停是经过深思熟虑的
  • 剪辑点位于想法边界,而非想法中间
  • render_mix.py --check 报告无错误,且警告已解决或给出合理解释
  • qc_audio.py 显示真峰值 ≤ -1 dBTP,且响度接近目标值
  • 输出时长、帧尺寸、帧率和音频布局符合交付规范
  • 已向用户提供具体的时间戳以供监听

参考索引

  • references/editorial-principles.md:哲学、剪辑层级、眨眼时机、对话、节奏、问题诊断
  • references/editor.md:编辑器命令、关键帧、调色、过渡、字幕、交付设置、项目格式、AI 工作方法、浏览器编辑器
  • references/voice-presets.md:语音预设、提取 Premiere .prfpset 文件、精度限制
  • references/sfx-placement.md:定位方法、按用途划分的音效指南、电平、叠层、闪避
  • references/sfx-library-setup.md:获取音效库、构建目录、管理标签、许可证
  • references/technical-pipeline.md:媒体管理、代理、色彩、编解码器、互换、导出

相关技能