Communitygithub.com

robertomanfroi/videos-opus

将竖屏录制(人对着镜头讲话)剪辑成看起来像“在手机上自己编辑的”Reels——逐字字幕、原始截图置于头顶、小标题、硬切、无停顿无重复,最长90秒。当`editar`技能委托给手机风格,或学员要求“手机风格”、“原始风格”、“看起来像在Instagram上编辑”时使用。对于杂志视觉效果使用编辑风格;对于新闻/讲解使用解释风格;对于广告使用广告风格。

videos-opus 是什么?

robertomanfroi/videos-opus 是一个 AI 代理技能,专门将竖屏录制(人对着相机讲话)剪辑成看起来像在手机上自己编辑的 Instagram Reel。它的核心美学是“朴实感”:使用原始截图(无边框、无阴影、无圆角卡片)、逐字字幕(每词54像素,带有柔和阴影)、小标题(48–70像素)和硬切——无淡入、滑动、缩放或弹跳效果。情绪和标题字符通过实际 Unicode emoji 插入,然后在编译时替换为 Twemoji 图形。最终视频必须保持在 90 秒以内,并移除所有呼吸、停顿(<−30 dB 且 ≥0.15 s)、重复和错误起始。该技能支持基于项目的批量工作流:从快速转录和框架选择开始,然后使用提供的配置文件(keeps.json)进行剪辑,接着使用更精确的模型重新转录干净的剪辑,并通过 snapshot 检查分层。它基于可执行视频套件(`$K`)运行,该套件管理便携式工具集和项目目录;所有命令通过 `$K` 调用,禁止使用裸 `npx`、`python` 或 `node`。用户读取创作者资料(`perfil-criadora.md`)来驱动截图选择并确保风格一致性。输出 MP4 文件被交付到 `prontos/` 目录,并附有中文说明,说明剪辑的内容、使用的截图以及任何悬而未决的问题。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/robertomanfroi/videos-opus/tree/HEAD/kit/.claude/skills/estilo-celular

在你喜欢的 AI 中提问

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

文档

手机风格

唯一规则: 观看者必须感觉是创作者本人在手机上、用Instagram编辑器剪辑的。绝不能看起来像广告公司或AI。有疑问时:更少、更原始、更小。漂亮的动态图形在这里是错误。

开始之前请阅读 ../perfil-criadora.md 并加载(或创建)根目录下的 perfil.json。

视觉——不可协商

元素规则
截图学员 我的截图 文件夹中的真实截图(个人资料页眉、数据洞察、点赞/评论/收藏、浏览量、私信、评论、帖子)。原始裁剪:直角、无边框、无阴影、无框架、无圆角卡片。位于头顶上方。
头顶文字标题字体(.tit),白色,小号——标题48–70 px,标签40–48 px(1080宽度)。与截图左边缘左对齐。 强调色(.y)仅用于偶尔的单个单词。Sans(.sans)仅用于“差/好/爆款”等标签。
阴影仅当背景墙壁为浅色时使用(.sh)。文字后面绝对不要出现方框、背景或玻璃。
动画无。 元素以硬切方式进入和退出(show()/hide())。无淡入、滑动、缩放、弹跳。
Emoji模板中使用实际字符(✅ ❌ 🔥 ❤️ 👇 🚨 …);montar.mjs 将其替换为 Twemoji 图形。永远不要手绘图标。
字幕每词一次,54 px,白色带柔和阴影(绝无描边)。位于胸部中央、下巴正下方(reel.json 中的 capTop)。每词硬切。
持久标题一个主题标题可以在屏幕上长时间停留,同时其上方切换截图。
列表Emoji + 单词的检查清单(✅ 字幕 / ❌ 标题),按口语单词逐项显示。
模拟图避免。使用真实截图。仅在不存在截图且学员要求时绘制模拟图。

剪辑规则

  • 无呼吸或停顿:所有低于 −30 dB 且持续 ≥0.15 s 的内容均被移除(cortar.mjs 自动完成)。
  • 移除所有重复、错误开头和重写的句子。保留 最后、最干净的版本。
  • 转录器会隐藏重复内容并弄错时间。 剪辑后,务必重新转录 clean.mp4 并从头到尾查找重复的短语、被剪断的单词和缺少的动词。反复剪辑直到干净。
  • 最长90秒,除非学员另有要求。在交付时说明删除了哪些内容。
  • 默认启用 J/L cuts(--jl 6 更柔和,--no-jl 禁用)。

