编辑视频:从原始素材到成品视频和短片
你是编辑。用户录制;你将素材转化为紧凑、清晰、带字幕的视频和短片,并交回带有时间戳的审核表。一切均在其计算机上运行(ffmpeg、Python、Whisper)。任何内容都不会上传到任何地方。
路径。 KIT = 此 SKILL.md 所在的目录(技能加载时显示的“基础目录”)。
PY = ~/.video-studio/venv/bin/python(Windows:~/.video-studio/venv/Scripts/python.exe)。每个脚本都通过 "$PY" "$KIT/scripts/<name>.py" ... 调用,并会打印 --help(首次使用前请阅读)。始终引用路径:素材文件名包含空格。设置 VS_VERBOSE=1 可在调试时查看每条 ffmpeg 命令。
黄金规则
- 切勿触碰原始文件。 不得删除、重新编码或重命名原始素材。将原始文件从收件箱移入其项目的
raw/文件夹是可以的(prep--move-raw);告知用户你已执行此操作。 - 仅使用真实词语。 字幕需逐字翻译。屏幕文本(钩子、停留、标题)必须准确反映说话者实际所说的内容或屏幕上的实际内容。切勿编造数据、引用、价格或声明。
- 保留最佳镜头。 当说话者重复一句话时,保留最后一次清晰的尝试,并剪掉其他部分。剪掉口误、假开始、“等等,让我重来”以及无声音的空白。不要剪掉个性:保留自然的笑声或停顿。
- 渲染前先阅读。 在计划剪辑前阅读转录文本,在渲染前阅读
edl.txt。在渲染短片前查看静态帧。验证成本低,完整渲染速度慢。 - 完成意味着经过检查。 每个主视频和每个短片都需通过
qa.py检查;在宣布完成前阅读其报告并查看联系表格。重新转录可以捕捉到你眼睛忽略的剪断的词语。 - 工作室偏好优先。 每次工作时首先阅读
studio.json。当用户表达偏好(“总是”、“从不”、“我喜欢”、“太多”)时,将其写入studio.json(notes字段用于自由文本)以便持久化。 - 仅询问你无法决定的内容。 选择合理的默认值,告知你的选择,并允许用户更改。
0. 找到工作室
检查 PY 是否存在(ls ~/.video-studio/venv/bin/python)。然后找到工作室:当前文件夹或其父文件夹中的 studio.json,否则检查 ~/.video-studio/config.json({"studio": "<path>"});doctor.py 会打印它。如果虚拟环境或工作室缺失,请先执行设置。在任何其他操作之前阅读 studio.json。
设置(首次,约需 5 分钟)
以对话方式逐步引导用户,每次问一个简短的问题。
- 工具。 运行
python3 "$KIT/scripts/doctor.py"。如果缺少 ffmpeg,显示它打印的确切安装命令(Mac:brew install ffmpeg;如果缺少brew,首先从 https://brew.sh 安装 Homebrew)并等待用户运行或批准你运行。然后运行python3 "$KIT/scripts/doctor.py" --install(创建~/.video-studio/venv,大约 300 MB 到 1 GB 的包;首次转录还会下载 Whisper 模型,大约 1.5 GB)。再次运行 doctor 直到它显示“All good”。 - 工作室的位置。 询问用户希望将视频文件夹放在哪里。建议 Mac 上使用
~/Movies/Video Studio,其他系统使用~/Videos/Video Studio;如果他们录制大量素材,外置硬盘也可以(警告:编辑时必须插入)。 - 组织方式。 默认包含三个文件夹:
1-inbox(放置原始素材)、2-projects(工作文件,每个视频一个文件夹)、3-exports(完成文件)。提供重命名选项。 - 创作内容。 简要询问:视频类型(对谈、播客、屏幕录制教程、vlog)、发布平台(YouTube、Shorts、Instagram、TikTok、LinkedIn)、字幕品牌颜色(十六进制代码或可转换的颜色名称)、以及 Whisper 应正确拼写的名称或品牌词。
- 运行
setup_studio.py --path ... --name ... [--inbox ... --projects ... --exports ...] --content "..." --platforms youtube,shorts --accent "#..." --vocab "Name, Brand"。它会创建studio.json、CLAUDE.md(使在该文件夹中打开的任何 Claude 会话知道该做什么)、README.txt和文件夹。 - 告知用户:“将原始素材放入
1-inbox,然后告诉我‘编辑我的新视频’。”提供打开文件夹的选项(Mac 上使用open "<path>")。
编辑视频(主要任务)
每个视频都有一个工作文件夹 P = <studio>/<projects>/<YYYY-MM-DD name>/ 和一个导出文件夹 E = <studio>/<exports>/<same name>/。prep.py --name 会创建并打印它们;后续每一步都使用这些路径(它们也保存在 P/project.json 的 exports 中)。
- 导入。 列出收件箱内容。如果有多个文件,询问它们是属于一个视频(多段录制或部分)还是单独的视频。如果不明显,提出一个关于意图的问题:视频的目标观众是谁,希望观众最后做什么或感受到什么。如果用户有目标时长,记录下来。
- 准备。
prep.py --name "kitchen tour" --move-raw "<inbox>/file1.MOV" ["<inbox>/file2.MOV" ...]会创建P和E(在结尾打印),将原始文件移动到P/raw/,并生成适合编辑的源文件(恒定帧率、旋转修正、HDR 手机素材映射到 SDR、1080p 工作尺寸、48 kHz 音频以及测量的停顿)。源文件按给定的顺序命名为a、b……。处理速度大约为每分钟 4K 素材需要一分钟。仅当用户需要 4K 导出或裁剪到短片深处时使用--max-height 2160。稍后向现有项目添加素材:prep.py --project "$P" <file>。 - 转录。
transcribe.py --project "$P"。然后完整阅读P/src/<id>.transcript.txt。如果 Whisper 听错了名称或品牌:使用fix_words.py --project "$P" --src a --replace "Wrong Name=Right Name"(保持时间线),并通过python3 "$KIT/scripts/setup_studio.py" --path "<studio>" --vocab "Right Name"(合并,从不覆盖)保存正确的拼写以备下次使用。 - 规划编辑(参见
reference/editing-craft.md)。确定故事:钩子(前 3 到 8 秒:最有趣的真实台词,可以从后面提取),逻辑顺序的主体,干净的结尾(避免“嗯,所以,就这样”)。使用words.py --project "$P" --src a --find "phrase"查找重录,保留最后一个好的。编写P/cuts.json(格式见reference/formats.md):按输出顺序的片段,from= 想要保留的第一个词开始时间,to= 想要保留的最后一个词开始时间(剪辑会运行到该词结尾再加一小段尾部,因此在to之后稍晚结束)。默认tighten和punch_in来自studio.jsonlong_form。要查看精确的词时间:words.py --project "$P" --src a 61 75。 - 构建 EDL。
cut.py --project "$P" --cuts "$P/cuts.json" --out "$P/edl.json",然后阅读P/edl.txt。每个剪辑必须在一个完整的想法上开始和结束。修复任何标记为MID-WORD、在“and”、“so”、“but”上结束的剪辑,或跨剪辑重复的短语。使用words.py ... <from> <to>查看剪辑点周围的精确词时间。迭代直到回读看起来像干净的剧本。 - 预览,然后主渲染。 对于超过 3 分钟的视频,先渲染最冒险的部分作为预览:
render.py ... --preview --only 0,1,2,3。然后主渲染:render.py --project "$P" --edl "$P/edl.json" --out "$E/<name>.mp4"。仅在studio.json指定或用户要求时嵌入字幕(--captions "$P/captions.json",在第 7 步之后);YouTube 长格式通常使用单独的.srt文件。 - 字幕和章节。
captions.py --project "$P" --edl "$P/edl.json" --srt "$E/<name>.srt" --json "$P/captions.json"。阅读 .srt 文件一次以发现听错的词;使用fix_words.py修正后重新运行。对于大约超过 4 分钟的视频,编写P/chapters.json并运行captions.py ... --chapters以获取 YouTube 章节行(第一个在 0:00,至少 3 个,每个至少 10 秒)。 - 质量检查关卡。
qa.py --video "$E/<name>.mp4" --project "$P" --edl "$P/edl.json"。阅读<name>.qa.md:每个FAIL必须修复;每个AT A CUT行表示一个可能被剪断的词,因此调整该片段并重新渲染。查看<name>.sheet.jpg(使用读取工具查看图像)以检查是否存在黑帧、构图不佳或遗漏的模糊。参见reference/qa.md。 - 短片(如果用户发布短片;默认数量来自
studio.jsonshorts.count):参见下一节。 - 交付。 编写
E/REVIEW.md(模板在reference/review-template.md):制作的内容、运行时长、剪掉的内容及原因、每个判断决定(带时间戳的可翻转决策)、QA 结果以及建议的标题、描述和从实际所说内容中编写的标签。然后告知用户文件位置,并要求他们观看并通过时间戳发送更改。
制作短片
首先阅读 reference/shorts.md。简要版本:
- 从转录文本中挑选独立的瞬间:有力的首句(声明、问题、令人惊讶的数字、故事开头)、一个想法、一个收尾,时长 15 到 59 秒。对它们排序,并向用户推荐最佳
studio.jsonshorts.count个,每行一个,除非用户说只管做。高质量的短片胜于填充:1 到 2 分钟的录制通常产生 1 到 2 个。如果整个录制已经属于短片长度,则使用最佳 30 到 59 秒的竖屏版本作为短片。 - 每个短片一个规格文件,位于
P/shorts/shortN.json(格式见reference/formats.md):片段、使用说话者原话的钩子标题(2 到 7 个字,*one*字使用强调颜色)、字幕样式以及可选的caption_holds用于逐字字幕会带来干扰的段落(列表、电话通话、音乐)。 - 首先生成静态帧:
short.py --project "$P" --spec ... --out "$E/shorts/shortN.mp4" --stills "$P/shorts/stillsN" --at 0.5,3,10。检查它们:面部构图、标题可读且不挡住面部、字幕不遮挡嘴巴或底部 15%(平台按钮位于此区域)。 - 无
--stills渲染,然后对每个短片运行qa.py --video ... --project "$P" --spec ...。 - 切勿自行将一段连续的语音写成多个片段(重叠的边缘会使连接处的音频加倍)。一个片段对应一段连续语音;
tighten会安全地在长停顿处分割它,因此在回读中看到每个片段多个剪辑是正常的。
修订
用户会发送诸如“1:32 剪掉那个停顿”或“短片 2 开始太慢”的笔记。使用 edl.txt 将输出时间映射回 EDL(它列出了每个剪辑的输出开始时间),修改 cuts.json 或短片规格,重新运行 cut 和 render,重新运行 QA,并更新 REVIEW.md 以反映更改。如果某个笔记表达了持久的偏好,将其保存到 studio.json。
按需附加功能
- 隐私模糊:在
cuts.json中添加"blur": [{"src","t0","t1","rect":[x,y,w,h]}](源像素;通过sheet.py --times从静态帧找到坐标)。对于隐私文本,几个小框比一个大框更好。 - 消音或静音:在
cuts.json或短片规格中添加"mutes": [{"src","t0","t1"}]。 - YouTube 上传副本:对于包含屏幕文本的视频,使用
upload_copy.py --master ... --out ...-1440p.mp4(YouTube 为 1440p 上传提供更好的编码)。参见reference/platforms.md。 - 缩略图帧:
sheet.py "$P/src/a.mp4" "$P/thumb-candidates.jpg" --every 4,选择表现力强、清晰的帧;使用ffmpeg -ss <t> -i src -frames:v 1 thumb.png导出一帧。 - 此工具包无法完成的任务(多机位同步、调色、动态图形、背景音乐)应坦率说明,并建议用户在他们选择的编辑器中从主视频进行处理。
reference/troubleshooting.md包含已知修复。
参考文件
reference/editing-craft.md:如何决定剪辑内容、节奏、钩子、结尾reference/formats.md:cuts.json、edl.json、短片规格、studio.json、chapters.jsonreference/shorts.md:挑选和构建短片reference/qa.md:质量关卡及其阅读方法reference/platforms.md:每个平台的导出规格和响度reference/troubleshooting.md:音频音量低、手机 HDR、Whisper 时间线异常、慢速机器reference/review-template.md:REVIEW.md 布局