#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
使用filter_complex方式拼接前10句双语视频，统一音频格式
"""

import os
import subprocess


def get_video_files(video_dir, max_count=10):
    """
    获取视频文件列表，最多取前max_count个
    """
    video_files = []
    for filename in os.listdir(video_dir):
        if filename.endswith('.mp4') and filename.startswith('video_'):
            idx = int(filename.split('_')[1].split('.')[0])
            video_files.append((idx, os.path.join(video_dir, filename)))
    
    video_files.sort(key=lambda x: x[0])
    return video_files[:max_count]


def main():
    chinese_video_dir = "Artemis_II_十天绕月_videos"
    english_video_dir = "Artemis_II_十天绕月_tts_videos"
    output_file = "Artemis_II_十天绕月_bilingual_first_10_v2.mp4"
    
    chinese_videos = get_video_files(chinese_video_dir, 10)
    english_videos = get_video_files(english_video_dir, 10)
    
    print(f"找到 {len(chinese_videos)} 个中文视频片段")
    print(f"找到 {len(english_videos)} 个英文TTS视频片段")
    
    if len(chinese_videos) != len(english_videos):
        print("错误：中文视频和英文TTS视频数量不匹配！")
        return
    
    num_segments = len(chinese_videos)
    
    # 构建输入参数
    input_args = []
    for (ch_idx, ch_path), (en_idx, en_path) in zip(chinese_videos, english_videos):
        input_args.extend(['-i', ch_path])
        input_args.extend(['-i', en_path])
    
    # 构建filter_complex
    filter_parts = []
    
    # 处理每个输入
    for i in range(num_segments * 2):
        # 视频处理：缩放并设置帧率
        filter_parts.append(f'[{i}:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=25[v{i}]')
        # 音频处理：转为stereo 44100Hz
        filter_parts.append(f'[{i}:a]aformat=sample_rates=44100:channel_layouts=stereo[a{i}]')
    
    # 拼接所有视频和音频
    video_inputs = ''.join([f'[v{i}]' for i in range(num_segments * 2)])
    audio_inputs = ''.join([f'[a{i}]' for i in range(num_segments * 2)])
    
    filter_parts.append(f'{video_inputs}concat=n={num_segments * 2}:v=1:a=0[outv]')
    filter_parts.append(f'{audio_inputs}concat=n={num_segments * 2}:v=0:a=1[outa]')
    
    filter_complex = ';'.join(filter_parts)
    
    # 构建完整命令
    cmd = [
        'ffmpeg', '-y'
    ] + input_args + [
        '-filter_complex', filter_complex,
        '-map', '[outv]',
        '-map', '[outa]',
        '-c:v', 'libx264',
        '-c:a', 'aac',
        '-b:a', '192k',
        output_file
    ]
    
    print("正在拼接前10句双语视频...")
    print(f"总视频片段数: {num_segments * 2}")
    
    try:
        result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8', errors='ignore')
        
        if result.returncode == 0:
            print(f"成功！前10句双语视频保存到: {output_file}")
            if os.path.exists(output_file):
                file_size = os.path.getsize(output_file)
                print(f"文件大小: {file_size / 1024 / 1024:.2f} MB")
        else:
            print(f"错误：拼接失败")
            print(result.stderr[-2000:] if len(result.stderr) > 2000 else result.stderr)
    except Exception as e:
        print(f"执行错误: {e}")


if __name__ == "__main__":
    main()
