#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
合并图片和音频片段生成视频片段
"""

import os
import subprocess
import glob


def merge_image_audio_to_video(image_dir, audio_dir, output_dir):
    """
    合并图片和音频片段生成视频片段
    """
    # 创建输出目录
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    # 获取所有图片文件
    image_files = sorted(glob.glob(os.path.join(image_dir, "vertical_subtitle_*.png")))
    
    print(f"找到 {len(image_files)} 张图片")
    
    # 处理每个图片
    for i, image_file in enumerate(image_files):
        # 提取idx
        basename = os.path.basename(image_file)
        idx = basename.replace("vertical_subtitle_", "").replace(".png", "")
        
        # 查找对应的音频文件
        audio_pattern = os.path.join(audio_dir, f"seg{int(idx):03d}-*.mp3")
        audio_files = glob.glob(audio_pattern)
        
        if not audio_files:
            print(f"警告: 未找到idx={idx}的音频文件")
            continue
        
        audio_file = audio_files[0]
        
        # 输出视频文件
        output_file = os.path.join(output_dir, f"video_{idx}.mp4")
        
        # 使用FFmpeg合并图片和音频
        cmd = [
            "ffmpeg", "-y",
            "-loop", "1",
            "-i", image_file,
            "-i", audio_file,
            "-c:v", "libx264",
            "-tune", "stillimage",
            "-c:a", "aac",
            "-b:a", "192k",
            "-pix_fmt", "yuv420p",
            "-shortest",
            output_file
        ]
        
        try:
            result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8', errors='ignore')
            if result.returncode == 0:
                print(f"  生成视频: {output_file}")
            else:
                print(f"  错误: 生成视频失败 - {result.stderr}")
        except Exception as e:
            print(f"  错误: {e}")
    
    print(f"\n完成！视频片段保存到: {output_dir}")


if __name__ == "__main__":
    # 图片目录
    image_dir = "698_罗永浩的十字路口_vertical_images"
    
    # 音频片段目录
    audio_dir = "../srtsegjoin/698_罗永浩的十字路口_segments"
    
    # 输出目录
    output_dir = "698_罗永浩的十字路口_videos"
    
    merge_image_audio_to_video(image_dir, audio_dir, output_dir)
