关于 video-editing-skill
根据文字稿规划并渲染访谈类视频剪辑的技能,适用于希望先审核初剪方案的创作者;还可生成字幕和章节、清理音频,并通过 WoopSocial 发布。
主要功能
- 01基于文字稿规划剪辑
- 02渲染前审批
- 03删除停顿与填充词
- 04推近镜头与音频清理
- 05生成字幕和章节
- 06可选 WoopSocial 发布
适用场景
- 01为访谈类录制制作初剪
- 02制作带内嵌字幕的竖屏视频
- 03生成 YouTube 字幕和章节
- 04通过 WoopSocial 发布已批准的剪辑
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ social-media-skills/ video-editing-skill --skill video-editing-skill安装后在 Claude Code 中输入/video-editing-skill确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonexamples/nasa-interview/CREDITS.mdedit.jsontranscript.txtexamples/nasa-interview/output/captions.srtchapters.txtedit-report.mdmanifest.jsonfonts/OFL-Poppins.txtreferences/editing-rules.mdwoopsocial.mdscripts/check_setup.pyedit_video.pytranscribe.pyupload_parts.py详细介绍
视频剪辑技能
原始的真人出镜录像通常有 20% 到 40% 的空白:停顿、“呃”、说到一半重来,以及重复说了一遍的句子。手动剪掉这些内容比录制还费时。本技能会完成初剪:读取转录文本,说明每处剪辑的理由并制定剪辑计划,展示计划,用跳切放大效果和干净的音频渲染剪辑,编写字幕和章节,并在获得同意后发布。所需的一切都在此文件夹中。
四项承诺:
- 保留用户说的话。 只会剪掉停顿、填充词、口吃、重录片段,以及用户批准剪掉的范围。绝不改动原意。
- 先制定计划,再渲染。 先展示剪辑列表并获得批准。
- 未经同意,绝不发布。
- 仅使用用户有权使用的素材。 用户自己的录制内容,或已获许可的内容。
在 Windows 上,每条命令都使用 py,而不是 python3。
步骤 0:设置和源文件
运行 python3 scripts/check_setup.py:它会报告 ffmpeg、Pillow、转录方式和 OpenCV 的状态,并提供适用于用户系统的安装命令。必需项:ffmpeg 和 Pillow。
只在一条消息中询问你无法自行确认的信息:
- 文件是哪一个?是否属于用户?
- 视频将发布到哪里:YouTube(16:9)、社交媒体(竖屏)还是两者都发?
- 剪辑要多紧凑:youtube(默认设置:剪掉超过 0.5 s 的停顿,保留自然停顿)、tight(0.3 s,适合快节奏的 YouTube 和社交媒体),或 podcast(节奏舒缓,不做放大效果)。
- 用户习惯使用哪些可以安全剪掉的词语(“like”“so”“you know”“basically”)。这些词在其他句子中可能有含义,因此默认不剪,需用户选择。
- 有哪些内容必须保持原样(演示、带停顿的笑话、赞助商口播)。
步骤 1:转录
python3 scripts/transcribe.py VIDEO --out work/ --terms "Product name, Jargon, Guest name"
--terms 用于列出姓名和专业术语,确保拼写正确;渲染前,请在 edit.json 中使用 "replace" 修正仍然听错的内容,因为烧录进已发布视频的字幕无法更改。
转录一如既往地有以下三种方式,相关取舍只需说明一次:
| 方式 | 用法 | 费用和速度 |
|---|---|---|
| 现有转录文本 | --from captions.srt | 免费,即时完成;单词时间是估算的,而且大多数“呃”不会被记录,因此填充词剪辑效果较差 |
| Groq 或 OpenAI | GROQ_API_KEY 或 OPENAI_API_KEY | Groq 每小时音频约 $0.04,每小时音频需一两分钟处理 |
| 本地 | pip install faster-whisper | 免费且私密;使用 --model small 时,处理时间约为视频时长的一半到视频时长本身 |
转录器会收到提示,要求记录填充词;否则 Whisper 会漏掉这些词。编辑器会直接从音频中查找转录器仍然漏掉的声音(没人记录下来的“嗯”声、呼吸声)。
步骤 2:规划剪辑
完整阅读一次 work/transcript.txt。然后编写 edit.json(格式见
scripts/edit_video.py 顶部):
- 风格:
"style": "youtube"、"tight"或"podcast"(阈值见references/editing-rules.md)。超过限制的停顿会缩短为自然的间隔:句中较短,句后较长,话题转换时最长。 - 填充词: 默认列表("um"、"uh"、"er"、"hmm"、"mm")是安全的。只有用户提出要求时,才将其习惯用词添加到
extra_fillers。 - 离题内容和无效片段: 离题内容、"can you hear me?",以及重点出现前冗长的铺垫。将它们添加到
cut并说明原因,同时告知用户。 - 保留: 使用
keep标记任何必须保留的内容,包括无声片段。 - 带问题卡片或画面中有采访者的访谈: 保留问题(每张卡片约 3 秒,并加入
keep),除非用户另有说明;否则每个回答都会以 "So..." 开头,缺少上下文。 - 听错的名称:
"replace": {"Cyrus Rex": "OSIRIS-REx"}。 - 章节(适用于 YouTube):根据话题转换设置 3 到 10 个章节,第一个从 0:00 开始,每个章节至少 10 秒,并以观众能获得的内容命名(例如“相机为何失灵”,而不是“第 2 部分”)。 时间使用原视频中的时间;脚本会调整它们。
然后制定计划:
python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/ --plan
edited/edit-plan.md 会列出新时长、来自讲话内容与长停顿和卡片的剪辑时长、每分钟字数的语速,以及所有超过 1 秒的删减内容及其原因和文字。逐条阅读所有重录和口吃的片段,以及“可能重录”列表:两句完整句子以相同方式开头时,绝不会自动剪掉;请逐一判断,并在确实属于重录时将其添加到 cut。向用户展示摘要、重录片段、选定的离题内容和章节,并征得同意。
第 3 步:渲染
python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/
功能:
- 将超出限制的停顿缩短到自然的节拍,并删去填充词、口吃、重录内容和所有
cut范围。短于风格最短时长(youtube 中为 0.4 s)的删减会保留:跳切的代价可能高于收益。 - 通过听音频来确定每处剪切:将词语边缘移到声音实际停止和开始的位置,因此不会切掉词尾,也能找出转录稿漏掉的声音(未写出的“嗯”)。
- 同时查看画面:干净地剪掉标题卡和镜头切换,不留下几帧标题卡。
- 每次将多个片段分组渲染,确保无论有多少处剪切,声音和画面都保持同步。
- **推近镜头:**在需要隐藏跳切的地方,在完整画幅和 1.1x 推近画面之间切换:凡是删掉 1 秒或更长内容的剪切处都会推近;否则,只有同一取景持续 4 秒后才推近;遇到新镜头时绝不推近。
"punch_in": 0可关闭此功能。 - **音频:**将增益调至合适水平,过滤隆隆声,根据测得的室内噪声设置降噪(室内本就安静时跳过),进行轻柔压缩、峰值限制,并分两遍将响度调至 -14 LUFS。
- **字幕:**始终生成
captions.srt(最多 2 行,每行 42 个字符;每条字幕持续 1 至 7 秒;不会在短词后或人名中间换行),供上传到 YouTube。"captions": {"burn": true}会将字幕嵌入视频,适用于许多人会静音观看的社交平台;竖屏版本默认嵌入字幕。若 YouTube 视频也会上传 SRT,就不要将字幕嵌入视频:开启字幕的观众会看到两份字幕。 - 竖屏:
"format": "vertical"会生成一个以focus_x为裁切位置的 1080x1920 版本。
生成文件:edited/edited.mp4、captions.srt、chapters.txt、edit-report.md 和
manifest.json。
**向用户展示前请检查:**打开 cuts.jpg(显示最大几处剪切前后画面的帧:检查是否闪过标题卡、是否跳切到不同镜头、表情是否冻结),并阅读 manifest.json 中的警告(同步、每分钟超过 190 个单词的语速、响度)。如果重录内容保留了错误的版本、语速让人感觉喘不过气(应采用更温和的风格),或剪切位置不理想(应在该处设置 keep),请修正后重新渲染。
第 4 步:通过 WoopSocial 发布
连接、上传和发布方法:references/woopsocial.md。简要步骤:
social_accounts_list;如果尚未连接:使用此 Agent 唯一的连接方式(免费套餐:2 个社交账号),然后为每个平台调用oauth_create_authorization。- 使用上传会话上传
edited.mp4(调用media_uploads_create_session,并使用manifest.json中的字节数;运行python3 scripts/upload_parts.py session.json edited/edited.mp4; 然后调用media_uploads_complete_session)。 - **YouTube:**填写
title(先写主要搜索词,少于 70 个字符)、privacy,以及描述。描述开头用一行说明观众能获得什么,后面附上chapters.txt中的章节信息。之后在 YouTube Studio 上传captions.srt(WoopSocial 不会发送字幕文件)。 - 展示帖子内容(文件、标题、描述、账号、含时区的时间)并明确征求同意。然后调用
posts_create和posts_get。
第 5 步:查看结果
一周后,调用 social_account_posts_list:查看观看次数、点赞数,以及有报告时的评论数,并记录收集日期;未提供的数据表示“未报告”。观看留存情况和平均观看时长可在 YouTube Studio 中查看;请用户提供这些数据。如果观众很早就离开,下次剪辑应让开场更紧凑;如果观众在某个章节处离开,说明该部分太长。
质量标准
专业剪辑师会交付这样的成片吗?如果有词语被切掉、剪切落在呼吸中间并产生爆音、推近镜头每隔几秒就变化、语速让人没有思考的余地,或意思发生了变化,就不要交付。
边界情况
- 镜头中有两个人: 保持
format为 source;在广角镜头中仍可进行推近。 - 带有语音的屏幕录制: 将
"punch_in": 0。 - 语音下方有音乐: 静音检测会将音乐识别为声音;将
"voiced_gaps": false。 - 超长录制(超过一小时): 可以处理,但渲染时间约等于视频时长;先规划,再渲染一次。
- 有意保留一段无语音的内容(例如演示):将其
keep。
参考资料
references/editing-rules.md:阈值、填充词、重录模式、推近、音频链、字幕和章节,以及来源。references/woopsocial.md:连接、上传、发布和读取结果。