Aperçu
Il existe actuellement une technologie de synthèse vocale qui peut être utilisée dans le domaine du doublage. Personnellement, j'ai commencé à chercher des ressources dans ce domaine en raison de certains besoins. Actuellement, de grandes plateformes telles que Tencent, iFlytek, Alibaba, Baidu, etc. tous disposent de tels services API. J'utilise personnellement le service de synthèse vocale de Baidu. Le prix est relativement bon marché. 2 yuans peuvent essentiellement transférer 20 000 mots, et 10 yuans me suffisent pour l'utiliser pendant un an.
Utilisation :
1. Tout d'abord, activez le service de synthèse vocale sur le site Web BaiduBaidu AI,
2. Après avoir obtenu apikey
, vous pouvez appeler l'API via python et transmettre le texte à Baidu, et Baidu nous renverra le doublage correspondant.
code
En exécutant le code suivant, nous pouvons obtenir un lien. Cliquez sur le lien et vous pouvez voir que nous avons réussi à convertir notre texte en fichier audio.
- Code source
Notez que vous devez remplacerAPI_KEY
etSECRET_KEY
par les clés que vous avez demandées sur Baidu. plate-forme.
Pour des informations plus détaillées sur l'API, veuillez vous référer à : API officielle de synthèse vocale longue de Baidu
import requests
from dotenv import load_dotenv
from time import sleep
import json
import os
# api 地址:
# https://ai.baidu.com/ai-doc/SPEECH/ulbxh8rbu
load_dotenv(dotenv_path = ".env",override = True)
API_KEY = os.environ.get("API_KEY")
SECRET_KEY = os.environ.get("SECRET_KEY")
def create_a_task(text_2_voice):
"""传入文本,转为音频
Args:
text_2_voice (str or list): 文本,或者文本数组
Returns:
json: 包含任务id的json序列
"""
url = (
"https://aip.baidubce.com/rpc/2.0/tts/v1/create?access_token="
+ get_access_token()
)
payload = json.dumps(
{
"text": text_2_voice, # 待合成的文本
"format": "wav", # 音频格式
"voice": 0, # 音库
"lang": "zh", # 语言,固定zh
"speed": 5, # 语速
"pitch": 5, # 音调
"volume": 5, # 音量
"enable_subtitle": 2, # 是否开启字幕时间戳,取值范围0, 1, 2
"break": 5000, # 段落间隔
}
)
headers = {
"Content-Type": "application/json", "Accept": "application/json"}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.json())
return response.json()
def get_task_results(task_id: list):
"""查询id是否已经完成了文本转语音
Args:
task_id (list): id
Returns:
json: 目前结果
"""
url = (
"https://aip.baidubce.com/rpc/2.0/tts/v1/query?access_token="
+ get_access_token()
)
payload = json.dumps({
"task_ids": [task_id]}) # create获取的task_id
headers = {
"Content-Type": "application/json", "Accept": "application/json"}
response = requests.request("POST", url, headers=headers, data=payload)
return response.json()
def get_access_token():
"""
使用 AK,SK 生成鉴权签名(Access Token)
:return: access_token,或是None(如果错误)
"""
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {
"grant_type": "client_credentials",
"client_id": API_KEY,
"client_secret": SECRET_KEY,
}
return str(requests.post(url, params=params).json().get("access_token"))
if __name__ == "__main__":
task_id = create_a_task(["我叫龙傲天,我最爱学习", "天下无双"])["task_id"]
while True:
status_results = get_task_results(task_id=task_id)["tasks_info"]
if status_results[0]["task_status"] == "Success":
print("---------------------------------------")
print(status_results[0]["task_result"]["speech_url"])
print("---------------------------------------")
break