python如何调用openai的api实现知识讲解类动画讲解视频的合成?
通过ai返回多个镜头的json元素(文本,旁白,时间,svg),最后python合成一个视频输出?
网友回复
用 OpenAI 生成分镜脚本与配音,再用 Manim 的 LaggedStart 批量、有节奏地呈现字幕/公式,实现讲解视频的自动生成。
流程概览
生成脚本与分镜:OpenAI 产出 JSON(每个场景包含标题、要点、公式、朗读文本、动画节奏参数)
文本转语音:OpenAI TTS(gpt-4o-mini-tts)生成每个场景的配音
Manim 渲染:用 LaggedStart 让每个场景的元素依次出现,并与配音对齐
合成导出:直接在 Manim 中 add_sound 对上时间轴,或用 moviepy 后期合成
依赖安装
Manim(建议 conda):conda install -c conda-forge manim ffmpeg
PIP 依赖:pip install openai pydub
字体/LaTeX:中文用 Noto Sans CJK/思源黑体;若用 MathTex 渲染公式,需要系统装 TeX(如 TeX Live)
一、脚本与配音生成(ai_gen.py)
作用:给一个主题,得到结构化分镜 JSON,并为每个场景生成独立配音音频,自动记录时长用于对齐
运行前:导出 OPENAI_API_KEY 环境变量
# ai_gen.py import os, json, sys from pathlib import Path from pydub import AudioSegment from openai import OpenAI client = OpenAI() OUT_DIR = Path("ai_out") AUDIO_DIR = OUT_DIR / "audio" OUT_DIR.mkdir(exist_ok=True, parents=True) AUDIO_DIR.mkdir(exist_ok=True, parents=True) SYSTEM = "你是一个面向科普视频的分镜脚本生成器,输出严格的JSON。" SCHEMA_HINT = """ 请仅输出 JSON(不要加解释、不要代码块)。结构: { "title": "视频总标题", "scenes": [ { "title": "场景标题", "lag_ratio": 0.15, "anim_time": 3.0, "elements": [ {"type": "text", "content": "要点1", "pos": "left"}, {"type": "formula", "content": "E=mc^2"} ], "voiceover": "本场景的配音全文,口语化,10-20秒。" } ] } 要求: - 场景数 2-4 个,每场景 2-5 个 elements,适合 30-90 秒短视频。 - 文字简洁、直观;尽量避免生僻字。 - formula 用 LaTeX 可选(如 \\frac, ^2 等),不含中文。 """ def gen_script(topic: str): prompt = f"主题:{topic}\n{SCHEMA_HINT}" resp = client.chat.completions.create( model="gpt-4o-mini", temperature=0.7, messages=[ {"role":"system","content": SYSTEM}, {"role":"user","content": prompt} ], response_format={"type": "json_object"} ) data = resp.choices[0].message.content return json.loads(data) def tts_to_file(text: str, out_path: Path, voice="alloy"): out_path.parent.mkdir(parents=True, exist_ok=True) # 使用 OpenAI TTS(gpt-4o-mini-tts) with client.audio.speech.with_streaming_response.create( model="gpt-4o-mini-tts", voice=voice, input=text ) as response: response.stream_to_file(out_path) def main(): topic = "为什么天空是蓝色的" if len(sys.argv) > 1: topic = " ".join(sys.argv[1:]) script = gen_script(topic) # 为每个场景生成配音并记录时长 for i, sc in enumerate(script["scenes"], s...
点击查看剩余70%
如何编写一个chrome插件实现多线程高速下载大文件?
cdn版本的vue在网页中出现typeerror错误无法找到错误代码位置怎么办?
pywebview能否使用webrtc远程控制共享桌面和摄像头?
pywebview6.0如何让窗体接受拖拽文件获取真实的文件路径?
如何在linux系统中同时能安装运行apk的安卓应用?
python有没有离线验证码识别ocr库?
各家的ai图生视频及文生视频的api价格谁最便宜?
openai、gemini、qwen3-vl、Doubao-Seed-1.6在ui截图视觉定位这款哪家更强更准?
如何在linux上创建一个沙箱隔离的目录让python使用?
pywebview如何使用浏览器自带语音识别与webspeech 的api?