关于 make-short
make-short 是基于代码制作竖屏短视频的工作流,使用 Remotion。它引导创作者完成脚本、动画、逐帧质检、配音、音效及可选配乐,并为各阶段定义产物。
主要功能
- 01生成脚本和定时节拍数据
- 02用 TSX 构建竖屏 Remotion 合成
- 03最终输出前逐帧检查
- 04生成带逐词时间戳的配音
- 05规划并混合音效及可选配乐
适用场景
- 01无需实拍素材制作动画短视频
- 02将主题转化为定时视觉脚本
- 03添加同步配音与字幕
- 04为短视频试听音效和配乐
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hassancs91/ claude-faceless-shorts-creator --skill make-short安装后在 Claude Code 中输入/make-short确认已加载。
详细介绍
make-short — 全 TSX 竖屏短视频,一站式制作
一切皆由代码生成:没有实拍素材,也没有图库素材。一条短视频 = 一个 Remotion 合成,由节拍契约驱动,渲染后再叠加配音和音效。已在 shorts/ 中的 12 条示例短视频里验证。创意库和细分领域排名见 IDEAS.md——选题时请先阅读,构思时也要持续扩充。
所有操作都从仓库根目录运行。工具仅使用 Python 3.10+ 标准库;ffmpeg/node 必须位于 PATH 中;API 密钥存放在 .env(参见 .env.example)。
成品规范
shorts/short-N-<niche>/
script.md — hook, beat sheet table (time | on screen | VO), production notes
beats.json — machine contract: format, vo[] (text+start/end+words), beats[], niche timeline
voice/ — per-line TTS clips + voice.wav (gen_voice.py) [gitignored]
sfx-plan.json — cue sheet on the global timeline (mix_sfx.py)
output/ — short-N-sfx.mp4 (+ music auditions) [gitignored]
remotion/src/shots/short-N/
ShortN<Name>.tsx — THE composition (registered by npm run gen)
vo.gen.ts — AUTO-GENERATED VO with exact word times (never hand-edit)
共享工具包:remotion/src/lib/shorts.tsx(Captions、Kicker、BigTitle、Stamp、PauseCard、StatChip、ProgressBar、ShortsBackdrop、安全区域、prog 辅助函数)。目前已有的细分领域库:lib/chess.tsx、lib/math.tsx、lib/algo.tsx、lib/sheet.tsx、lib/piano.tsx、lib/prob.tsx、lib/map.tsx、lib/orbit.tsx、lib/chart.tsx、lib/story.tsx……每条短视频最多新增一个细分领域库,并且要足够通用,能用于系列内容。
阶段 1 —— 脚本 + 节拍
节拍结构(约 38–42 秒):HOOK(0–3.4 秒,第 0 帧必须已完整构图——结论已经可见,不得从黑场淡入)→ SETUP → 可选的 QUIZ(PauseCard,约 2.5 秒——促进评论)→ REVEAL,分 2–4 步,每一步都与一个配音词同步 → TWIST → LOOP(最后一帧 = 第 0 帧,让结论溶解回开场,实现无缝循环播放)。
结尾——不要废话。 绝不要以老套的互动 CTA 收尾——不要问“接下来该做什么?”,不要说“在下方评论”,也不要问“想让我拆解哪一个”。这些听起来已经过时。以揭晓结论的台词结束,并让画面循环衔接回开场——循环回开场本身就是结尾。优先采用干净的画面溶解/重置,让最后一帧与第 0 帧完全一致。如果主题确实无法实现无缝循环,就直接以结论收尾,不要填充内容。不要拖长尾部:让合成在结论之后不久结束,不要留出几秒空白。
配音规则:总计约 100 个词;按约每秒 2.7 个词,并留出余量衔接下一行的起始时间来估算每行的时间窗口(时间安排过紧会导致听得出来的 atempo 压缩——每秒 3.3 个词需要压缩 1.3×;每秒 2.7 个词时峰值为 1.11×)。编写脚本前必须核实事实。撰写 script.md + beats.json(包含预计起止时间的配音行;细分领域时间轴使用全局秒数)。
阶段 2 —— 合成
- 在
remotion/src/shots/short-N/下创建一个.tsx文件,设置compositionConfig为 1080×1920 @30,时长约 42 秒。遵循 vidtsx-2d-generator 的硬性规则(仅基于帧、范围单调递增、使用 Easing.bezier)。 - 节拍 = 一个持续画布上的
<Sequence>场景(棋盘/方程/数组负责保持连贯性——倒带和演变都发生在同一个组件的时间轴中,而不是通过剪切切换)。 - 将
Captions lines={VO}+ProgressBar挂载在 ROOT(全局时间),场景放在其下方。 - 常见 bug:
<Sequence>内的帧是局部帧。 将全局节拍秒数转换为场景提示帧的公式是local_f = global_s*fps − sequence_from。每个提示点都要检查两遍。 - 第 0 帧规则:开场场景使用
warmprops(BigTitle/EqRow),并使用负数at,确保高亮/印章在 f0 时已显示。循环场景要反转开场的强调缩放(settle 1.06→1,而非 grow 1→1.06),以确保视频无缝循环。 - 安全区域:字幕块居中于 y1500 附近;底部 340px / 右侧 160px 区域内不得放置关键内容。
阶段 3 —— QA(不要跳过,每次都能发现实际问题)
cd remotion && npm run gen # frames.mjs does NOT run gen-registry itself
node scripts/frames.mjs ShortNName 0,<beat-boundaries+hero-frames>,<last> --scale=0.5
逐张检查所有 PNG(按手机屏幕大小查看)。检查清单:第 0 帧构图完整且适合做缩略图 · 每次揭晓都与对应节拍同步 · 没有内容遮挡结论元素 · Kicker 随旁白切换 · 字幕避开 UI 区域 · 循环帧 ≈ 第 0 帧。修复并重新渲染帧,然后才执行:
node scripts/render-all.mjs ShortNName --scale=1 # -> remotion/out/ShortNName.mp4
阶段 4 — 配音(ElevenLabs,逐词精确字幕)
python tools/gen_voice.py --beats shorts/short-N-<niche>/beats.json \
--voice TX3LPaxmHKxFdv7VOQHJ --emit-ts remotion/src/shots/short-N/vo.gen.ts
- 逐行使用
/with-timestamps进行 TTS → 写入 beats.json 和vo.gen.ts的是真实逐词时间戳(经过速度缩放,且为全局时间戳)。镜头导入{ VO } from './vo.gen',字幕随后会在准确的读词时刻高亮。只要存在配音轨,就绝不估算。 - 片段按文本哈希缓存:只重写一行,只会对该行重新计费。
- 配音:示例使用 ElevenLabs 预设音色 “Liam” (
TX3LPaxmHKxFdv7VOQHJ);使用--voice标志指定任意音色(包括你自己的克隆音色),然后重新生成。 - 然后重新渲染合成内容(字幕时序会重新调整),并进行混流:
ffmpeg -i remotion/out/<Id>.mp4 -i shorts/.../voice/voice.wav -map 0:v -map 1:a -c:v copy -c:a aac -b:a 192k -t 42 remotion/out/<Id>-voiced.mp4
阶段 5 — 音效(suggest-sfx 机制,短视频版本)
阅读 brand.md §7 和 media/library/sfx/catalog.json。优先使用素材库;只有确实找不到合适音效时,才将通用方案添加到 palette.json,并运行 python tools/gen_sfx.py。编写
shorts/short-N-<niche>/sfx-plan.json(preview = -voiced.mp4,out = output/short-N-sfx.mp4)。
短视频风格调整:场景内动作音效就是内容本身(棋子落下的闷响、数字弹出的声音),密度可以高于长视频;装饰性提示音保持 optional: true;为 2–3 个主要时刻叠加音效(抓取+盖章、移动飞行+落地+提示音)。提示音时间取自精确的落地帧:
at_s = (move.at + move.dur + sequence_from) / fps。
PYTHONIOENCODING=utf-8 python tools/mix_sfx.py shorts/short-N-<niche>/sfx-plan.json --print
PYTHONIOENCODING=utf-8 python tools/mix_sfx.py shorts/short-N-<niche>/sfx-plan.json
混音只是试听版——在将任何内容称为最终版之前,用户的听觉体验是审核关卡。
之后更新 catalog 中的 used_in。
阶段 6 — 音乐(可选,每条视频单独处理)
media/library/music/ 中的素材库配乐(使用 gen_music.py 扩充)。在音效混音上试听:
python tools/mix_music.py --all --base shorts/short-N-<niche>/output/short-N-sfx.mp4
(或使用 --bed <id>)。配音下方会进行强力降音。
完成标准 =
已编写 script.md + beats.json(事实已核实)· 已逐帧完成合成内容 QA · 已按 1 倍比例渲染 · 已生成配音并配上逐词精确字幕,且已混流 · 已编写音效计划并完成试听混音(约 −15.5 LUFS,等待用户试听)· 已更新素材库中的 used_in · 已更新 IDEAS.md 队列。