#!/usr/bin/env python3
"""用TikTok印度视频做新闻播报"""
import subprocess, os, asyncio, edge_tts

os.chdir("/root/videos")

# 新顺序：前两个换成TikTok印度视频 + Coverr
clips = [
    ("news/tiktok_india_6566465209932713218.mp4", "印度风情", "印度是一个充满活力的人口大国，拥有悠久的历史文化和快速发展的现代经济。"),
    ("news/coverr_newsstand.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():
    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}")

    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)

    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())
