colab项目地址
https://colab.research.google.com/drive/1DB3L8WDg4PSRRa7-FFdf0IiJbzVMRDlT?usp=sharing
批量下载python代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| import os import time from gradio_client import Client, handle_file voice_ref_filename = "音频.AAC" text_filename = "音频.txt" base_dir = os.path.dirname(os.path.abspath(__file__)) api_url = "https://322408008f2b9462b2.gradio.live" output_dirname = "audio" voice_reference_path = os.path.join(base_dir, voice_ref_filename) text_file_path = os.path.join(base_dir, text_filename) output_directory = os.path.join(base_dir, output_dirname) max_retries = 50 retry_delay = 5 if not os.path.exists(voice_reference_path): print(f"错误:找不到声音参考文件。") print(f"程序期望路径为: {voice_reference_path}") print("请确保文件在脚本的同一目录下,或文件名配置正确。") exit() if not os.path.exists(text_file_path): print(f"错误:找不到文本文件。") print(f"程序期望路径为: {text_file_path}") print("请确保文件在脚本的同一目录下,或文件名配置正确。") exit() if not os.path.exists(output_directory): print(f"信息:输出目录 '{output_dirname}' 不存在,正在创建...") try: os.makedirs(output_directory) print(f"目录 '{output_directory}' 创建成功。") except Exception as e: print(f"错误:创建目录 '{output_directory}' 失败,错误信息: {e}") exit() client = None print(f"正在连接 API: {api_url} ...") while client is None: try: client = Client(api_url) print("API 连接成功!") except Exception as e: print(f"连接失败,错误信息: {e}") print(f"将在 {retry_delay} 秒后重试...") time.sleep(retry_delay) try: with open(text_file_path, 'r', encoding='utf-8') as f: lines = f.readlines() text_lines_to_generate = [line.strip() for line in lines if line.strip()] if not text_lines_to_generate: print("警告:文本文件为空或只包含空行,程序退出。") exit() total_lines = len(text_lines_to_generate) print(f"共发现 {total_lines} 行文本需要处理。") for index, text_to_generate in enumerate(text_lines_to_generate): file_number = index + 1 output_filename = f"{file_number}.wav" output_filepath = os.path.join(output_directory, output_filename) if os.path.exists(output_filepath): print(f"[{file_number}/{total_lines}] 文件 '{output_filename}' 已存在,跳过生成。") continue print(f"\n--- [{file_number}/{total_lines}] 正在处理: '{text_to_generate}' ---") retries = 0 success = False while not success and retries < max_retries: try: result_dict = client.predict( text=text_to_generate, prompt=handle_file(voice_reference_path), emo_ref_path=handle_file(voice_reference_path), api_name="/gen_single" ) generated_audio_path = None if isinstance(result_dict, dict): generated_audio_path = result_dict.get('value') or result_dict.get('audio') elif isinstance(result_dict, str) and os.path.exists(result_dict): generated_audio_path = result_dict elif isinstance(result_dict, tuple): generated_audio_path = result_dict[0] if not generated_audio_path: print(f"调试信息 - API返回结果: {result_dict}") raise ValueError("无法从API结果中获取音频路径") if os.path.exists(generated_audio_path): if os.path.exists(output_filepath): os.remove(output_filepath) os.rename(generated_audio_path, output_filepath) print(f"成功!保存为: '{output_filename}'") success = True else: print(f"错误:生成的临时文件 '{generated_audio_path}' 不存在。") raise FileNotFoundError("生成的音频文件不存在") except Exception as e: retries += 1 print(f"发生错误: {e}") if retries < max_retries: print(f"将在 {retry_delay} 秒后进行第 {retries} 次重试...") time.sleep(retry_delay) else: print(f"已达到最大重试次数 ({max_retries}次),放弃本行。") time.sleep(1) print("\n所有文本行处理完毕。") except Exception as e: print(f"程序运行过程中发生未知错误: {e}") import traceback traceback.print_exc()
|