#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
生成"韩寒创业简史 中"的英文TTS视频片段
"""

import os
import subprocess
import glob


def get_tts_files(tts_dir):
    """
    获取TTS文件列表，按序号排序
    """
    pattern = os.path.join(tts_dir, "tts_*.mp3")
    files = glob.glob(pattern)
    
    # 提取序号并排序
    tts_files = []
    for file in files:
        filename = os.path.basename(file)
        # 提取序号，格式为 tts_{idx:03d}.mp3
        try:
            idx = int(filename.split('_')[1].split('.')[0])
            tts_files.append((idx, file))
        except:
            continue
    
    # 按序号排序
    tts_files.sort(key=lambda x: x[0])
    return tts_files


def create_video_segment(image_path, audio_path, output_path):
    """
    创建视频片段
    """
    try:
        cmd = [
            "ffmpeg", "-y",
            "-loop", "1",
            "-i", image_path,
            "-i", audio_path,
            "-c:v", "libx264",
            "-tune", "stillimage",
            "-c:a", "aac",
            "-b:a", "192k",
            "-pix_fmt", "yuv420p",
            "-shortest",
            output_path
        ]
        
        result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8', errors='ignore')
        return result.returncode == 0
    except Exception as e:
        print(f"  错误: {e}")
        return False


def generate_videos(image_dir, tts_dir, output_dir):
    """
    生成所有视频片段
    """
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
        print(f"创建输出目录: {output_dir}")
    
    # 获取TTS文件
    tts_files = get_tts_files(tts_dir)
    print(f"找到 {len(tts_files)} 个TTS文件")
    
    # 生成每个视频片段
    for idx, tts_path in tts_files:
        # 构建图片路径
        image_path = os.path.join(image_dir, f"vertical_subtitle_{idx:03d}.png")
        
        # 检查图片是否存在
        if not os.path.exists(image_path):
            print(f"  警告: 图片不存在 - {image_path}")
            continue
        
        # 构建输出路径
        output_path = os.path.join(output_dir, f"video_{idx:03d}.mp4")
        
        # 如果视频已存在，跳过
        if os.path.exists(output_path):
            print(f"视频片段 {idx:03d} 已存在，跳过...")
            continue
        
        # 创建视频片段
        print(f"正在生成视频片段 {idx:03d}...")
        if create_video_segment(image_path, tts_path, output_path):
            print(f"  成功: {output_path}")
        else:
            print(f"  失败: video_{idx:03d}.mp4")
    
    print(f"\n完成！视频片段保存到: {output_dir}")


if __name__ == "__main__":
    image_dir = "韩寒创业简史_中集_subtitle_images"
    tts_dir = "韩寒创业简史_中集_tts"
    output_dir = "韩寒创业简史_中集_tts_videos"
    
    print("开始生成英文TTS视频片段")
    print(f"图片目录: {image_dir}")
    print(f"TTS目录: {tts_dir}")
    print(f"输出目录: {output_dir}")
    
    generate_videos(image_dir, tts_dir, output_dir)
