SuperAPI AI 工具集

sn-code-video

设计与创作

查看项目

更新于 11-02 07:18

技能介绍

SN Code Video 是一套用于创建和修订代码驱动视频的技能,其核心思想是将视频定义为「程序 frame(t) → image」,在 t = i / fps 处采样并编码。该技能旨在防止四类常见失败:影片未完成、画面依赖挂钟时间、未检查帧、文件与需求不符。

使用方式:

  • 为视频源文件、SPEC.md、构建文件和输出使用独立项目文件夹。
  • 将 SKILL_DIR 解析为包含 SKILL.md 的绝对目录,从项目文件夹运行命令,通过 "$SKILL_DIR/scripts/..." 调用脚本。
  • 环境要求:Node.js 18+(浏览器捕获)、Python 3、带 libx264 和 AAC 的 FFmpeg/ffprobe、覆盖所需语言的字体。在视频项目中安装 Playwright(含 Chromium)或 Puppeteer;Python 音频依赖见 requirements.txt,edge-tts 需要网络,faster-whisper 需要下载模型权重。仅安装所选渲染器和音频工作流所需的工具。
  • 交付物包括可播放的 MP4、源代码及复现命令、SPEC.md、VERIFY.md 和联系表;使用声音时,音频分轨和时序数据也应包含在项目中。

主要流程: 0. 阅读所需工艺指南:根据需求阅读 references/ 下的解释图、风格化外观、模拟与生成、角色与生物运动、Three.js 场景与相机、动态图形与宣传、声音设计与旁白、音乐与节拍同步等指南。命名风格的需求必须阅读 stylized-looks.md,含音频的影片必须阅读 sound-design-and-narration.md。

  1. 完成影片:交付物是符合需求的可播放视频,代码、静态图、计划或预览均为中间结果。需在 SPEC.md 中记录构图、调色板、缓动等选择,仅向用户询问会改变整部影片的关键选择(如语言、宽高比、时长、是否有旁白)。尽早获得粗剪完整渲染,再逐步改进。对子问题限时,约 30 分钟无进展则改变方法。
  2. 将需求转化为规格:编写 SPEC.md,包含格式(宽×高、fps、时长、帧数、是否循环、音频要求)、精确文案、事实与数字、资产使用方式、必须项(每条一行,作为验证检查)。根据内容选择技术栈:2D 图表/数学/粒子/像素艺术用 Canvas 2D;清晰矢量/UI/动态字体/Logo 用 SVG/HTML+CSS 或 Remotion;LaTeX 数学用 Manim 或 KaTeX/MathJax 转 SVG;3D 场景用 Three.js;着色器/极光/场/后期用 WebGL/GLSL。
  3. 时间作为唯一输入:暴露一个入口点绘制时间 t 的精确状态,例如 window.seek = async (t) => {...},并在字体和图像加载后设置 window.READY = true。第 i 帧在 t = i / fps 渲染。禁止使用 Date.now()、performance.now()、推进状态的 requestAnimationFrame 循环、运行中的 CSS 过渡/动画、播放中的 GSAP 时间线、未播种的 Math.random()、上一帧遗留状态。GSAP 使用 paused: true 时间线并调用 tl.seek(t);CSS 动画设置 animation-play-state: paused 和负 animation-delay;Remotion 从 useCurrentFrame() 派生一切。随机性需播种一次并保留值。模拟(物理、群集、元胞自动机、人群)以固定时间步和种子计算一次,存储后按 t 采样,绝不在渲染调用中积分。缓动写成 t 的函数。
  4. 捕获与编码:浏览器页面使用 scripts/capture.mjs 提供项目文件夹服务,在无头 Chromium 中打开页面,对每帧调用 seek(t) 并将截图管道到 ffmpeg。先用 --frames 3 测试 2–3 帧。若 Chromium 无法启动且无法快速修复,尽早切换到 Node 中的 @napi-rs/canvas 或 Manim。Node canvas 将每帧原始 RGBA 写入 ffmpeg 的 stdin。Remotion/Manim 使用自身渲染器,必要时重新编码。编码参数:-c:v libx264 -pix_fmt yuv420p -crf 18 -preset medium -movflags +faststart;无声音时无音频流(-an);宽高必须为偶数。无头 WebGL 可能回退到软件渲染,需先测量每帧时间。每次渲染保留新版本路径,不覆盖上一个良好影片。帧预算目标约 ≤ 300 ms/帧。长渲染可分段并行,用 --start 和 --frames 渲染独立块,再无损拼接。长任务前做冒烟测试,记录 PID,用新文件名和 flush=True 写日志。
  5. 检查帧:像素是唯一证据,至少重复两轮。先冷读,像陌生人一样描述图像,再与需求对比。测量主体边界框(关键帧至少约 1/3 帧高,除非需求要求小)、最小文字高度(1080p 下至少约 28 px)、主效果是否比背景更亮/对比更强。先渲染风险最高的静态帧并修复。完整渲染后生成联系表(scripts/contact_sheet.sh)从头到尾阅读。对关键动作提取间隔 0.1–0.2 秒的帧条带,检查跳变。正常速度观看,找出最弱时刻修复并重新渲染。可读性经验:英文文字动画完成后保持约 字母数/15 + 1.5 秒,中文约 字符数/4.5 + 1.5 秒;短片标题卡至少 2 秒。不要为适应而将 1080p 下文字缩小到约 28 px 以下。
  6. 交付前验证:运行 sh "$SKILL_DIR/scripts/check_video.sh" out/final.mp4 1920 1080 30 10 15(末尾加 1 或 0 要求或禁止音频流),报告分辨率、fps、时长、帧数、编解码器、像素格式、音频流及长度、黑段和冻结段,不匹配则失败。然后逐行对照 SPEC.md 与实际帧,编写 VERIFY.md,每条必须项标注通过/失败及时间戳或静帧。证据必须是像素所示,而非代码行为。
  7. 常见失败:视频过快或抖动(挂钟或 rAF 驱动动画)、首帧空白或字体错误(字体/图像加载前捕获)、粒子或纹理闪烁(每帧重绘随机性)、主体过小或偏边缘、主体不可识别、主效果弱、耗时重建模式或常数、文字重叠或出框、时长或 fps 偏差几帧、屏幕出现编造声明。
  8. 长片(1–2 分钟):编码前编写 STRUCTURE.md 规划结构,每个部分需有独立视觉状态,至少每几秒有有意义变化,变化节奏(早期钩子、中间至少一次加速和一次呼吸停顿、清晰结尾呼应开头),保持一个世界、一套调色板逻辑和一套字体系统,分阶段工作,先粗剪全长再逐段精修,仅重新渲染变更的块并重新拼接。检查每个部分的静帧,交付前至少完整观看两次。
  9. 无缝循环:需求要求循环时,使每个动画量的周期能整除循环长度(旋转、振荡、噪声偏移、相机路径、叠加颗粒)。

适用场景:讲解图、风格化动画、模拟与生成艺术、角色与生物运动、3D 场景与相机运动、动态图形与宣传、音乐与节拍同步视频等。限制:需要特定环境和工具链;无头 WebGL 可能较慢;部分依赖需要网络或模型权重;未提供收费、价格、平台或效果保证等信息。