#!/usr/bin/env python3
"""
重新分割"师徒一场_中"前10句的音频（正确计算第9句的结束时间）
"""
import sqlite3
import os
import subprocess

db_path = "\\\\ll\\D\\xtrssvjj\\dpd.db"
audio_file = "\\\\ll\\d\\wxvddata\\师徒一场_张雪峰走好_中.mp3"
output_dir = "shituyichang_middle_audio_10_fixed"

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

conn = sqlite3.connect(db_path)
cursor = conn.cursor()

# 查询前11句字幕（需要第11句来计算第10句的结束时间）
adid = 8341
cursor.execute("SELECT idx, start, end FROM srts WHERE adid = ? AND idx < 11 ORDER BY idx", (adid,))
subtitles_all = cursor.fetchall()

# 只处理前10句，但用第11句来计算第9句的结束时间
subtitles = subtitles_all[:10]

# 获取音频总时长
cmd = ["ffprobe", "-v", "error", "-show_entries", "format=duration", "-of", "default=noprint_wrappers=1:nokey=1", audio_file]
result = subprocess.run(cmd, capture_output=True, text=True)
total_duration = float(result.stdout.strip())

print(f"音频总时长: {total_duration:.2f}秒")
print(f"\n开始重新分割前10句音频...")

for i, (idx, start_ms, end_ms) in enumerate(subtitles):
    if idx == 0:
        seg_start = 0
    else:
        prev_end_ms = subtitles[i-1][2]
        seg_start = (prev_end_ms + start_ms) / 2000

    # 如果不是最后一句，用下一句来计算结束时间
    if i < len(subtitles) - 1:
        next_start_ms = subtitles[i+1][1]
        seg_end = (end_ms + next_start_ms) / 2000
    else:
        # 第10句（idx=9），用第11句（如果有的话）来计算
        if len(subtitles_all) > 10:
            next_start_ms = subtitles_all[10][1]
            seg_end = (end_ms + next_start_ms) / 2000
        else:
            seg_end = total_duration

    output_path = os.path.join(output_dir, f"segment_{idx:03d}.mp3")
    
    ffmpeg_cmd = [
        "ffmpeg", "-y",
        "-i", audio_file,
        "-ss", str(seg_start),
        "-to", str(seg_end),
        "-acodec", "libmp3lame",
        "-ab", "128k",
        output_path
    ]
    
    result = subprocess.run(ffmpeg_cmd, capture_output=True)
    
    if result.returncode == 0:
        print(f"  已分割 {idx}/{len(subtitles)} (start={seg_start:.3f}, end={seg_end:.3f})")
    else:
        print(f"  失败 {idx}")

print(f"\n完成！所有音频片段保存在: {output_dir}")
conn.close()
