#!/usr/bin/env python3
"""
使用filter_complex concat滤镜拼接前10句视频
"""
import os
import subprocess

# 导入编码处理模块
from console_helper import (
    safe_print, print_header, print_step, print_info,
    print_success, print_fail, print_done
)


def main():
    print_header("使用filter_complex拼接前10句视频")
    
    # 构建视频列表
    video_list = []
    
    print_step(1, 3, "构建视频列表...")
    for i in range(1, 11):
        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("")
    
    # 构建ffmpeg命令
    print_step(2, 3, "构建ffmpeg命令...")
    
    # 输入参数
    input_args = []
    for video in video_list:
        input_args.extend(['-i', video])
    
    # 构建filter_complex
    n = len(video_list)
    
    # 构建输入标签
    input_labels = []
    for i in range(n):
        input_labels.append(f"[{i}:v][{i}:a]")
    
    # concat滤镜
    filter_complex = ''.join(input_labels) + f"concat=n={n}:v=1:a=1[outv][outa]"
    
    # 输出参数
    output_args = [
        '-filter_complex', filter_complex,
        '-map', '[outv]',
        '-map', '[outa]',
        '-c:v', 'libx264',
        '-c:a', 'aac',
        '-ar', '44100',
        '-ac', '1',
        '-pix_fmt', 'yuv420p',
        'first_10_lines_filter.mp4'
    ]
    
    # 完整命令
    args = ['ffmpeg', '-y'] + input_args + output_args
    
    safe_print("")
    print_step(3, 3, "执行拼接...")
    
    try:
        result = subprocess.run(args, check=True, capture_output=True, text=True)
        print_info("成功生成", "first_10_lines_filter.mp4")
    except subprocess.CalledProcessError as e:
        safe_print(f"拼接失败: {e}")
        if e.stderr:
            safe_print(f"错误信息: {e.stderr[:1000]}")
        return
    
    print_done()


if __name__ == '__main__':
    main()
