#!/usr/bin/env python3
"""给已有clip加TTS音频 - 直接copy视频流，不重编码"""
import subprocess
import os
import asyncio
import edge_tts

os.chdir("/root/videos")

scripts = [
    ("clip_00.mp4", "科技前沿", "AI人工智能正在改变我们的生活，自动驾驶、智能医疗、无处不在的科技，正在重塑我们的未来。"),
    ("clip_01.mp4", "城市脉搏", "全球城市化进程加速，智慧城市成为新方向，科技与人文在霓虹灯下交汇。"),
    ("clip_02.mp4", "人间故事", "每个人都有自己的精彩，平凡中的不凡，世界各地的人们用善良和勇气书写着动人故事。"),
    ("clip_03.mp4", "运动激情", "运动不分国界，每一次拼搏都是对自我的超越，体育精神让世界更加团结。"),
    ("clip_04.mp4", "自然之美", "地球上的每一个生命都值得被尊重，保护环境，守护我们共同的家园。"),
    ("clip_05.mp4", "美食文化", "食物是文化的载体，每一道菜背后都有一个民族的历史与记忆。"),
    ("clip_06.mp4", "音乐无界", "音乐是世界的语言，跨越文化和地域的隔阂，触动每一颗心灵。"),
    ("clip_07.mp4", "商业风云", "全球经济格局正在重塑，新兴市场崛起，数字经济成为增长新引擎。"),
    ("clip_08.mp4", "科技展望", "从人工智能到量子计算，前沿科技不断突破，人类社会正在迈向一个全新的时代。"),
]

async def gen_tts(text, out):
    c = edge_tts.Communicate(text, "zh-CN-YunxiNeural", rate="+5%")
    await c.save(out)

async def main():
    # Step 1: TTS
    print("Step 1: TTS...")
    tts_files = []
    for i, (clip, title, desc) in enumerate(scripts):
        out = f"tts_{i:02d}.mp3"
        await gen_tts(desc, out)
        tts_files.append(out)
        print(f"  {out}")

    # Step 2: 直接加音频（不重编码视频）
    print("\nStep 2: 加音频...")
    combined = []
    for i, (clip, title, desc) in enumerate(scripts):
        tts = tts_files[i]
        out = f"audio_{i:02d}.mp4"
        cmd = [
            "ffmpeg", "-y",
            "-i", clip, "-i", tts,
            "-c:v", "copy",
            "-c:a", "aac", "-b:a", "128k",
            "-map", "0:v:0", "-map", "1:a:0",
            "-shortest",
            "-movflags", "+faststart",
            out
        ]
        r = subprocess.run(cmd, capture_output=True, text=True)
        if r.returncode != 0:
            print(f"  ERROR clip {i}: {r.stderr[-100:]}")
        else:
            sz = os.path.getsize(out)
            print(f"  {clip} + {tts} -> {out} ({sz//1024}KB)")
        combined.append(out)

    # Step 3: 拼接
    print("\nStep 3: 拼接...")
    with open("concat.txt", "w") as f:
        for c in combined:
            f.write(f"file '{c}'\n")
    r = subprocess.run([
        "ffmpeg", "-y", "-f", "concat", "-safe", "0", "-i", "concat.txt",
        "-c", "copy", "-movflags", "+faststart",
        "merged.mp4"
    ], capture_output=True, text=True)
    if r.returncode != 0:
        print(f"  ERROR: {r.stderr[-200:]}")
        return

    subprocess.run(["cp", "merged.mp4", "/root/.hermes/webchat/static/news-broadcast.mp4"])
    size = os.path.getsize("merged.mp4")
    dur = float(subprocess.run(
        ["ffprobe", "-v", "quiet", "-show_entries", "format=duration", "-of", "csv=p=0", "merged.mp4"],
        capture_output=True, text=True
    ).stdout.strip())
    print(f"\n✅ 完成！时长: {dur:.0f}秒, 大小: {size//1024//1024}MB")
    print(f"   观看: http://157.173.212.215:8080/news-broadcast.mp4")

asyncio.run(main())
