slime/show/video/README.md

65 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 史莱姆搜索科普视频 · Manim / uv
以 `show/` 的教学实现与实测为基础。中文字幕、深色背景、16:9;绘图使用 Manim Community 的 Cairo 渲染器。
当前版本是带字幕的动画初稿,没有配音或背景音乐;渲染同时输出口播稿和可用于剪辑的 SRT 字幕。
## 环境与运行
需要 Python 3.12、uv,以及 Cairo/Pango 开发库。Ubuntu 常规安装:
```bash
sudo apt install build-essential python3-dev pkg-config libcairo2-dev libpango1.0-dev fonts-noto-cjk texlive-latex-extra dvisvgm
cd show/video
uv sync --locked
uv run python render.py --quality preview
uv run python render.py --quality final
uv run python verify.py --quality final
```
FFmpeg 由 `imageio-ffmpeg` 提供,渲染脚本会自动配置。数学公式使用 `MathTex` / LaTeX,中文说明使用 `Text` / Pango。
公式采用 Computer Modern 数学字体,指数、下标、取整分式与集合符号均由 LaTeX 排版。
渲染优先使用系统的 `latex`、`dvisvgm`;本环境的本地 TeX Live 已解包到 `.native/texlive`,随项目目录保留。
也可通过 `SLIME_TEX_ROOT` 指向相同目录结构的本地 TeX Live,`tex_environment.py` 会配置路径并构建 `latex.fmt`。
换一台机器时,请按上面的系统安装命令补齐工具链。
中文字体优先使用 Microsoft YaHei / Noto Sans CJK SC / WenQuanYi Zen Hei。
WSL 会尝试使用 `/mnt/c/Windows/Fonts/msyh.ttc`,也可设置 `SLIME_FONT_PATH` 为已有中文字体路径。
工程不复制或分发 Windows 字体。
安装方法依据 [Manim 官方安装文档](https://docs.manim.community/en/stable/installation/linux.html);
中文排版采用 [Text / Pango](https://docs.manim.community/en/stable/reference/manim.mobject.text.text_mobject.Text.html)。
`uv.lock` 锁定 Python 依赖,系统开发库不由 uv 管理。
## 场景与输出
- `SlimeFilm`:七个章节的完整动画。
- `ParallelEpisode`:问题、CPU、CUDA、固定坐标、outer sum。
- `RandomEpisode`:Random 性质、高位解析、结尾。
```bash
uv run python render.py --scene ParallelEpisode --quality preview
uv run python render.py --scene RandomEpisode --quality final
```
预览为 854×480 / 15 fps,正式画质为 1920×1080 / 30 fps。
`output/` 中会生成 MP4、SRT、口播稿、章节时间轴、视频规格记录和章节缩略图。
`verify.py` 会逐帧解码视频,并核对分辨率、字幕时间轴和源码/测速数据哈希。
字幕已显示在视频画面中,SRT 另外供剪辑软件使用,导入时无需重复叠加。
`output/`、`.venv/` 与 Manim 中间产物已忽略,不应提交大量渲染缓存。
## 编辑入口与数据口径
`scenes.py` 定义动画、字幕与停留时间。每个 `say()` 同时记录字幕时间轴,修改口播时请在这里修改。
字幕支持中文与 LaTeX 行内公式混排:`say(caption, seconds, display=r"中文 $2^{48}$")`。中文使用 Pango,`$...$` 内的公式使用 `MathTex`;`caption` 保留口播文字,供 SRT 与配音稿使用。时间轴同时保存实际画面用的 `display`,便于核对。
固定坐标与 outer sum 两章包含原始坐标公式分组、Java 回绕语义、广播相加的矩阵恒等式及 2×3 数值示例;完整推导见 [OUTER_SUM.md](OUTER_SUM.md)。
Random 章节逐步推导 XOR 常量的 35 位边界、输出高位平移、模 5 条件与回绕区间,并用数值例子解释 upper13 求解。完整数学与 effective seed 的区别见 [RANDOM_PROPERTIES.md](../RANDOM_PROPERTIES.md)。公式独立核验:`uv run python check_lower35.py`(逐个核对全部 8192 个高位,另核对完整 25 格区间求交)。
`data/benchmarks.json` 是渲染所用的固定数据快照,保留来源文件与 SHA256,避免一次视频渲染混入不同批次数据。
A/B/C 来自 `../results/latest.json`。
- A:65536 seed ×257²,CPU 搜索时间 / GPU scan。
- B:65536 seed ×4097²,只比较相同工作量的 02/03 kernel。
- C:1 seed ×8193²,重新测量 03,再比较 04 kernel。
不同组不连乘加速比。GPU diagram 简化线程数量;outer sum 图示为 5×5,实际 block 为 16×16。
Random 的高 16 位等价性质覆盖重抽路径,但后续首次输出候选模型仍可能漏掉依赖拒绝重抽的解。
独立筛轴章节已删除,历史结果见 [试错报告](../../research/XZ_FILTER_TRIAL_REPORT.md)。含旧章节的渲染视频、字幕与口播稿已删除;需用当前源码重新渲染。
最终视频须在配音、节奏审核后再作为发布版本。