#!/usr/bin/env python3
"""
合成双语视频：静态字幕图片 + 双语音频（前10句）
"""
import os
import subprocess

# 输入目录
frames_dir = os.path.abspath("shitu_frames")
audio_dir = "shitu_bilingual"

# 输出目录
output_dir = "shitu_bilingual_video"
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}"
    frame_file = os.path.join(frames_dir, f"frame_{idx}.jpg")
    audio_file = os.path.join(audio_dir, f"bilingual_line_{idx}.wav")
    output_file = os.path.join(output_dir, f"bilingual_video_{idx}.mp4")

    # 检查文件是否存在
    if not os.path.exists(frame_file):
        print(f"  句{i}: 图片不存在 - {frame_file}")
        continue
    if not os.path.exists(audio_file):
        print(f"  句{i}: 音频不存在 - {audio_file}")
        continue

    print(f"  句{i}: 合成中...")

    # 获取音频时长
    probe_cmd = ['ffprobe', '-v', 'error', '-show_entries', 'format=duration',
                 '-of', 'default=noprint_wrappers=1:nokey=1', audio_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

    # 合成视频：静态图片 + 音频
    cmd = [
        'ffmpeg', '-y',
        '-loop', '1',
        '-framerate', '25',
        '-i', frame_file,
        '-i', audio_file,
        '-c:v', 'libx264',
        '-preset', 'fast',
        '-tune', 'stillimage',
        '-c:a', 'aac',
        '-ar', '44100',
        '-ac', '1',
        '-pix_fmt', 'yuv420p',
        '-shortest',
        output_file
    ]

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

    if result.returncode == 0:
        print(f"    完成: {output_file} ({duration:.2f}s)")
    else:
        print(f"    错误: {result.stderr[-100:]}")

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

# 验证结果
print("\n验证结果:")
print("-" * 50)
for i in range(10):
    idx = f"{i:03d}"
    output_file = os.path.join(output_dir, f"bilingual_video_{idx}.mp4")
    if os.path.exists(output_file):
        cmd = ['ffprobe', '-v', 'error', '-show_entries', 'format=duration',
               '-of', 'default=noprint_wrappers=1:nokey=1', output_file]
        result = subprocess.run(cmd, capture_output=True, text=True)
        duration = float(result.stdout.strip()) if result.returncode == 0 else 0
        print(f"  句{i}: {duration:.2f}s")
