网站链接可以自己做吗百度链接提交
背景:
在进行MoneyPrinter项目国内环境搭建中,发现框架本身的TikTok文字转语音部分的代码已经不能用了,最好是能够找到国内网站的替换方案。
实现:
感谢网站:https://www.text-to-speech.cn/
代码:
# -*- coding:UTF-8 -*-"""@ProjectName :@FileName : tts-demo@Description : 文字转语音@Time : 2024/5/10 14:44@Author : Qredsun"""
import time
import uuid
from urllib.parse import urlencodeimport requests
from loguru import loggerclass textToSpeech():BASE_URL = "https://www.text-to-speech.cn/"HEADER = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0','Accept': '*/*','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','X-Requested-With': 'XMLHttpRequest','Origin': BASE_URL,'Connection': 'keep-alive','Referer': BASE_URL,'Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-origin',}def get_speaker_list(self):url = f"{self.BASE_URL}/getSpeekList.php"response = requests.get(url, headers=self.HEADER)if response.ok:response_json = response.json()speaker_list = response_jsonlogger.debug(f'返回获取音频配置列表:{speaker_list}')logger.info('转换接口使用的是语言(key)、ShortName')return speaker_listlogger.error(f'获取音频配置失败:{response.text}')return Nonedef convert_voice(self, txt="这是一段对话", /, *, language="English (United States)", voice="AvaMultilingualNeural",file_name=None):logger.debug(f'待转化音频的内容:{txt}')url = f"{self.BASE_URL}/getSpeek.php"payload = {"language": language,"voice": voice,"text": txt,"role": 0,"style": 0,"rate": 0,"pitch": 0,"kbitrate": "audio-16khz-32kbitrate-mono-mp3","silence": "","styledegree": 1,"volume": 75,"predict": 0,"user_id": "","yzm": "","replice": 1,}cookies = {"Hm_lvt_b38a22175a63114a18d55183d7ddb4c4": int(time.time()),"Hm_lpvt_b38a22175a63114a18d55183d7ddb4c4": int(time.time()),"language": language,"voice": voice,"kbitrate": "audio-16khz-32kbitrate-mono-mp3","role": 0,"style": 0,"speed": 0,"pitch": 0,"checkuser": time.strftime("%Y-%m-%d", time.localtime())}cookies_str = urlencode(cookies)# logger.debug(f'cookies: {cookies_str}')headers = {'Cookie': cookies_str,'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}headers.update(self.HEADER)response = requests.request("POST", url, headers=headers, data=payload)if not response.ok:logger.error(f'转换音频失败:{response.text}')return Noneresponse_json = response.json()if response_json['code'] == 200:url = response_json["download"]logger.info(f'返回音频下载连接:{url}')if file_name:self.save_voice(url, video_id=file_name)return urldef save_voice(self, url, /, *, video_id=None):try:video_id = video_id if video_id else uuid.uuid4()with open(video_id, "wb") as f:f.write(requests.get(url).content)logger.info(f'音频已保存至{video_id}')except Exception as e:logger.error(f'音频保存失败:{e}')if __name__ == '__main__':c2v = textToSpeech()# c2v.get_speaker_list() # 获取可用的语言及声音url = c2v.convert_voice('我真的是服了', save_voice=True)