#!/usr/bin/env python3
"""
只拼接第3、4、5句的视频片段
直接使用现有的文件，不重新生成
"""
import os
import subprocess

# 导入编码处理模块
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():
    # 配置
    output_video = "lines_3_4_5.mp4"
    
    print_header("拼接第3、4、5句视频")
    safe_print(f"输出视频: {output_video}")
    safe_print("")
    
    # 构建视频列表（只包含第3、4、5句）
    video_list = []
    
    print_step(1, 2, "构建视频列表...")
    for i in [3, 4, 5]:
        segment_file = f"all_segments/segment_{i:03d}.mp4"
        static_video_file = f"all_static_videos_with_silence/static_video_{i:03d}.mp4"
        
        # 检查文件是否存在
        if not os.path.exists(segment_file):
            safe_print(f"      警告: 原始片段文件 {segment_file} 不存在")
            continue
        
        if not os.path.exists(static_video_file):
            safe_print(f"      警告: 静态视频文件 {static_video_file} 不存在")
            continue
        
        # 添加到视频列表
        video_list.append(segment_file)
        video_list.append(static_video_file)
        
        print_info(f"  添加第{i}句", f"{os.path.basename(segment_file)} + {os.path.basename(static_video_file)}")
    
    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()
