AI 生成: 一个基于 AI 的全自动短视频生成工具,输入主题即可自动生成脚本、配音、字幕和合成视频。使用 Python + Flask 提供 Web 界面,支持命令行模式。

This commit is contained in:
eeuse
2026-09-28 22:31:39 +08:00
commit 751c99a865
12 changed files with 570 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
# -*- coding: utf-8 -*-
"""命令行入口
用法:
python cli.py --topic "人工智能的未来" --scenes 5 --rate 160
"""
import argparse
import os
import sys
import uuid
from core.script_gen import generate_script
from core.tts import text_to_speech
from core.subtitle import build_srt
from core.video import compose_video
OUTPUT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "output")
def _probe_duration(path: str) -> float:
from moviepy.editor import AudioFileClip
clip = AudioFileClip(path)
dur = clip.duration
clip.close()
return float(dur)
def main():
parser = argparse.ArgumentParser(description="AI 全自动短视频生成器")
parser.add_argument("--topic", required=True, help="视频主题")
parser.add_argument("--scenes", type=int, default=5, help="场景数量(1-8)")
parser.add_argument("--rate", type=int, default=160, help="配音语速")
args = parser.parse_args()
if args.scenes < 1 or args.scenes > 8:
print("场景数需在 1-8 之间")
sys.exit(1)
job_id = uuid.uuid4().hex[:8]
job_dir = os.path.join(OUTPUT_DIR, job_id)
audio_dir = os.path.join(job_dir, "audio")
os.makedirs(audio_dir, exist_ok=True)
print(f"[1/4] 生成脚本...")
script = generate_script(args.topic, args.scenes)
for s in script:
print(f" {s['index']}. {s['text']}")
print(f"[2/4] 合成语音...")
audio_paths, durations = [], []
for s in script:
ap = os.path.join(audio_dir, f"{s['index']}.mp3")
text_to_speech(s["text"], ap, rate=args.rate)
audio_paths.append(ap)
durations.append(_probe_duration(ap))
print(f" {ap} ({durations[-1]:.2f}s)")
print(f"[3/4] 生成字幕...")
srt_path = os.path.join(job_dir, "subtitle.srt")
build_srt(script, durations, srt_path)
print(f" {srt_path}")
print(f"[4/4] 合成视频...")
video_path = os.path.join(job_dir, "video.mp4")
compose_video(script, audio_paths, durations, video_path)
print(f"\n✅ 完成:{video_path}")
if __name__ == "__main__":
main()