#!/usr/bin/env python3
"""
拼接中文音频和英文TTS，生成双语音频（前10句）
策略：中文音频 + 英文TTS（0.7倍速）
"""
import os
import subprocess

# 输入目录
cn_dir = "shitu_audio_segments"
tts_dir = "shitu_tts"

# 输出目录
output_dir = "shitu_bilingual"
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 处理前10句
print("生成双语音频（前10句）")
print("=" * 50)

for i in range(10):
    idx = f"{i:03d}"
    cn_file = os.path.join(cn_dir, f"audio_line_{idx}.wav")
    tts_file = os.path.join(tts_dir, f"tts_line_{idx}.wav")
    output_file = os.path.join(output_dir, f"bilingual_line_{idx}.wav")

    # 检查文件是否存在
    if not os.path.exists(cn_file):
        print(f"  句{i}: 中文音频不存在 - {cn_file}")
        continue
    if not os.path.exists(tts_file):
        print(f"  句{i}: TTS音频不存在 - {tts_file}")
        continue

    print(f"  句{i}: 拼接中...")

    # 使用FFmpeg拼接两个音频文件
    # 方法：使用concat demuxer
    list_file = os.path.join(output_dir, f"temp_list_{idx}.txt")
    with open(list_file, 'w', encoding='utf-8') as f:
        f.write(f"file '{os.path.abspath(cn_file).replace('\\', '/')}'\n")
        f.write(f"file '{os.path.abspath(tts_file).replace('\\', '/')}'\n")

    cmd = [
        'ffmpeg', '-y',
        '-f', 'concat',
        '-safe', '0',
        '-i', list_file,
        '-c:a', 'pcm_s16le',
        '-ar', '44100',
        '-ac', '1',
        output_file
    ]

    result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8', errors='ignore')

    if result.returncode == 0:
        # 获取输出文件时长
        probe_cmd = ['ffprobe', '-v', 'error', '-show_entries', 'format=duration',
                     '-of', 'default=noprint_wrappers=1:nokey=1', output_file]
        probe_result = subprocess.run(probe_cmd, capture_output=True, text=True)
        duration = float(probe_result.stdout.strip()) if probe_result.returncode == 0 else 0

        print(f"  完成: {output_file} ({duration:.2f}s)")
    else:
        print(f"  错误: {result.stderr[-200:] if result.stderr else '未知错误'}")

    # 清理临时文件
    if os.path.exists(list_file):
        os.remove(list_file)

print("\n" + "=" * 50)
print(f"完成！双语音频保存在: {output_dir}")
