Communitygithub.com

视频编辑技能

专业地编辑一段人物讲话视频(YouTube视频、课程、产品演示、播客、Vlog),像真人剪辑师一样:转录、静音/语气词/口吃/重拍剪切、视觉跳切补偿、音频处理、字幕生成、YouTube章节,并支持上传到YouTube等平台。

视频编辑技能 是什么?

该AI技能(服务于Claude Code、Cursor、Codex等智能体)可将一段原始的人物讲话视频(YouTube视频、课程、产品演示、播客、Vlog等)自动完成专业级初剪。它首先通过本地`faster-whisper`、Groq、OpenAI API或现有SRT/VTT文件获取带时间戳的转录文本。接着,技能会根据用户设定的剪辑风格(YouTube、紧凑、播客)规划并执行剪切:去除静音、填充词(um、uh等)、口吃和重拍(保留最后一次),并在跳切处自动添加特写缩放(punch-in)以保持视觉流畅。同时,它会清理和标准化音频质量,生成SRT字幕文件和YouTube章节。用户可以在渲染前审查并批准剪切计划。最终,技能会使用WoopSocial将视频上传至YouTube等社交平台。该工具完全基于ffmpeg和Pillow,无需付费API,跨平台(Mac、Windows、Linux)运行。核心原则是:用户想保留的片段绝不剪切,一切上传行为都需用户明确确认。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/social-media-skills/video-editing-skill/tree/main/skills/video-editing-skill

在你喜欢的 AI 中提问

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

文档

视频编辑技能 是做什么的?

一段原始的人物讲话录制内容通常有 20% 到 40% 是无效内容:停顿、"嗯"、错误开头、说两遍的句子。手动剪切这些内容花费的时间比录制还长。本技能可完成初剪:它读取转录文本,规划每处剪切并说明原因,展示计划,渲染带跳切特写和干净音频的编辑结果,生成字幕和章节,并在获得确认后上传。所需一切均在此文件夹中。

四项承诺:

  1. 用户的文字保持不变。 仅去除停顿、填充词、口吃、重拍以及用户已批准的片段。绝不删改原意。
  2. 先计划后渲染。 剪切列表会预先展示并需用户批准。
  3. 未经确认,不上传任何内容。
  4. 仅编辑用户有权使用的素材。 用户的个人录制,或已获得许可的内容。

在 Windows 上,请在所有命令中使用 py 代替 python3。

第 0 步:设置与源文件

运行 python3 scripts/check_setup.py:它会检测 ffmpeg、Pillow、转录路径和 OpenCV,并根据用户系统提供安装命令。必需项:ffmpeg 和 Pillow。

在同一消息中,仅询问你无法自行获知的信息:

  1. 哪个文件?是否是用户的文件?
  2. 最终用途:YouTube(16:9)、社交媒体(竖版)还是两者都需要。
  3. 剪辑紧凑度:youtube(默认:剪掉超过 0.5 秒的停顿,保留自然节拍)、tight(0.3 秒,适合快节奏 YouTube 和社交媒体)或 podcast(温和模式,无跳切特写)。
  4. 用户习惯使用且可以安全剪切掉的词语(“like”、“so”、“you know”、“basically”)。这些词在其他句子中可能有含义,因此需要用户选择加入。
  5. 任何必须保持原样的内容(如演示、带停顿的笑话、赞助商口播)。

第 1 步:转录

python3 scripts/transcribe.py VIDEO --out work/ --terms "产品名称, 专业术语, 嘉宾姓名"

--terms 用于列出名称和专业术语以确保拼写正确;仍听错的词可在渲染前在 edit.json 中使用 "replace" 修正,因为烧录到已发布视频中的字幕无法更正。

与往常一样的三条路径,并一次性解释其权衡:

路径方式成本与速度
现有字幕--from captions.srt免费,即时;字的时间戳是估算的,大多数“嗯”会丢失,因此填充词剪切效果较弱
Groq 或 OpenAIGROQ_API_KEY 或 OPENAI_API_KEYGroq 大约每小时音频 $0.04,处理速度每分钟音频约需一到两分钟
本地pip install faster-whisper免费且隐私;使用 --model small 时速度约为视频时长的一半到一倍

转录提示会要求记录填充词;否则 Whisper 可能会忽略它们。编辑器会通过音频本身查找转录仍可能遗漏的发音(如未记录的“mm”或呼吸声)。

