#!/usr/bin/env python3
"""
按间隔中点逻辑分割音频文件（adid=8096）- 正确版
"""
import sqlite3
import os
import subprocess

db_path = "\\\\ll\\D\\xtrssvjj\\dpd.db"
audio_file = "\\\\ll\\d\\wxvddata\\我们人类到底是怎么一步步走到今天这个样子的_枪炮_病菌与钢铁__高晓松__矮大紧__文学.mp3"
output_dir = "guns_audio_segments"

# 清理旧文件
if os.path.exists(output_dir):
    for file in os.listdir(output_dir):
        os.remove(os.path.join(output_dir, file))
else:
    os.makedirs(output_dir)

# 查询所有字幕时间
try:
    conn = sqlite3.connect(db_path)
    cursor = conn.cursor()
    cursor.execute("SELECT idx, start, end FROM srts WHERE adid = 8096 ORDER BY idx ASC")
    subtitles = cursor.fetchall()

    print(f"分割 {len(subtitles)} 段音频...")

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

    for i, (idx, start_ms, end_ms) in enumerate(subtitles):
        # 间隔中点逻辑（修正：先求平均再转秒）
        if i == 0:
            seg_start = 0  # 第0句从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:
            seg_end = total_duration  # 最后句到文件结尾

        # 输出文件路径
        output_file = os.path.join(output_dir, f"segment_{idx:03d}.mp3")

        # 使用ffmpeg分割音频，重新编码避免帧边界问题
        ffmpeg_cmd = [
            "ffmpeg", "-y",
            "-i", audio_file,
            "-ss", str(seg_start),
            "-to", str(seg_end),
            "-acodec", "libmp3lame",
            "-ab", "128k",
            output_file
        ]

        result = subprocess.run(ffmpeg_cmd, capture_output=True, text=True, encoding='utf-8', errors='ignore')
        if result.returncode != 0:
            print(f"分割失败 {idx}")
        else:
            print(f"  已分割 {idx}/{len(subtitles)}")

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

except Exception as e:
    print(f"错误: {e}")
