#!/usr/bin/env python3
"""
重新合并视频，使用带空白音的静态视频
"""
import os
import subprocess
import re

# 导入编码处理模块
from console_helper import (
    safe_print, print_header, print_step, print_info,
    print_success, print_fail, print_done
)


def concatenate_videos(video_list, output_path, ffmpeg_path="ffmpeg"):
    """拼接多个视频"""
    list_file = 'concat_list.txt'
    with open(list_file, 'w', encoding='utf-8') as f:
        for video in video_list:
            escaped_path = video.replace('\\', '/')
            f.write(f"file '{escaped_path}'\n")
    
    args = [
        ffmpeg_path,
        '-y',
        '-f', 'concat',
        '-safe', '0',
        '-i', list_file,
        '-c:v', 'libx264',
        '-c:a', 'aac',
        '-ar', '44100',
        '-ac', '1',
        '-pix_fmt', 'yuv420p',
        output_path
    ]
    
    try:
        subprocess.run(args, check=True, capture_output=True)
        os.remove(list_file)
        return True
    except subprocess.CalledProcessError as e:
        safe_print(f"      拼接视频失败: {e}")
        try:
            os.remove(list_file)
        except:
            pass
        return False


def main():
    # 配置
    segments_dir = "all_segments"
    static_videos_dir = "all_static_videos_with_silence"
    output_video = "final_video.mp4"
    
    print_header("重新合并视频")
    safe_print(f"静态视频目录: {static_videos_dir}")
    safe_print(f"输出视频: {output_video}")
    safe_print("")
    
    # 检查目录
    if not os.path.exists(segments_dir):
        safe_print(f"错误: 片段目录 {segments_dir} 不存在")
        return
    
    if not os.path.exists(static_videos_dir):
        safe_print(f"错误: 静态视频目录 {static_videos_dir} 不存在")
        return
    
    # 构建视频列表
    print_step(1, 2, "构建视频列表...")
    video_list = []
    
    # 遍历所有序号
    max_number = 68  # 已知最大序号
    for i in range(1, max_number + 1):
        # 原始片段
        segment = os.path.join(segments_dir, f"segment_{i:03d}.mp4")
        if os.path.exists(segment):
            video_list.append(segment)
        
        # 静态视频
        static_video = os.path.join(static_videos_dir, f"static_video_{i:03d}.mp4")
        if os.path.exists(static_video):
            video_list.append(static_video)
    
    # 检查第69段
    segment_69 = os.path.join(segments_dir, "segment_069.mp4")
    if os.path.exists(segment_69):
        video_list.append(segment_69)
    
    if not video_list:
        safe_print("错误: 没有找到任何视频文件")
        return
    
    print_info("总视频数", str(len(video_list)))
    safe_print("")
    
    # 拼接视频
    print_step(2, 2, "拼接视频...")
    safe_print("开始拼接...")
    
    if concatenate_videos(video_list, output_video):
        print_info("成功生成", output_video)
    else:
        safe_print("拼接视频失败")
        return
    
    print_done()


if __name__ == '__main__':
    main()
