editar-reel
接受一段竖版视频,其中有人面对镜头说话(已剪辑好:无沉默和坏条),并准备好供上传。不改变说话内容:仅在顶部添加编辑层。
模板位于 plantilla/(Remotion)。屏幕上发生的一切都描述在 plantilla/public/plan.json 中;你的任务是凭判断编写该计划,而不是编程。
前提条件(开始前请检查)
ffmpeg和whisper-cli(whisper.cpp)。Mac:brew install ffmpeg whisper-cpp。Windows:winget install Gyan.FFmpeg以及 https://github.com/ggml-org/whisper.cpp/releases 的 whisper.cpp 压缩包(将whisper-cli.exe放入 PATH)。- Node 18 或更新版本(Windows:
winget install OpenJS.NodeJS),并安装 Google Chrome。 - 如有缺失,请获得许可后自行安装;如果安装程序要求输入密码,请让用户输入。不要半途而废。
- 在 Windows 上,
.sh脚本在 Git Bash 中运行(Windows 上的 Claude Code 使用它)。如果没有bash,请使用等效命令。
步骤
1. 准备 Reel 文件夹
cp -R <此技能路径>/plantilla ~/reels/<reel名称>
cd ~/reels/<reel名称> && npm install
cp <用户视频> public/video.mp4
视频必须为竖版 1080×1920(如果是竖版 4K,请使用 ffmpeg -i in.mov -vf scale=1080:1920 -c:a copy public/video.mp4 缩小;切勿裁剪放大脸部:人们更喜欢看到自己留有余地)。
2. 转录并查找剪辑点
bash <此技能路径>/scripts/transcribir.sh public/video.mp4 public
bash <此技能路径>/scripts/cortes.sh public/video.mp4
transcribir.sh生成public/palabras.json(每个单词及其秒数)并输出文本。请完整阅读。 whisper 可能会弄错专有名词(例如将“Claude”识别为“Cloud”):使用correcciones.json通过python3 <此技能路径>/scripts/palabras.py public/tokens.json public/palabras.json correcciones.json修复。如果某个单词无法理解,请询问用户;不要猜测。cortes.sh输出镜头切换的秒数。这些将进入计划的cortes_s字段。
3. 定位脸部位置
抽取 6-8 个均匀分布的帧,查看脸部高度(像素,基于 1920):
for t in 1 5 10 15 20 25; do ffmpeg -y -v error -ss $t -i public/video.mp4 -frames:v 1 /tmp/cara_$t.jpg; done
cara_y = 眼睛或鼻子的高度(典型值:700-900)。缩放以此为中心,标题放在头顶上方:同时记录在脸部最高帧中头顶的位置。如果头顶在 y=450 附近,则上方放不下标题:请减少标题数量。
4. 编写计划
复制 plantilla/public/plan.json 的格式(这是一个完整示例)。如果没有其他视频或截图,请删除 split 和 pantallazos:它们指向示例文件,这些文件不在仓库中。cortes_s 必须按顺序且不重复。规则:
节奏
- 每个镜头一个缩放(
zooms,每个剪辑段一个),交替景别:1.0 → 1.16 → 1.0 → 1.26……缩放变化在剪辑处可掩盖跳跃。切勿超过 1.3:否则会显得像素化。 - 每 3-5 秒屏幕上有新内容,但一次一个想法:标题和聊天切勿同时出现。
钩子(前 2 秒决定一切)
gancho.linea从第一帧起可见,无入场动画:同时也是封面。- 不要重复说话内容。 如果说话人说“300 万人看过这个”,文本应写别的内容以产生冲击(例如“这是我的 AI 做的”)。如果重复,就成了字幕,机会就浪费了。
- 第一帧的最佳选择是动态内容:使用
split将结果(爆款视频、前后对比)放在上方,人放在下方,在第一句话结束时收起。
每个元素在其对应单词处出现
- 在
palabras.json中查找提及该事物的单词的精确秒数,并让该元素在该秒前 0.15-0.3 秒出现。在单词之后才出现的标题会感觉滞后。 lista[].filas[].marcar_s等于说话人提及该行的秒数。
何时使用何种元素
| 说话内容 | 元素 |
|---|---|
| 用几句话概括的想法(“秘诀:skills”) | titulos(短大写标注 + 文本;*单词* 会高亮) |
| 请 AI 做了某事 | chat,内容为原文消息(如不确定,请询问用户) |
| 具体名称:文件夹、文件、工具、步骤 | lista(最多 7 行) |
| “看结果” | pantallazos(最多 3 张实际结果的截图)或带视频的 split |
| 结尾“关注我” | cierre,包含用户信息 |
诚实(不可妥协): 屏幕上只能显示真实内容。聊天显示实际发送的消息;数字显示实际数字。如果你不确定,请询问或省略。
安全区域: 模板已将所有内容放置在 x 110-900 和 y 250-1290 之间,远离 Instagram 的按钮和 caption。不要将元素移出该区域。
5. 全量渲染前检查单帧
npx remotion still Reel out/f0.png --frame=0
为每个元素抽取一帧(在该元素出现的秒数 × 30 处)并查看它们。检查:脸部从未被遮挡(列表和截图除外,它们会故意使背景变暗),文本未被截断,钩子在帧 0 可读。
如果渲染卡在“Waiting for root component to load”,请使用系统 Chrome:--browser-executable="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"(Mac)或 --browser-executable="C:\Program Files\Google\Chrome\Application\chrome.exe"(Windows)。
6. 渲染与最终审阅
npx remotion render Reel out/reel.mp4
ffmpeg -v error -i out/reel.mp4 -f null - && echo "文件健康"
ffmpeg -y -v error -i out/reel.mp4 -vf "fps=1,scale=216:384,tile=10x3" -frames:v 1 out/hoja.jpg
查看 out/hoja.jpg(每秒一帧的拼贴图)。如果某个帧出现“马赛克”或黑色(Remotion 中视频偶尔会出现),请单独使用 remotion still 渲染该帧并使用以下命令覆盖:ffmpeg -i out/reel.mp4 -i fix.png -filter_complex "[0:v][1:v]overlay=enable='eq(n,N)'" -c:a copy out/reel_ok.mp4。
之后,使用 sonido-reel 技能为视频添加音乐、音效和最终音量。
已知问题
- 字幕中单词连在一起(例如“Yesto”):渲染时
<span>之间的空格会丢失。模板已通过边距分离;如果逐字添加文本,请同样处理。 - 不要对视频使用
filter: blur()或backdropFilter:会导致黑色或马赛克帧。如需变暗,请在视频上叠加一层半透明颜色层。 - 分屏中上方的视频自带文本:调整
recorte_y以显示干净的区域,或使用broll_desde_s选择其他秒数。