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 生成已跳过,因为未收到明确的生成指令。") |