样片 - ZLHad/OpenVideoHarness GitHub Wiki

English · 中文

这一页的每支片子,都是 agent 只看本仓库的文档做出来的。每个目录都留着需求、分镜、审阅记录、返工记录和全部源码,可以直接拿来当同类视频的起点。README 里放的是压缩过的无声 GIF 预览,带声音的原片在各目录的 media/final.mp4。

五支 showcase

# 片子 类型 · 引擎 规格 看点
00 发布短片 发布片 · HyperFrames 20 秒,1920×1080,代码作曲的配乐和 41 个音效 只用真实素材做发布片:bin/vh new 的真实输出,一字不改的路由表。快照轮、draft 和一轮全新上下文的评审,每个 FAIL 和修法都记在 NOTES.md。电子乐配乐的小节头都落在切点上
01 Clawd 和落叶 手绘 · ClaudeAnimationBase(p5.brush) 12 秒,1920×1080,24 fps,卡通配乐和 38 个音效 把 reads 当时间表用;三轮自查,看联系表、strip 和 crop,记下并修掉约 20 个 FAIL。垫乐跑在动画自己的 120 BPM 网格上,音效跟着动作一下一下对上
02 为什么低轨卫星的信号会变调? 知识短视频 · HyperFrames 24.8 秒,1080×1920,中文旁白、一段轻配乐、23 个音效 关掉声音也看得懂:中文字幕烧在画面里,图表按真实的轨道数据算出来,唯一一处夸张在画面上注明了。卫星的信标听得见,音高跟着图表上的多普勒曲线走
03 用正弦波拼出方波 数学讲解 · Manim CE 25 秒,1920×1080,英文旁白和毡锤钢琴配乐 3Blue1Brown 式的配色纪律;全新上下文的 reviewer 说"这样不能发",终版改掉了它指出的四处问题。每加一个谐波,就多响一个它自己的音
04 介绍片 v5(中文说明) 发布片 · Blender + HyperFrames + Three.js 103 秒,1920×1080,30 fps,有声音(成片) 立意是"每颗星都是一支片子"。开场 15.8 秒用代码驱动 Blender 路径追踪:118 万颗星组成的星系坍缩、爆开,再被压成一片影片之海。之后 WebGL 用同一个相机接过来,再一镜到底穿过整个仓库,配乐是代码写的,124 个音效事件。目录里留着完整经过:关卡 ① 的意见("不够震撼")、WebGL 的 look-dev、第一版 Blender,用户授权跳过关卡 ②③、由全新上下文的 reviewer 代审,以及 150.5 秒那版看着太慢、重新调到 103 秒的经过。上一版 v3(81 秒,一镜到底)留在 v3/

每个目录里有:BRIEF.md、STYLE.md、STORYBOARD.md、NOTES.md(决定、事实核对、每一轮评审)、LESSONS.md、源码(index.html、compositions/、src/ 或 scenes/),以及 media/ 下的 final.mp4、GIF 预览和联系表。00–03 还有 audio/(配乐、音效时间表、节拍表,02 和 03 还有旁白稿和时间表)和 tools/build_audio.sh。04 还有 REVIEW.md 和 DECISIONS.md、放开场场景代码的 blender/,以及放上一版的 v3/。各目录的 README 还写了文档帮上了什么忙、agent 在哪里卡住了,想改进这套工作台的话很值得一看。

00–03 的声音

这四支片子是先做完、定稿时没有声音的,声音是照着已经定稿的画面后来配上去的,画面的时间一帧没动。每份配乐和每张音效表都是代码(audio/score.json、audio/events.json,每个事件的时间都取自场景代码),按各自类型的 profile 混音(promo、cartoon、short、explainer),tools/build_audio.sh 能把声音重建出来,每次字节相同。

  • 用仪器检查过。 没有数字静音、掉音和抽吸;每个声音卡点都在 1 帧以内(00 是 29 个里 29 个,01 是 30 个里 30 个,02 是 18 个里 18 个;03 的声音都是渐入的,没有可检查的起音卡点);四支都在 −14.0 LUFS,AAC 编码之后真峰值低于 −1.5 dBTP。
  • 旁白是 AI 合成的(Gemini TTS,带听不出来的 SynthID 水印):02 的中文用音色 Aoede,03 的英文用音色 Iapetus。合成的几条没法重新生成,所以每条旁白的母带都以无损 FLAC 存在仓库里,NOTES 里也写明了。
  • 色彩。 01 和 03 重新编码成了有限范围的 BT.709,四个色彩标签写全,因为浏览器读它们原来的标签(01)或缺失的标签(03)和 ffmpeg 读出来不一样,饱和色会偏。00 和 02 本来就是对的。
  • 词级时间。 02 和 03 的旁白现在每句都有词级时间和语音识别核对,字幕有了逐词的时间,混音报告也改成逐词查有没有被盖住。维护者去听被标出来的几处时,听到 02 把"2 GHz"念成了一个个字母;这一句按口语写法重新合成,字幕仍写 GHz。
  • 音效按新的音效引擎重渲过:每个事件有自己的 variant,反复出现的转场和拟音每一下都略有不同(叮这类提示音保持不变)。
  • 还没做的。 维护者听过最初几版候选混音和 02 里被标出来的几处旁白,还没有从头到尾听过现在这几版定稿的 profile 混音。

介绍片的开场是怎么做的

blender/galaxy.py 用 numpy 逐帧算出 118 万颗星、1.6 万张靠近镜头时会变成玻璃卡片的"片星",以及从镜头前掠过的那层卡片的位置,写进网格,再让 Cycles 渲这一帧。运动模糊来自每个点的 velocity 属性和相机的逐帧关键帧;旋臂光雾、尘埃带和爆开的气体都是由数学式编译成的体积着色器。Blender 在沙箱里跑,分块、可以续渲。同一份 galaxy.py 还导出每张卡片的格位和相机,WebGL 用同一个相机重画同一批卡片,两边在 15.0–15.6 秒交叉溶解。接下来的网格和终端是 WebGL 和 DOM,终端里打出一句需求(showcase 02 那个问题);25 秒起正文跟着这句需求穿过 v3 的一镜到底世界(9 类里它那一类亮起来,关卡的门是它的大纲、分镜、初版,成片处播的就是它),数字更新到现在的仓库,加了 31 种风格的样片墙,路径两边飘着开场的那些片子。细节和复现命令见这支片子的 README,踩过的坑见 engines/blender.md 的"大场景"一节。

31 段风格样片

styles/ 里每个预设都有一段 5 秒、1280×720 的样片,配乐也是各自用代码写的:

  • 样片:styles/<slug>/media/swatch.mp4,旁边是封面帧;
  • 源码:styles/<slug>/swatch.js(画面;tabletop-miniature 是 Blender 场景 swatch.py)、score.json(配乐)和 events.json(音效);
  • 31 段合在一起:gallery.jpg 和 styles-gallery.mp4(在 Release media 里),合集里每段都带自己的声音。

所有样片内容相同,风格之间可以直接对比。31 份配乐各有自己的体裁、乐器和空间,它们量出来彼此差多远、这把尺子又有哪些听不出来,见风格库。

也值得看

案例库拆解了社区里用同样方法做出来的片子,从 156 秒的手绘 MV 到 5 分钟的 WebGL 历史片。原片链接在 README 的"社区里的同类作品"一节。

放上你的片子

用这套工作台做出来的片子,欢迎通过 PR 放进 showcase/:带上需求、分镜、记录、经验和源码;视频本身放进 Release media,不进 git(步骤见 CONTRIBUTING)。见参与贡献。

⚠️ **GitHub.com Fallback** ⚠️