Communitygithub.com

Moh4696/电影级影片

完全通过代码生成旁白电影,任意主题皆可。一个连续镜头滑过由照片、文档、卡片、地图和数字构成的设计世界,每个印章、高亮和数字都精准落在旁白者的字词上,并配有音效、可选配乐和硬字幕。适用于纪录片、历史、产品发布、品牌与创始人故事、科技讲解、传记和真实案件。涵盖脚本、来自任何 TTS 的配音。

电影级影片 是什么?

该技能(cinematic-film)允许AI代理通过Python和Skia完全从代码生成叙事电影,无需传统视频编辑。它创建了一个连续镜头,滑过一个包含照片、文档、地图和数字的单一设计世界,所有视觉元素(印章、高亮、文字)都精确同步到旁白的每个字词。该过程包括自动脚本编写、节拍表生成、从Wikimedia Commons获取图像、TTS语音合成、资产准备、渲染、音效合成和字幕烧录。它支持多种美学风格(如历史、产品、科技和太空主题)以及从25秒预告片到90秒纪录片的项目长度。该技能内置于一个关于Al Capone的5分22秒纪录片的实际经验中,并抽象成一套严格的规则和可重复的工作流程,具有四个用户批准关卡。它需要Python 3.9+、skia-python、numpy、pillow和ffmpeg,并在macOS、Linux和Windows上运行良好,附带多个检查脚本以确保正确设置。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Moh4696/cinematic-skill/tree/HEAD/skills/cinematic-film

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

电影级影片 是做什么的?

这种方式制作的影片是单一摄像机在一个世界中的一次移动。每张照片、卡片、剪报、地图和数字都位于一个大板上,摄像机随着故事的推进,沿线条、路线和箭头在这些元素之间移动。每个视觉元素的出现时间都与旁白者所说的词语精确同步。这一切都由代码(Skia in Python)实现,因此每次渲染结果一致,任何主题都适用,新的语音会自动重新调整整个影片的时间。

基于一部关于 Al Capone 的 5 分 22 秒纪录片构建,随后开放给任何主题。这里的规则是根据制作过程中遇到的问题编写而成。

工具

文件功能
scripts/check_setup.py检查 Python、skia-python、ffmpeg、字体和内存;说明需要安装什么
scripts/get_fonts.py获取开源字体(Bebas Neue、Homemade Apple),用于此机器缺少的任何文字角色
scripts/new_project.py从 assets/template/(一个可运行的解说片)或使用 --example 从纪录片示例开始一个项目
scripts/make_beats.py编写 beats.md,即您需要审批的表格;检查时间顺序、行长度、口语文本中的数字
scripts/tts_say.py免费草稿语音(macOS say、espeak-ng 或任何 TTS 命令),在最终语音前为影片计时
scripts/split_takes.py将整段录音剪辑为每行一个片段,并标记可疑的剪切
scripts/build_narration.py将各行拼接成 audio/narration.m4a 和 audio/timing.json,这是构建影片的基础
scripts/fetch_commons.py搜索 Wikimedia Commons,下载并附带许可证和署名,拒绝非自由文件,编写 credits.md
scripts/make_map.py投影公共领域边界(任何国家或地区)以生成地图
scripts/prep_assets.py将所有图像分级为统一外观(黑白、怀旧或自然色);生成板纹理
scripts/engine.py影片引擎:摄像机、聚光灯、项目、地图、外观、影片输出
scripts/render.py静态帧、接触条、提示列表以及并行 MP4 渲染
scripts/build_sfx.py根据提示列表合成所有音效(无样本,无需许可)
scripts/mix_soundtrack.py语音、效果和可选音乐,经过闪避和响度标准化
scripts/burn_captions.py将四种字幕样式之一烧录到完成的影片中,并编写 SRT

需要 Python 3.9+、pip install skia-python numpy pillow(scipy 可选)和 ffmpeg。首先运行 scripts/check_setup.py;在 Linux 或 Windows 上,还需每个项目运行 scripts/get_fonts.py。所有命令都接受 --project <folder> 参数。

选择影片风格

类型外观图像典型项目
历史、真实犯罪、调查wall, slate档案照片和文档,分级为 bw印刷品、撕裂的剪报、印章、红线、地图路线
产品发布、品牌或创始人故事studio, charcoal您的产品照片和团队照片,分级为 natural卡片、大数字、计数器、箭头
科学、工程、工作原理blueprint, paper图表、档案或 AI 静帧卡片、计数器、笔迹、地图
科技、太空、预告片night截图、渲染图、AI 静帧大号字体、计数器、路线、卡片

可自由混搭:外观是板和输出效果,每个项目在任何外观下都可用。references/story.md 为每种类型提供了故事结构。

