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

import os
import subprocess
import glob


def get_audio_files(audio_dir):
    """
    获取音频文件列表，按序号排序
    """
    pattern = os.path.join(audio_dir, "seg*.mp3")
    files = glob.glob(pattern)
    
    # 提取序号并排序
    audio_files = []
    for file in files:
        filename = os.path.basename(file)
        # 提取序号，格式为 seg{idx:03d}-...
        try:
            idx = int(filename.split('-')[0][3:])
            audio_files.append((idx, file))
        except:
            continue
    
    # 按序号排序
    audio_files.sort(key=lambda x: x[0])
    return audio_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, audio_dir, output_dir):
    """
    生成所有视频片段
    """
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
        print(f"创建输出目录: {output_dir}")
    
    # 获取音频文件
    audio_files = get_audio_files(audio_dir)
    print(f"找到 {len(audio_files)} 个音频文件")
    
    # 生成每个视频片段
    for idx, audio_path in audio_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, audio_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"
    audio_dir = "韩寒创业简史_续集_segments"
    output_dir = "韩寒创业简史_续集_videos"
    
    print("开始生成中文视频片段")
    print(f"图片目录: {image_dir}")
    print(f"音频目录: {audio_dir}")
    print(f"输出目录: {output_dir}")
    
    generate_videos(image_dir, audio_dir, output_dir)
