305 lines
7.8 KiB
Python
305 lines
7.8 KiB
Python
"""
|
||
AstrAI项目介绍视频 - 第一部分:开场白与项目定位
|
||
"""
|
||
from manim import *
|
||
|
||
|
||
class Part1_Intro(Scene):
|
||
"""第一部分:开场白与项目定位"""
|
||
|
||
def construct(self):
|
||
# === 场景1:Logo动画 ===
|
||
self.play_logo_intro()
|
||
|
||
# === 场景2:开场白 ===
|
||
self.play_opening_speech()
|
||
|
||
# === 场景3:核心要点展示 ===
|
||
self.play_key_points()
|
||
|
||
# === 场景4:项目名称与总结 ===
|
||
self.play_project_name()
|
||
|
||
def play_logo_intro(self):
|
||
"""Logo动画展示"""
|
||
# 创建AstrAI Logo样式
|
||
logo_text = Text(
|
||
"AstrAI",
|
||
font_size=72,
|
||
font="SimHei",
|
||
)
|
||
|
||
# 创建副标题
|
||
subtitle = Text(
|
||
"轻量级 Transformer 训练推理框架",
|
||
font_size=28,
|
||
font="SimHei",
|
||
color=GRAY
|
||
)
|
||
|
||
# 居中排列
|
||
logo_text.next_to(subtitle, UP, buff=0.3)
|
||
subtitle.next_to(logo_text, DOWN, buff=0.3)
|
||
|
||
# 初始状态
|
||
logo_text.set_opacity(0)
|
||
subtitle.set_opacity(0)
|
||
|
||
# 动画:淡入Logo
|
||
self.play(
|
||
FadeIn(logo_text, shift=UP * 0.5, scale=1.2),
|
||
run_time=1.5
|
||
)
|
||
|
||
# 动画:淡入副标题
|
||
self.play(
|
||
FadeIn(subtitle, shift=UP * 0.3),
|
||
run_time=1.0
|
||
)
|
||
|
||
# 短暂停留
|
||
self.wait(0.8)
|
||
|
||
# 淡出
|
||
self.play(
|
||
FadeOut(logo_text),
|
||
FadeOut(subtitle),
|
||
run_time=0.8
|
||
)
|
||
self.wait(0.5)
|
||
|
||
def play_opening_speech(self):
|
||
"""开场白"""
|
||
# 第一段文字
|
||
line1 = Text(
|
||
"在当下的大语言模型时代,",
|
||
font_size=32,
|
||
font="SimHei"
|
||
)
|
||
line1.to_edge(UP, buff=1.0)
|
||
|
||
self.play(Write(line1), run_time=1.0)
|
||
self.wait(0.5)
|
||
|
||
# 第二段文字
|
||
line2 = Text(
|
||
"我们见证了GPT、LLaMA等庞然大物。",
|
||
font_size=32,
|
||
font="SimHei"
|
||
)
|
||
line2.next_to(line1, DOWN, buff=0.3)
|
||
|
||
self.play(Write(line2), run_time=1.0)
|
||
self.wait(0.5)
|
||
|
||
# 第三段文字
|
||
line3 = Text(
|
||
"然而,这些模型对硬件要求极高,",
|
||
font_size=32,
|
||
font="SimHei"
|
||
)
|
||
line3.next_to(line2, DOWN, buff=0.3)
|
||
|
||
self.play(Write(line3), run_time=1.0)
|
||
self.wait(0.5)
|
||
|
||
# 第四段文字(关键问题)
|
||
line4 = Text(
|
||
"对于普通开发者来说往往遥不可及。",
|
||
font_size=32,
|
||
font="SimHei",
|
||
color=BLUE
|
||
)
|
||
line4.next_to(line3, DOWN, buff=0.3)
|
||
|
||
self.play(Write(line4), run_time=1.0)
|
||
self.wait(0.8)
|
||
|
||
# 思考问题
|
||
question = Text(
|
||
"我们能否创建一个既有用又能运行在普通电脑上的模型?",
|
||
font_size=28,
|
||
font="SimHei",
|
||
color=YELLOW
|
||
)
|
||
question.to_edge(DOWN, buff=1.5)
|
||
|
||
self.play(Write(question), run_time=1.5)
|
||
self.wait(1.0)
|
||
|
||
# 清除场景
|
||
self.play(
|
||
FadeOut(line1),
|
||
FadeOut(line2),
|
||
FadeOut(line3),
|
||
FadeOut(line4),
|
||
FadeOut(question),
|
||
run_time=0.8
|
||
)
|
||
self.wait(0.5)
|
||
|
||
def play_key_points(self):
|
||
"""核心要点展示"""
|
||
# 标题
|
||
title = Text(
|
||
"AstrAI 的核心特点",
|
||
font_size=40,
|
||
font="SimHei",
|
||
color=WHITE
|
||
)
|
||
title.to_edge(UP, buff=0.8)
|
||
|
||
self.play(Write(title), run_time=1.0)
|
||
self.wait(0.5)
|
||
|
||
# 要点1:轻量级
|
||
point1_title = Text(
|
||
"轻量级",
|
||
font_size=36,
|
||
font="SimHei",
|
||
color=GREEN
|
||
)
|
||
point1_title.to_edge(LEFT, buff=2.0).shift(UP * 0.5)
|
||
|
||
point1_content = Text(
|
||
"1B参数,中英双语",
|
||
font_size=24,
|
||
font="SimHei",
|
||
color=GRAY
|
||
)
|
||
point1_content.next_to(point1_title, DOWN, buff=0.2)
|
||
point1_content.align_to(point1_title, LEFT)
|
||
|
||
self.play(
|
||
Write(point1_title),
|
||
Write(point1_content),
|
||
run_time=1.0
|
||
)
|
||
self.wait(0.8)
|
||
|
||
# 要点2:完全自研
|
||
point2_title = Text(
|
||
"完全自研",
|
||
font_size=36,
|
||
font="SimHei",
|
||
color=BLUE
|
||
)
|
||
point2_title.next_to(point1_title, DOWN, buff=0.8)
|
||
point2_title.align_to(point1_title, LEFT)
|
||
|
||
point2_content = Text(
|
||
"核心代码全部开源",
|
||
font_size=24,
|
||
font="SimHei",
|
||
color=GRAY
|
||
)
|
||
point2_content.next_to(point2_title, DOWN, buff=0.2)
|
||
point2_content.align_to(point2_title, LEFT)
|
||
|
||
self.play(
|
||
Write(point2_title),
|
||
Write(point2_content),
|
||
run_time=1.0
|
||
)
|
||
self.wait(0.8)
|
||
|
||
# 要点3:训练推理一体化
|
||
point3_title = Text(
|
||
"训练推理一体化",
|
||
font_size=36,
|
||
font="SimHei",
|
||
color=ORANGE
|
||
)
|
||
point3_title.next_to(point2_title, DOWN, buff=0.8)
|
||
point3_title.align_to(point1_title, LEFT)
|
||
|
||
point3_content = Text(
|
||
"从预训练到推理,一套全搞定",
|
||
font_size=24,
|
||
font="SimHei",
|
||
color=GRAY
|
||
)
|
||
point3_content.next_to(point3_title, DOWN, buff=0.2)
|
||
point3_content.align_to(point3_title, LEFT)
|
||
|
||
self.play(
|
||
Write(point3_title),
|
||
Write(point3_content),
|
||
run_time=1.0
|
||
)
|
||
self.wait(1.0)
|
||
|
||
# 清除场景(保留标题)
|
||
self.play(
|
||
FadeOut(point1_title),
|
||
FadeOut(point1_content),
|
||
FadeOut(point2_title),
|
||
FadeOut(point2_content),
|
||
FadeOut(point3_title),
|
||
FadeOut(point3_content),
|
||
run_time=0.5
|
||
)
|
||
self.wait(0.3)
|
||
|
||
def play_project_name(self):
|
||
"""项目名称与总结"""
|
||
# 项目名称 - 使用普通颜色避免兼容性问题
|
||
project_name = Text(
|
||
"AstrAI",
|
||
font_size=80,
|
||
font="SimHei",
|
||
color=BLUE
|
||
)
|
||
project_name.center()
|
||
|
||
# 动画:放大出现
|
||
self.play(
|
||
project_name.animate.scale(1.2),
|
||
run_time=1.5
|
||
)
|
||
self.wait(1.0)
|
||
|
||
# 补充说明
|
||
tagline = Text(
|
||
"1B参数 · 中英双语 · 完全自研 · 训练推理一体化",
|
||
font_size=24,
|
||
font="SimHei",
|
||
color=YELLOW
|
||
)
|
||
tagline.next_to(project_name, DOWN, buff=0.5)
|
||
|
||
self.play(Write(tagline), run_time=1.0)
|
||
self.wait(1.0)
|
||
|
||
# 淡出结束
|
||
self.play(
|
||
FadeOut(project_name),
|
||
FadeOut(tagline),
|
||
run_time=1.0
|
||
)
|
||
self.wait(0.5)
|
||
|
||
|
||
# 配置类
|
||
class AstrAIVideoConfig:
|
||
"""视频配置"""
|
||
video_quality = "high_quality" # high_quality, production_quality
|
||
preview = True # 是否预览
|
||
save_last_frame = True # 保存最后一帧
|
||
|
||
|
||
if __name__ == "__main__":
|
||
# 运行配置
|
||
config = AstrAIVideoConfig()
|
||
|
||
# 渲染视频
|
||
if config.preview:
|
||
# 预览模式
|
||
from manim import *
|
||
scene = Part1_Intro()
|
||
scene.render()
|
||
else:
|
||
# 渲染视频文件
|
||
# manim -pql main.py Part1_Intro
|
||
# manim -pqh main.py Part1_Intro
|
||
pass |