动态编辑
此技能可制作完成的高端动态视频。它基于以下四个方面:
- 规则和数字:从82个参考编辑中逐帧测量得出(
references/) - 12种风格家族:供选择和混合(
references/styles/) - 一个Remotion引擎(
remotion/),可渲染JSON格式的VideoSpec:每个子句一个场景,精确缓动、动量剪辑、词语同步排版、程序化纹理和电影级后期处理 - 工具:用于配音、节拍、素材分析、剪影、遮罩、渲染和质量审查(
tools/)
两种模式,可在同一视频中混合使用:
- 独立动态图形:无需素材。文字、剪影、UI模拟、图表、计数器、粒子和纹理即可完成。
- 素材编辑:以用户的剪辑为骨干。收紧、放大插入、字幕、添加关键词冲击和B卷卡片、将文字放在主体后方、调色、添加转场。
任意宽高比:在规范中设置 width/height(默认9:16 1080×1920;16:9、1:1、4:5等均可)。
优先阅读
references/playbook.md:规则。每次都读。references/engine-spec.md:每个规范字段、图层、转场和渲染命令。编写规范前阅读。references/styles/README.md:选择一种风格家族,然后阅读该家族的文件(其示例规范可以作为很好的起点)。
当需要决策时,深入了解:
script-structure.md:体裁模板、钩子、子句→场景→道具规则、详细示例motion-language.md:缓动、帧率、节奏、同步数字transitions.md:63种转场及其帧数和构建方法typography-color.md:字体类别、搭配、尺寸、安全区、调色板、完成量sound-design.md:背景音乐、闪避、音效放置、节拍同步、纯音乐编辑footage-editing.md:集成模式、放大插入、蒙太奇、字幕、两个素材编辑规范示例engine-gaps.md:引擎尚不能做什么,以及变通方法breakdowns/vNN.md+breakdowns/_TAXONOMY.md:逐镜头证据。通过标签搜索先例(grep -l "text-behind-subject" references/breakdowns/*.md)。
一个完整的示例(脚本→草稿配音→规范)位于 remotion/src/specs/examples/zeigarnik.json(脚本:work/zeigarnik.script.txt)。
工作流程
0. 环境设置(每个环境一次)
cd remotion && npm install
pip install faster-whisper librosa opencv-python-headless "rembg[cpu]" piper-tts pillow numpy
需要 ffmpeg。如果librosa因段错误崩溃,设置 NUMBA_CACHE_DIR=/tmp/numba_cache。
1. 获取简报
获取以下信息,或在没有信息时选择合理的默认值而不停滞:
- 主题或信息
- 平台和宽高比
- 长度(短视频:20–45秒)
- 语音:用户的配音文件、要配音的脚本,或无需语音
- 素材或照片
- 品牌(调色板、字体、标志)
- 基调
- 版本数量
如果用户只提供主题,自己编写脚本。
2. 脚本→子句表格
使用script-structure.md。在第一句中设置钩子(8–15词,前3词要有冲击力)→铺垫→转折→在16–40%处命名原则→证明→反论道德→行动号召(最后10–14%,≥2.5秒)。将其拆分为子句:一个子句 = 一个场景 ≈ 6个词 ≈ 2–2.8秒。对于每个子句,写下:
- 名词的直译道具或图片
- 关键词:成为文字的1–3个词
- 装置:徽章、计数器、UI、图表、涂鸦、交换、粒子
- 切入方式
3. 语音和时间
- 用户配音:
python3 tools/transcribe.py vo.mp3 remotion/public/<proj>/vo.words.json - 尚无配音:
python3 tools/tts.py script.txt remotion/public/<proj>/vo.wav --speed 1.15 --words remotion/public/<proj>/vo.words.json提供离线草稿语音。告知用户这是占位符;他们自己的配音以后可以替换,因为重新转录时词引用会自动重新计时。 - 音乐主导或无语音:
python3 tools/beats.py music.mp3 remotion/public/<proj>/beats.json,然后设置"beats"并使用{beat|downbeat|onset: n}引用和snap。 - 场景开始: 在每个子句第一个词上设置
{"word": "...", "offset": -0.06}。场景词引用按顺序解析,但当该词也恰好出现在前面时,使用多词引用("why writing")。关键词使用sync或at: {word}。
4. 外观
选择一个风格家族(样式自述文件)。然后锁定:
- 调色板:每个场景循环的场地色,加上1–2个具有固定含义的强调色
- 字体搭配:一个粗体展示字体加上一个轻细字体
- animFps:15用于拼贴/编辑风格,12用于粗糙印刷,0用于UI/3D/电影感
- 完成效果:颗粒+渐晕,印刷风格可加半色调
- 一个标志性转场,重复使用,加上1–3种辅助类型
5. 素材
- 素材:
python3 tools/analyze_footage.py clips/*.mp4 --out work/footage.json --sheets work/sheets,然后查看sheettools/tighten.py去除静音段tools/matte.py为主体制作遮罩,用于在主体后放置文字
- 照片:
python3 tools/cutout.py photos/* --out remotion/public/<proj>/cutouts --trim,然后以image形式使用并设置cutout: true。将文字放在比剪影更低的z层,以将其置于后方。 - 无素材: 文字、程序化背景、UI模拟、图表、计数器、形状、粒子和
embed。仅在需要实物对象时,在remotion/src/custom/中编写自定义组件。 - 仅使用用户提供或有权使用的标志、肖像、音乐和音效。学习方法;切勿复制创作者的品牌、角色、片尾卡片或脚本。
6. 编写规范
编写 work/<proj>.spec.json 作为 {"spec": {...}},从所选家族的示例开始。素材放置在 remotion/public/<proj>/ 下。在编写时应用playbook检查清单。
7. 预览、渲染、审查、修正
- 先看静帧:
为每个场景做一帧(场景中间帧),将它们拼贴起来,检查并修复溢出、对比度、杂乱和空帧问题。cd remotion && npx remotion still src/index.ts MotionVideo /tmp/f.jpg --frame=N --props=../work/<proj>.spec.json --scale=0.4 - 渲染:
添加python3 tools/render.py work/<proj>.spec.json out/<proj>.mp4--draft用于半分辨率预览。它通过ffmpeg应用颗粒和半色调完成效果,速度快得多。 - 审查:
阅读联系表和剪辑条。检查剪辑是否在子句开始时对齐,没有内容在少于0.5秒内不可读,没有空白段超过1.5秒,没有出现损坏(空白图层、黑色间隙、边缘露出)。python3 tools/review_render.py out/<proj>.mp4 out/review/ - 修正并重新渲染。交付MP4,同时提供简短的镜头列表和用户应替换的内容(草稿配音、占位符素材、音乐)。
8. 版本和系列
- 变体: 保留脚本,改变风格家族、调色板、字体搭配、标志性转场、纹理和钩子装置。分别渲染。
- 频道系列: 锁定一套工具(调色板、字体搭配、完成效果、覆盖徽章、行动号召卡片、2–3个标志性转场)。保存在
remotion/src/specs/kits/<channel>.json中,每集都从它开始(参见kits/README.md)。
不确定时的默认值
- 格式: 1080×1920,30 fps。
- 风格: 解说视频用半色调海报拼贴风格,商业/技术用原生UI解说风格,工具用深色产品推广风格。
- 运动:
animFps15,settle 1.10(默认),场景 1.2–2.8 秒。 - 文字: 关键词用
impact/bebas字体,尺寸18–30,搭配serif-italic或script轻细词汇。stitched徽章使用深强调色。 - 剪辑: 标志性转场用
zoom,冲击用普通cut,揭示用flash或invert,进入行动号召用circle。 - 完成效果和音频:
grain0.07,vignette0.35。背景音乐音量musicVolume0.3,闪避至duckTo0.12。