#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
给MP4视频添加封面图片
"""

import os
import subprocess
import glob


def add_cover_to_mp4(adnamemain, mp4_dir='.', cover_dir=None):
    """
    给MP4视频添加封面图片
    
    参数:
        adnamemain: 文件主名，MP4文件名为 adnamemain.mp4
        mp4_dir: MP4文件所在目录，默认为当前目录
        cover_dir: 封面图片所在目录，默认为mp4_dir
    
    返回:
        True: 成功
        False: 失败
    """
    if cover_dir is None:
        cover_dir = mp4_dir
    
    # 构建MP4文件路径
    mp4_path = os.path.join(mp4_dir, f"{adnamemain}_final_bilingual.mp4")
    
    if not os.path.exists(mp4_path):
        print(f"错误：MP4文件不存在: {mp4_path}")
        return False
    
    # 查找封面图片：adnamemainxxx.jpg
    cover_pattern = os.path.join(cover_dir, f"{adnamemain}*.jpg")
    cover_files = glob.glob(cover_pattern)
    
    if not cover_files:
        print(f"错误：未找到封面图片，模式: {cover_pattern}")
        return False
    
    # 优先选择匹配度最高的（比如完全匹配 adnamemain.jpg 或 adnamemain_cover.jpg）
    cover_files.sort()
    cover_path = cover_files[0]
    
    # 如果有完全匹配的，优先使用
    exact_cover = os.path.join(cover_dir, f"{adnamemain}.jpg")
    if os.path.exists(exact_cover):
        cover_path = exact_cover
    else:
        # 否则选择文件名最短的（最接近adnamemain的）
        cover_files.sort(key=lambda x: len(os.path.basename(x)))
        cover_path = cover_files[0]
    
    print(f"找到封面图片: {cover_path}")
    
    # 创建临时输出文件
    temp_output = os.path.join(mp4_dir, f"{adnamemain}_with_cover_temp.mp4")
    final_output = os.path.join(mp4_dir, f"{adnamemain}_with_cover.mp4")
    
    try:
        # 使用ffmpeg添加封面
        # -i cover.jpg -i input.mp4 -map 0:v -map 1:v -map 1:a -c:v copy -disposition:0 attached_pic output.mp4
        cmd = [
            'ffmpeg',
            '-i', cover_path,           # 封面图片
            '-i', mp4_path,             # 视频文件
            '-map', '0:v',              # 映射封面视频流
            '-map', '1:v',              # 映射原视频流
            '-map', '1:a',              # 映射原音频流
            '-c:v', 'copy',             # 视频流复制（不重新编码）
            '-c:a', 'copy',             # 音频流复制
            '-disposition:0', 'attached_pic',  # 设置第一张为封面
            '-y',                       # 覆盖输出文件
            temp_output
        ]
        
        print(f"执行命令: {' '.join(cmd)}")
        
        result = subprocess.run(
            cmd,
            capture_output=True,
            text=True,
            shell=True
        )
        
        if result.returncode != 0:
            print(f"错误：ffmpeg执行失败")
            print(f"stderr: {result.stderr}")
            return False
        
        # 替换原文件
        os.remove(mp4_path)
        os.rename(temp_output, mp4_path)
        
        print(f"成功：封面已添加到 {mp4_path}")
        return True
        
    except Exception as e:
        print(f"错误：添加封面失败: {e}")
        # 清理临时文件
        if os.path.exists(temp_output):
            os.remove(temp_output)
        return False


def batch_add_cover(adnamemain_list, mp4_dir='.', cover_dir=None):
    """
    批量给多个MP4添加封面
    
    参数:
        adnamemain_list: adnamemain列表
        mp4_dir: MP4文件所在目录
        cover_dir: 封面图片所在目录
    """
    success_count = 0
    fail_count = 0
    
    for adnamemain in adnamemain_list:
        print(f"\n=== 处理: {adnamemain} ===")
        if add_cover_to_mp4(adnamemain, mp4_dir, cover_dir):
            success_count += 1
        else:
            fail_count += 1
    
    print(f"\n批量处理完成：成功 {success_count} 个，失败 {fail_count} 个")
    return success_count, fail_count


if __name__ == '__main__':
    import sys
    
    if len(sys.argv) < 2:
        print("用法: python add_cover_to_mp4.py <adnamemain> [mp4_dir] [cover_dir]")
        print("示例: python add_cover_to_mp4.py myvideo")
        print("示例: python add_cover_to_mp4.py myvideo ./output ./covers")
        sys.exit(1)
    
    adnamemain = sys.argv[1]
    mp4_dir = sys.argv[2] if len(sys.argv) > 2 else '.'
    mp4_dir='.'
    cover_dir = sys.argv[3] if len(sys.argv) > 3 else None
    adnamemain='伊朗局势的恶化，会给世界带来怎样的冲击？#伊朗_final_bilingual.mp4'
    adnamemain='伊朗局势的恶化，会给世界带来怎样的冲击？#伊朗'
    add_cover_to_mp4(adnamemain, mp4_dir, cover_dir)
