ссылка:https://github.com/rany2/edge-tts На данный момент 3,1 тыс. 🌟
фокус:Бесплатно, API-ключ не требуется. Готов к использованию tts
Установить pip install edge-tts
Может быть выполнен с использованием командной строки
$ edge-tts --text "Hello, world!" --write-media hello.mp3 --write-subtitles hello.vtt
Изменение скорости, громкости, высоты тона
$ edge-tts --rate=-50% --text "Hello, world!" --write-media hello_with_rate_halved.mp3 --write-subtitles hello_with_rate_halved.vtt
$ edge-tts --volume=-50% --text "Hello, world!" --write-media hello_with_volume_halved.mp3 --write-subtitles hello_with_volume_halved.vtt
$ edge-tts --pitch=-50Hz --text "Hello, world!" --write-media hello_with_pitch_halved.mp3 --write-subtitles hello_with_pitch_halved.vtt
Вы также можете использовать код, основной API
edge_tts.Communicate(TEXT, VOICE)
Communicate.save、Communicate.stream
# _*_ coding: utf-8 _*_
# @Time : 2024/3/19 21:03
# @Author : Michael
# @File : edgeTTS.py
# @desc :
import asyncio
import random
import edge_tts
async def tts() -> None:
communicate = edge_tts.Communicate(TEXT, VOICE)
with open(OUTPUT_FILE, "wb") as file:
async for chunk in communicate.stream(): # Доступ к потоковому вещанию
if chunk["type"] == "audio":
file.write(chunk["data"])
elif chunk["type"] == "WordBoundary":
print(f"WordBoundary: {chunk}")
async def search_voice_tts() -> None:
# Получить список голосов на основе условий
voices = await edge_tts.VoicesManager.create()
# Найти мужчин, китайцев, материковый Китай голос
voice = voices.find(Gender="Male", Language="zh", Locale="zh-CN")
print(voice)
# Случайно выбрать голос из результатов поиска
selected_voice = random.choice(voice)["Name"]
print(selected_voice)
communicate = edge_tts.Communicate(TEXT, random.choice(voice)["Name"])
await communicate.save(OUTPUT_FILE)
async def tts_with_submaker() -> None:
"""Вывод субтитров"""
communicate = edge_tts.Communicate(TEXT, VOICE)
submaker = edge_tts.SubMaker()
with open(OUTPUT_FILE, "wb") as file:
async for chunk in communicate.stream():
if chunk["type"] == "audio":
file.write(chunk["data"])
elif chunk["type"] == "WordBoundary":
submaker.create_sub((chunk["offset"], chunk["duration"]), chunk["text"])
with open(WEBVTT_FILE, "w", encoding="utf-8") as file:
file.write(submaker.generate_subs())
if __name__ == "__main__":
TEXT = «Майкрософт edge tts Как здорово!"
VOICE = "zh-CN-YunyangNeural" # ShortName
OUTPUT_FILE = "test1.mp3"
WEBVTT_FILE = "test.vtt"
# Список связанных голосов
voices_options = asyncio.run(edge_tts.list_voices())
voices_options = [voice for voice in voices_options if voice["Locale"].startswith("zh-")]
print(voices_options)
# вызов tts
asyncio.run(tts())
# вызов search_voice_tts, Случайный выбор голоса
asyncio.run(search_voice_tts())
# вызов tts_with_submaker, Создать субтитры
asyncio.run(tts_with_submaker())
Сгенерированные субтитры можно отобразить вplotplayer.