#!/usr/bin/env python3
"""
截取所有中文音频句（432句）- 使用间隔中点分割
"""
import sqlite3
import os
import subprocess

db_path = "\\\\ll\\D\\xtrssvjj\\dpd.db"
audio_path = "\\\\ll\\D\\xtrssvjj\\师徒一场_张雪峰走好_上.mp3"
audio_segments_dir = "shitu_audio_segments"
if not os.path.exists(audio_segments_dir):
    os.makedirs(audio_segments_dir)

try:
    conn = sqlite3.connect(db_path)
    cursor = conn.cursor()
    cursor.execute("SELECT idx, start, end, cn FROM srts WHERE adid = 8281 ORDER BY idx ASC")
    subtitles = cursor.fetchall()

    print(f"截取 {len(subtitles)} 句中文音频...")

    for i, (idx, start_ms, end_ms, cn) 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:
            # 最后一句：到文件结束
            # 先获取音频总时长
            probe_cmd = ['ffprobe', '-v', 'error', '-show_entries', 'format=duration',
                         '-of', 'default=noprint_wrappers=1:nokey=1', audio_path]
            probe_result = subprocess.run(probe_cmd, capture_output=True, text=True)
            if probe_result.returncode == 0:
                seg_end = float(probe_result.stdout.strip())
            else:
                seg_end = end_ms / 1000

        duration = seg_end - seg_start

        # 使用FFmpeg截取音频片段
        output_file = os.path.join(audio_segments_dir, f"audio_line_{idx:03d}.wav")
        cmd = [
            'ffmpeg', '-y',
            '-i', audio_path,
            '-ss', f'{seg_start:.3f}',
            '-t', f'{duration:.3f}',
            '-c:a', 'pcm_s16le',
            '-ar', '44100',
            '-ac', '1',
            output_file
        ]

        if idx % 50 == 0:
            print(f"  处理句 {idx}/{len(subtitles)}")

        result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8', errors='ignore')
        if result.returncode != 0:
            print(f"  句{idx}错误: {result.stderr[-100:]}...")

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

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