#!/usr/bin/env python3
"""重新制作 - 前两个换成真实视频"""
import subprocess
import os
import asyncio
import edge_tts

os.chdir("/root/videos")

# 新的素材顺序 - 前两个换成真实视频
clips = [
    ("news/mixkit_aerial_city.mp4", "城市航拍", "从空中俯瞰现代都市，高楼林立，车水马龙，这就是我们生活的城市。"),
    ("news/mixkit_people_walking.mp4", "行人匆匆", "每个人都有自己的故事，在城市的街头巷尾，人们用脚步丈量着生活的温度。"),
    ("clip_02.mp4", "人间故事", "每个人都有自己的精彩，平凡中的不凡，世界各地的人们用善良和勇气书写着动人故事。"),
    ("clip_03.mp4", "运动激情", "运动不分国界，每一次拼搏都是对自我的超越，体育精神让世界更加团结。"),
    ("clip_04.mp4", "自然之美", "地球上的每一个生命都值得被尊重，保护环境，守护我们共同的家园。"),
    ("clip_05.mp4", "美食文化", "食物是文化的载体，每一道菜背后都有一个民族的历史与记忆。"),
    ("clip_06.mp4", "音乐无界", "音乐是世界的语言，跨越文化和地域的隔阂，触动每一颗心灵。"),
    ("clip_07.mp4", "商业风云", "全球经济格局正在重塑，新兴市场崛起，数字经济成为增长新引擎。"),
    ("news/mixkit_nature_forest.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(clips):
        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(clips):
        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} -> {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", "/tmp/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())
