a
This commit is contained in:
Executable
+70
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
批量转换脚本 - 转换整个文件夹
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import asyncio
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from tts_convert import convert_file, VOICES
|
||||
|
||||
|
||||
async def batch_convert(input_dir: str, output_dir: str, lang: str = 'auto'):
|
||||
"""批量转换文件夹"""
|
||||
input_path = Path(input_dir)
|
||||
output_path = Path(output_dir)
|
||||
|
||||
if not input_path.exists():
|
||||
print(f"❌ 输入目录不存在: {input_dir}")
|
||||
return
|
||||
|
||||
# 创建输出目录
|
||||
output_path.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# 查找所有文本文件
|
||||
text_files = list(input_path.glob('*.txt')) + list(input_path.glob('*.md'))
|
||||
|
||||
if not text_files:
|
||||
print(f"⚠️ 未找到文本文件: {input_dir}")
|
||||
return
|
||||
|
||||
print(f"📝 找到 {len(text_files)} 个文件")
|
||||
print('=' * 60)
|
||||
|
||||
# 逐个转换
|
||||
success = 0
|
||||
failed = 0
|
||||
|
||||
for i, file in enumerate(text_files, 1):
|
||||
output_file = output_path / file.with_suffix('.mp3').name
|
||||
|
||||
print(f"\n[{i}/{len(text_files)}] {file.name}")
|
||||
|
||||
try:
|
||||
await convert_file(str(file), lang, str(output_file))
|
||||
success += 1
|
||||
except Exception as e:
|
||||
print(f"❌ 失败: {e}")
|
||||
failed += 1
|
||||
|
||||
print('\n' + '=' * 60)
|
||||
print(f"✅ 完成: {success} 成功, {failed} 失败")
|
||||
print(f"📁 输出目录: {output_path.absolute()}")
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='批量 TTS 转换')
|
||||
parser.add_argument('input_dir', help='输入文件夹')
|
||||
parser.add_argument('--output', '-o', default='output', help='输出文件夹')
|
||||
parser.add_argument('--lang', '-l', default='auto',
|
||||
choices=['auto', 'zh', 'zh-hk', 'en', 'en-gb', 'jp', 'kr'],
|
||||
help='语言代码')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
asyncio.run(batch_convert(args.input_dir, args.output, args.lang))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user