规则

  1. 每行一个主角。每行旁白恰好有一个摄像机的焦点。聚光灯会调暗其他所有内容。
  2. 画面落在口述词语上。印章应在“指控”一词时落下,而不是在行开头。使用 doc.W(line, "word") 为所有内容计时。
  3. 以单一方式展示短语。要么在屏幕上打字,要么在真实文档上显示,切勿同时进行。文档中的正文内容为灰色行,无需填充词。
  4. 开场后时间只向前移动。冷开场可以向前跳转。经过一个过渡行(“四年前……”)后,故事时间只能向前。
  5. 文字需在手机上于一秒内可读。使用大号紧凑大写字母。屏幕上的打字标签应约为画面高度的 3% 或更多。
  6. 少即是多。线条在其节拍结束后淡出,旧项目变暗。最后的拉远镜头应显得构图精美,而非杂乱。
  7. 不虚构看似真实的内容。真实照片和文档需附署名。由代码绘制的文档需标记为“再现”,并仅引用真实书写过的词语。AI 图像可用于说明,但绝不能作为真实事件或真实人物的证据。

工作流程

在四个关卡(标记为 关卡)处等待用户审批。

  1. 故事。研究,然后编写 script.json:场景(段落)行,每行包含 text、spoken(数字用文字表示)、hero 和 typed。将事实笔记保留在旁边。60 到 90 秒大约 150 到 230 个词。详情见 references/story.md。
  2. 节拍表。运行 scripts/make_beats.py 并修复所有 lint 警告。关卡: 用户审批 beats.md,包括事实。
  3. 图像。在 photos.json 中列出每张图像:其 ID、种类和来源。
    • 档案图像:使用 fetch_commons.py search、category 和 get。
    • 用户自己的文件:放入 <project>/assets/photos/。
    • AI 静帧:以统一风格生成(motion-assets 技能会规划和定价)。
    • references/archive.md 涵盖其他档案和版权规则。
  4. 草稿语音。运行 tts_say.py,然后 split_takes.py,再 build_narration.py。听取 split_takes.py 标记的每一行。现在时间数据已真实。
  5. 资产。如果故事涉及移动,运行 make_map.py,然后 prep_assets.py。
  6. 场景。编写 scene.py:按场景将项目分簇布局,在 doc.L/doc.W 时间点上添加项目,然后设置摄像机和聚光灯关键帧(film.shot)。阅读 references/film.md。两个已交付项目展示了模式:assets/template/scene.py(解说片,工作室外观)和 assets/wright-flyer/scene.py(纪录片,包含所有项目类型)。
  7. 外观测试。以 1280x720 分辨率对每行运行 render.py --probe,生成一张静帧并查看所有;然后对每个大摄像机移动运行 --strip。关卡: 向用户展示开场静帧和外观。
  8. 草稿。使用草稿语音以 1280x720 渲染前 30 秒。关卡: 用户观看它。
  9. 最终语音。使用任何 TTS 或真人录制(references/voice.md)。再次运行分割、构建和探针;场景中无需更改。
  10. 音效。运行 render.py --cues,然后 build_sfx.py,再 mix_soundtrack.py,如有需要可添加配乐。阅读 references/sound.md。
  11. 完成。执行完整渲染,然后 burn_captions.py 和 SRT。在渲染 1440p 或 4K 前阅读 references/performance.md。随影片交付 credits.md。

每次自我检查

在声称任何内容有效之前,先查看静帧。以下是在实际渲染中出现的每个错误:

  • 深色墨水在深色板上不可见。在暗色外观上使用浅色字体,或对暗色字体使用 bar_h=0.92 以添加完整标签块背景。
  • 摄像机已移动但聚光灯留在原地,导致画面变暗。除非需要分离,否则应使用 film.shot()。
  • 地图比例太小:整条海岸线比一张照片还小。选择 K 使每个有印刷品的地点有独立空间(references/film.md)。
  • 地图标签重叠。将标签放在远离相邻标签的一侧。
  • 集群跨越地图边缘。将集群保持在地图内或明显位于地图外。
  • 高亮部分偏离文字几个像素。使用 PaperDoc.phrase_spans,以及 doc.on(print, fx, fy),其中分数是从图像上的网格叠加读取的。

已交付项目

  • assets/template/:“From Cherry to Cup”,一个 25 秒的解说片,采用工作室外观,由卡片、箭头和计数器组成,无图像。new_project.py my-film 会复制它。赋予它一个草稿语音即可渲染。
  • assets/wright-flyer/:“Twelve Seconds”,一个 90 秒的纪录片,讲述首次飞行和一位两次坠毁的 5 万美元竞争对手的故事。它使用了七张公共领域照片、美国地图、两种排版文档和所有项目类型。
python3 scripts/new_project.py wright --example
python3 scripts/fetch_commons.py get --project wright
python3 scripts/make_map.py --project wright && python3 scripts/prep_assets.py --project wright
python3 scripts/tts_say.py --project wright && python3 scripts/split_takes.py --project wright && python3 scripts/build_narration.py --project wright
python3 scripts/render.py --project wright --size 1280x720 --out out/draft.mp4 --audio audio/narration.m4a

相关技能

来自 Open 3D Skills:motion-assets 在影片需要插图时规划和定价 AI 静帧,frame-capture 录制网页而非代码绘制的影片。

相关技能