这里写自定义目录标题
1.文字转音频
pip install edge-tts
import asyncio
import edge_tts
# --- 配置参数 ---
# TEXT:你想转换的知识点文本(这里拿今天大模型计划里的一句话举例)
TEXT = """
今天的大模型核心知识点是 Mixture-of-Experts 混合专家模型。
它的本质是通过门控网络,将不同的输入路由给特定的专家网络处理。
这种设计能在不增加推理计算量的前提下,大幅提升模型的参数规模。
掌握 MoE,就是掌握了万亿参数模型的敲门砖!
"""
# VOICE:发音人(zh-CN-XiaoxiaoNeural 是微软晓晓,非常自然的中文女声)
# 其他可选如:zh-CN-YunxiNeural(云希 男声)
VOICE = "zh-CN-XiaoxiaoNeural"
# OUTPUT_FILE:保存的音频文件名
OUTPUT_FILE = "moe_daily_knowledge.mp3"
# --- 核心异步函数 ---
async def generate_audio(text: str, voice: str, output_file: str) -> None:
"""
使用 edge-tts 将文本转为语音 MP3
"""
print(f"🎙️ 正在呼叫 AI 播音员 {voice}...")
# 初始化通信实例
communicate = edge_tts.Communicate(text, voice)
# 异步保存文件
await communicate.save(output_file)
print(f"✅ 转换完成!知识点已存为: {output_file}")
# --- 主程序入口 ---
if __name__ == "__main__":
# 使用 Python 原生的 asyncio 事件循环来运行
try:
asyncio.run(generate_audio(TEXT, VOICE, OUTPUT_FILE))
except Exception as e:
print(f"❌ 转换失败: {e}")
manim的使用
-
mac
brew install ffmpeg cairo pango pkg-config
brew install --cask mactex # 这个比较大,如果不想渲染复杂公式可以跳过
pip install manim -
windows:
-
https://docs.manim.community/en/stable/installation.html下载
from manim import *
class ConnectionPoolDemo(Scene):
def construct(self):
# 1. 创建标题
title = Text("SQLAlchemy 异步连接池", font_size=40).to_edge(UP)
self.play(Write(title))# 2. 画一个代表"连接池"的大框框,放在屏幕中间 pool_box = Rectangle(width=4, height=3, color=BLUE) pool_label = Text("Connection Pool", font_size=24).next_to(pool_box, UP) # 将连接池展示出来 self.play(Create(pool_box), Write(pool_label)) # 3. 在池子里画 3 个圆圈,代表三个空闲的"数据库连接" conn1 = Circle(radius=0.3, color=GREEN).move_to(pool_box.get_center() + LEFT) conn2 = Circle(radius=0.3, color=GREEN).move_to(pool_box.get_center()) conn3 = Circle(radius=0.3, color=GREEN).move_to(pool_box.get_center() + RIGHT) connections = VGroup(conn1, conn2, conn3) self.play(FadeIn(connections)) # 4. 模拟两个客户端请求(用三角形代替) req1 = Triangle(color=YELLOW).scale(0.3).to_edge(LEFT) req1_label = Text("Req 1", font_size=20).next_to(req1, DOWN) req_group1 = VGroup(req1, req1_label) req2 = Triangle(color=RED).scale(0.3).to_edge(RIGHT) req2_label = Text("Req 2", font_size=20).next_to(req2, DOWN) req_group2 = VGroup(req2, req2_label) self.play(FadeIn(req_group1), FadeIn(req_group2)) # 等待一秒钟,准备开始借用连接 self.wait(1) # 5. 高潮来了!演示借用连接的动画 # 请求 1 飞向连接 1 self.play(req_group1.animate.next_to(conn1, DOWN)) # 连接 1 变红色,表示"被占用" self.play(conn1.animate.set_color(RED), Indicate(conn1)) # 请求 2 飞向连接 3 self.play(req_group2.animate.next_to(conn3, DOWN)) # 连接 3 变红色 self.play(conn3.animate.set_color(RED), Indicate(conn3)) self.wait(2) # 6. 归还连接(还原为绿色) self.play( req_group1.animate.to_edge(LEFT).set_opacity(0), conn1.animate.set_color(GREEN) ) self.wait(1) self.play(FadeOut(Group(*self.mobjects))) # 优雅地结束
-
在终端里,跑这条神秘的指令(-p 代表渲染完自动播放,-qm 代表中等质量,渲染快):
manim -p -qm connection_pool.py ConnectionPoolDemo