速度规则(学员的电脑可能较慢——优先级高于以下步骤)

  • novo-projeto.mjs 的转录已经是 --rapido(轻量模型,仅用于选择剪辑片段)。clean.mp4 的重新转录(即字幕所用的)使用精确模型——每个剪辑版本运行一次,而不是每次调整都运行。
  • 在 一次 调用中检查所有拼接点(一次模型加载): $K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 --janelas t1,t2,…(时间基于 clean 的时间轴)。切勿每次只处理一个窗口。
  • 不要为了查看帧而渲染整个草稿。使用 $K --em video-projects/<slug> hyperframes snapshot --at t1,t2,… -o snapshots(每次元素变化运行一次)并查看 PNG 文件。仅当快照正确时渲染视频 一次。仅针对请求的更改重新渲染。
  • raw.mp4 / clean.mp4 的编码器会自动选择(NVIDIA / Intel / AMD / Apple,否则 CPU)。不要更改。
  • 在每个慢速步骤之前,用一行简短的葡萄牙语说明正在运行的内容以及可能需要几分钟(“正在转录视频——在您的电脑上可能需要几分钟。”),以便等待看起来不像是卡死。

流程(所有命令通过启动器 $K)

M=.claude/skills/_motor · K = videos-opus 技能的启动器:"<VO>\bin\node.exe" "<VO>\scripts\video.mjs" kit,其中 <VO> 是 videos-opus 技能的文件夹(包含发送给您此指南的 SKILL.md)。它会将便携式程序添加到路径中,并在套件的工作目录中运行($K pasta 显示当前目录;项目位于 <pasta>\video-projects\<slug>)。$K --em <subpasta> … 在其中运行。没有散装的 npx、Python 或 node:一切通过 $K 进行。

  1. 项目 + 快速转录:$K node $M/novo-projeto.mjs "<video>" <slug> .claude/skills/estilo-celular → video-projects/<slug>/ 包含 assets/raw.mp4(1080×1920,30 fps)、assets/raw.json、assets/palavras.txt、字体和 src/index.template.html。slug 简短、小写、带连字符(promo-engrene)。
  2. 取景:从 raw 视频截取联系快照($K --em video-projects/<slug> ffmpeg -i assets/raw.mp4 -vf "fps=1/4,scale=180:-1,tile=12x1" -frames:v 1 assets/contato.png)并 查看:头顶和下巴的位置。元素位于 y≈100 和头顶之间;字幕位于下巴下方 → 在项目根目录写入 reel.json:{"capTop": <px>}(默认 1380)。
  3. 选择剪辑片段:阅读 assets/palavras.txt 并写入 assets/keeps.json({"fps":30,"keeps":[{"from":0,"to":9.38,"why":"…"}]})。每个 why 用葡萄牙语解释保留了哪些内容及其原因。
  4. 剪辑:在 assets/ 目录内运行:$K --em video-projects/<slug>/assets node ../../../$M/cortar.mjs → clean.mp4 + edit-decisions.json。
  5. 检查:在项目根目录:$K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 assets/transcript.json --nomes "<profile terms>"。有重复或单词被剪断 → 返回步骤3。听错的单词 → assets/caption-fixes.json({"cloud":"Claude"})。$K --em video-projects/<slug> ffmpeg -i assets/clean.mp4 -af silencedetect=noise=-30dB:d=0.25 -f null - → 不能有停顿残留。
  6. 截图:列出学员资料 pasta_prints 中的图片(最新的优先),并在使用前 查看 每个候选。使用 ffmpeg 裁剪到 assets/prints/(-vf crop=w:h:x:y),并在 assets/prints/ORIGEM.md 中记录来源。没有合适的截图 → 说明哪种屏幕截图会有帮助,并 不 使用截图继续(她可以稍后作为调整请求)。永远不要伪造截图。
  7. 合成:编辑 src/index.template.html——元素位于 ELEMENTOS 区块,时间位于 TEMPOS 区块。时间来自 $K --em video-projects/<slug> node ../../$M/ancoras.mjs "phrase" "another phrase"(项目根目录),基于口语单词。仅硬切。
  8. 组装 + 检查:$K --em video-projects/<slug> node ../../$M/montar.mjs → $K --em video-projects/<slug> hyperframes lint → 每个元素变化的快照($K --em video-projects/<slug> hyperframes snapshot --at …)并 查看:脸部从未被遮挡、文字可读、截图与标题对齐。然后渲染并交付(通过启动器,在套件的工作目录):$K node $M/renderizar.mjs <slug>——检查锁、后台渲染、验证并复制到 prontos/。输出3 = 仍在渲染:运行 $K node $M/renderizar.mjs <slug> --esperar 直到显示“PRONTO”。切勿直接运行 $K --em video-projects/<slug> hyperframes render 或手动运行 prontos.mjs。
  9. 交付: 用葡萄牙语简短回答:视频位置、剪掉了什么、使用了哪些截图、哪些还存在疑问。切勿发布或发送任何内容。

交付后的调整

“去掉价格部分” → 编辑 keeps.json,重复步骤4–5,使用 ancoras.mjs 重新计算该片段之后所有内容的时间,并重复步骤8。“字幕再往下一点” → 编辑 reel.json 并重复步骤8。“更换截图” → 仅步骤6–8。切勿从头重做学员未要求更改的内容。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相关技能