video_translation/test_speed_adjustment.py

183 lines
5.6 KiB
Python
Raw Permalink Normal View History

2025-09-05 14:41:59 +08:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
测试语速调整功能的脚本
验证配音块生成和音频语速调整的完整流程
"""
import os
import sys
import json
from pathlib import Path
# 设置路径
current_dir = os.path.dirname(os.path.abspath(__file__))
os.environ['PATH'] += os.pathsep + current_dir
sys.path.append(current_dir)
# 导入核心模块
from core.utils.config_utils import load_key, update_key
from core import _8_2_dub_chunks, _10_gen_audio
def create_test_translate_result():
"""创建测试用的翻译结果数据"""
test_data = [
{
"id": 1,
"start": 0.0,
"end": 3.5,
"original_text": "Hello, how are you today?",
"translated_text": "你好,你今天怎么样?"
},
{
"id": 2,
"start": 4.0,
"end": 7.2,
"original_text": "I'm doing great, thank you for asking.",
"translated_text": "我很好,谢谢你的询问。"
},
{
"id": 3,
"start": 8.0,
"end": 12.5,
"original_text": "Would you like to have lunch together today?",
"translated_text": "你想今天一起吃午餐吗?"
}
]
# 确保output目录存在
os.makedirs('output', exist_ok=True)
# 保存测试数据
with open('output/translate_result.json', 'w', encoding='utf-8') as f:
json.dump(test_data, f, ensure_ascii=False, indent=2)
print("✅ 创建了测试翻译数据")
def test_dub_chunks_generation():
"""测试配音块生成功能"""
print("\n🎬 测试配音块生成...")
try:
# 创建测试数据
create_test_translate_result()
# 生成配音块
_8_2_dub_chunks.gen_dub_chunks()
# 检查结果
if os.path.exists('output/dub_chunks.json'):
with open('output/dub_chunks.json', 'r', encoding='utf-8') as f:
chunks = json.load(f)
print(f"✅ 成功生成 {len(chunks)} 个配音块")
# 显示一些统计信息
cutoff_count = sum(1 for chunk in chunks if chunk['cut_off'] == 1)
speed_issues = sum(1 for chunk in chunks if chunk['speed_status'] > 0)
print(f"📊 切分点数量: {cutoff_count}")
print(f"⚡ 需要语速调整的片段: {speed_issues}")
# 显示第一个块的详细信息
if chunks:
first_chunk = chunks[0]
print(f"\n📋 第一个块的信息:")
print(f" 文本: {first_chunk['text']}")
print(f" 时长: {first_chunk['duration']:.2f}s")
print(f" 估算时长: {first_chunk['est_dur']:.2f}s")
print(f" 语速状态: {first_chunk['speed_status']}")
return True
else:
print("❌ 配音块文件未生成")
return False
except Exception as e:
print(f"❌ 配音块生成失败: {e}")
import traceback
traceback.print_exc()
return False
def test_speed_adjustment_logic():
"""测试语速调整逻辑"""
print("\n⚡ 测试语速调整逻辑...")
try:
# 模拟一些测试数据
test_chunks = [
{
'real_dur': 3.0, # 实际TTS时长
'tol_dur': 3.5, # 容忍时长
'duration': 3.2, # 原始时长
'gap': 0.5, # 间隙
'tolerance': 0.3 # 容忍度
},
{
'real_dur': 2.8,
'tol_dur': 3.0,
'duration': 2.5,
'gap': 0.8,
'tolerance': 0.5
}
]
# 测试速度因子计算
from core._10_gen_audio import calculate_chunk_speed_factor
accept = load_key("speed_factor.accept") if load_key("speed_factor.accept") else 1.3
min_speed = load_key("speed_factor.min") if load_key("speed_factor.min") else 0.8
speed_factor, keep_gaps = calculate_chunk_speed_factor(test_chunks, accept, min_speed)
print(f"✅ 计算出的语速因子: {speed_factor}")
print(f"✅ 是否保留间隙: {keep_gaps}")
# 验证结果合理性
if 0.5 <= speed_factor <= 2.0:
print("✅ 语速因子在合理范围内")
return True
else:
print("⚠️ 语速因子超出预期范围")
return False
except Exception as e:
print(f"❌ 语速调整逻辑测试失败: {e}")
import traceback
traceback.print_exc()
return False
def main():
"""主测试函数"""
print("🧪 开始测试语速调整功能...")
# 设置一些基本配置
update_key("tolerance", 0.5)
update_key("speed_factor.accept", 1.3)
update_key("speed_factor.min", 0.8)
success_count = 0
total_tests = 2
# 测试1: 配音块生成
if test_dub_chunks_generation():
success_count += 1
# 测试2: 语速调整逻辑
if test_speed_adjustment_logic():
success_count += 1
# 总结
print(f"\n📊 测试结果: {success_count}/{total_tests} 个测试通过")
if success_count == total_tests:
print("🎉 所有测试通过!语速调整功能实现正确。")
return True
else:
print("⚠️ 部分测试失败,请检查实现。")
return False
if __name__ == "__main__":
main()