#!/usr/bin/env python3
"""
合成双语音频片段（adid=8096）
每字幕句：中文 + 400ms静音 + 英文TTS
"""
import os
import subprocess

cn_dir = "guns_audio_segments"
tts_dir = "guns_tts"
output_dir = "guns_bilingual_segments"

if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 获取所有中文音频片段
cn_files = sorted([f for f in os.listdir(cn_dir) if f.endswith('.mp3')])
print(f"找到 {len(cn_files)} 个中文音频片段")

# 生成400ms静音文件
silence_file = "silence_400ms.mp3"
if not os.path.exists(silence_file):
    print("生成400ms静音文件...")
    silence_cmd = [
        "ffmpeg", "-y",
        "-f", "lavfi",
        "-i", "anullsrc=r=48000:cl=stereo",
        "-t", "0.4",
        "-acodec", "libmp3lame",
        "-ab", "128k",
        silence_file
    ]
    subprocess.run(silence_cmd, capture_output=True)

print(f"\n开始合成双语音频片段...")

success_count = 0
fail_count = 0

for cn_file in cn_files:
    idx = cn_file.replace('segment_', '').replace('.mp3', '')
    cn_path = os.path.join(cn_dir, cn_file)
    tts_path = os.path.join(tts_dir, f"tts_{idx}.mp3")
    output_path = os.path.join(output_dir, f"bilingual_{idx}.mp3")

    # 检查TTS文件是否存在
    if not os.path.exists(tts_path):
        print(f"  跳过 {idx}: TTS文件不存在")
        fail_count += 1
        continue

    # 使用ffmpeg拼接：中文 + 静音 + TTS
    # 先转换为统一格式再拼接，避免格式不兼容
    concat_cmd = [
        "ffmpeg", "-y",
        "-i", cn_path,
        "-i", silence_file,
        "-i", tts_path,
        "-filter_complex", "[0:a][1:a][2:a]concat=n=3:v=0:a=1[out]",
        "-map", "[out]",
        "-acodec", "libmp3lame",
        "-ab", "128k",
        output_path
    ]

    result = subprocess.run(concat_cmd, capture_output=True, text=True, encoding='utf-8', errors='ignore')
    
    if result.returncode == 0:
        success_count += 1
        if int(idx) % 50 == 0:
            print(f"  已合成 {idx}/{len(cn_files)}")
    else:
        print(f"  失败 {idx}")
        fail_count += 1

print(f"\n完成！")
print(f"  成功: {success_count}")
print(f"  失败: {fail_count}")
print(f"  保存路径: {output_dir}")
