64 lines
2.6 KiB
Python
64 lines
2.6 KiB
Python
import os
|
|
from gtts import gTTS
|
|
import argparse
|
|
|
|
def generate_podcast(text_file_path, output_audio_path, lang='zh-CN'):
|
|
"""
|
|
将文本文件内容转换为语音并保存为 MP3 文件。
|
|
"""
|
|
if not os.path.exists(text_file_path):
|
|
print(f"错误: 文本文件 '{text_file_path}' 不存在。")
|
|
return False
|
|
|
|
try:
|
|
with open(text_file_path, 'r', encoding='utf-8') as f:
|
|
text = f.read()
|
|
except Exception as e:
|
|
print(f"错误: 读取文本文件失败: {e}")
|
|
return False
|
|
|
|
if not text.strip():
|
|
print("警告: 文本文件内容为空,跳过语音生成。")
|
|
return False
|
|
|
|
try:
|
|
tts = gTTS(text=text, lang=lang, slow=False)
|
|
tts.save(output_audio_path)
|
|
print(f"成功将文本转换为语音并保存到 '{output_audio_path}'")
|
|
return True
|
|
except Exception as e:
|
|
print(f"错误: 文本转语音失败: {e}")
|
|
print("请确保已安装 gTTS 库: pip install gTTS")
|
|
return False
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="将文本文件转换为 Podcast 音频。")
|
|
parser.add_argument("--text_file", required=True, help="输入文本文件的路径。")
|
|
parser.add_argument("--output_audio", required=True, help="输出 MP3 音频文件的路径。")
|
|
parser.add_argument("--lang", default="zh-CN", help="语音语言 (例如 'en', 'zh-CN')。")
|
|
args = parser.parse_args()
|
|
|
|
# 确保 gTTS 已安装
|
|
try:
|
|
import gtts
|
|
except ImportError:
|
|
print("gTTS 库未安装。正在尝试安装...")
|
|
try:
|
|
subprocess.run([f"./documentation/analysis/phallic-worship-analysis/venv/bin/pip", "install", "gTTS"], check=True)
|
|
print("gTTS 安装成功。")
|
|
except Exception as e:
|
|
print(f"gTTS 安装失败: {e}")
|
|
exit(1)
|
|
|
|
# 在实际应用中,这里应该有一个明确的触发机制或配置来决定是否生成音频
|
|
# 例如,通过命令行参数 `--confirm-generate` 或环境变量
|
|
# 为了避免意外生成,这里默认不执行生成,除非明确指定
|
|
print("警告: 文本转语音功能默认不自动执行。")
|
|
print("如需生成音频,请在脚本中手动启用或通过 CI/CD 配置触发。")
|
|
# if args.confirm_generate: # 示例:如果添加了确认参数
|
|
# if generate_podcast(args.text_file, args.output_audio, args.lang):
|
|
# print("Podcast 生成完成。")
|
|
# else:
|
|
# print("Podcast 生成失败。")
|
|
# else:
|
|
# print("Podcast 生成已跳过,因为未收到明确的生成指令。") |