第 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 中。
  • 离题和无效段落: 离题内容、"你能听到我吗?"、进入正题前的冗长铺垫。将它们添加到 cut 中并注明原因,同时告知用户。
  • 保护 任何必须保留的内容,使用 keep,包括静默段落。
  • 带有问题卡片或可见主持人的采访: 除非用户另有要求,否则保留问题(每张卡片约 3 秒加入 keep);否则每个回答都会以“所以...”开头,缺乏上下文。
  • 听错的名称: "replace": {"Cyrus Rex": "OSIRIS-REx"}。
  • 章节(适用于 YouTube):根据话题变化生成 3 到 10 个章节,第一个从 0:00 开始,每个至少 10 秒,根据观众可能获得的信息命名(“为什么相机失败了”,而不是“第二部分”)。时间为原始视频中的时间;脚本会移动它们。

然后生成计划:

python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/ --plan

edited/edit-plan.md 会提供新长度、从讲话内部与长间隙和卡片中节省了多少时间、语速(字每分钟),以及每一个超过一秒的删减及其原因和文字。阅读每一处重拍和口吃行,以及“可能的重拍”列表:不会自动剪切两个开头相同且完整的句子;逐一判断,如果是真正的重拍,则将其添加到 cut 中。向用户展示摘要、重拍部分、你选择的离题内容以及章节,并获得批准。

第 3 步:渲染

python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/

功能概述:

  • 将超过限制的停顿缩短为自然节拍,同时剪切填充词、口吃、重拍以及每个 cut 范围。短于风格设定最小值的删除(如 youtube 风格下的 0.4 秒)会保留:跳切带来的损失可能超过节省的价值。
  • 通过监听来定位每处剪切:单词边缘会移动到声音实际停止和开始的地方,因此单词结尾不会被截断,转录遗漏的声音(如未写下的“mm”)也能被发现。
  • 同时分析画面:标题卡片和镜头切换会被干净地剪切,绝不会留下卡片上的零星几帧。
  • 将片段分组,每组在一次渲染中完成,因此无论有多少剪切,音画始终同步。
  • 特写缩放(Punch-ins): 在全帧和 1.1 倍特写之间切换,用于隐藏跳切:总是在删除了至少一秒的剪切处使用,否则仅在同一帧持续 4 秒后使用,从不在切换到新镜头时使用。"punch_in": 0 可关闭此功能。
  • 音频: 将增益调整到工作电平,使用低频滤除器、根据测量的房间噪声设置降噪(房间已安静时跳过)、温和压缩、峰值限制器,以及两遍响度标准化至 -14 LUFS。
  • 字幕: 始终生成 captions.srt(最多两行,每行最多 42 个字符,每条持续时间 1 到 7 秒,不将小词或名称内部换行)供上传到 YouTube。"captions": {"burn": true} 可将字幕烧录到视频中(适用于社交媒体,许多人在静音模式下观看);竖版视频默认烧录字幕。不要将字幕烧录到也会上传 SRT 文件的 YouTube 视频中:否则开启字幕的观众会看到重叠的字幕。
  • 竖版: "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。简版说明:

  1. social_accounts_list;如果未连接:使用此智能体的单一路径进行连接(免费计划:2 个社交账户),然后针对每个平台执行 oauth_create_authorization。
  2. 使用上传会话上传 edited.mp4(使用 manifest.json 中的字节大小创建 media_uploads_create_session,然后 python3 scripts/upload_parts.py session.json edited/edited.mp4,最后 media_uploads_complete_session)。
  3. YouTube: title(主要搜索词在前,不超过 70 个字符)、privacy(隐私设置),以及一个描述,开头一行说明观众将获得什么,然后是从 chapters.txt 中提取的章节。之后在 YouTube Studio 中上传 captions.srt(WoopSocial 无法发送字幕文件)。
  4. 展示帖子内容(文件、标题、描述、账户、包含时区的时间),并获得明确的确认。然后执行 posts_create 和 posts_get。

第 5 步:阅读结果

一周后,使用 social_account_posts_list:获取观看次数、点赞数、评论数(如平台报告)及收集日期;缺失表示“未报告”。留存率和平均观看时长在 YouTube Studio 中;向用户询问这些数据。如果观众早期流失,下次编辑需更紧的开头;如果在某个章节流失,则该章节过长。

质量标准

专业剪辑师会接受这个结果吗?如果一个单词被截断、剪切入气声产生爆音、特写缩放每隔几秒就变化、语速快得让人没有思考空间,或者原意被改变,则拒绝该结果。

边界情况

  • 两人同框: 保持 format 为源格式;特写缩放仍可应用于全景镜头。
  • 带语音的屏幕录制: 设置 "punch_in": 0。
  • 语音下有背景音乐: 静音检测会将音乐视为声音;设置 "voiced_gaps": false。
  • 非常长的录制(超过一小时): 可行,但渲染时间约为视频长度;先计划,再渲染一次。
  • 段落有意无声(如演示):使用 keep 保留。

参考资料

  • references/editing-rules.md:阈值、填充词、重拍模式、特写缩放、音频链、字幕和章节,附来源。
  • references/woopsocial.md:连接、上传、发布及阅读结果。

相关技能