文章目录

  • 前言
  • 一、PDF转为MP3 ?
  • 二、准备工作
    • 1. 安装pdfplumber包,用于将pdf转为txt
    • 2. 安装edge-tts包,用于将txt转为音频
  • 三、代码很简单
  • 四、变更播音员
  • 总结

前言

一、PDF转为MP3 ?

我们平常看到很多文件都是PDF格式,网上的各类书籍多为此格式。有时候不方便阅读,或者怕费眼睛伤颈椎,那么有没有一种方法可以把它变为音频,这样上下班路上也就可以听一听。

这里做个科普,什么是TTS?TTS(Text To Speech,文本转语音)是语音合成应用的一种,它将储存于电脑中的文件,如帮助文件或者网页,转换成自然语音输出。edge-tts就是将微软的语音合成技术,他是将edge浏览器里提供的tts打包成Python第三方包,这样就可以免费调用微软的语音合成技术。

想到就动手,本次我们使用免费的开源库edge-tts来实现文本转语音操作,薅一下微软edge的羊毛!

二、准备工作

将PDF转为音频MP3文件,需要两步。第一步,将pdf转为txt文本;第二步,将txt转为音频。所以我们需要以下两个库。

1. 安装pdfplumber包,用于将pdf转为txt

(base) C:\Users\Administrator>pip install pdfplumber
Collecting pdfplumberDownloading pdfplumber-0.9.0-py3-none-any.whl (46 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.1/46.1 kB 385.4 kB/s eta 0:00:00
Collecting pdfminer.six==20221105Downloading pdfminer.six-20221105-py3-none-any.whl (5.6 MB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.6/5.6 MB 8.1 MB/s eta 0:00:00
Collecting Wand>=0.6.10Downloading Wand-0.6.11-py2.py3-none-any.whl (143 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 143.6/143.6 kB ? eta 0:00:00
Requirement already satisfied: Pillow>=9.1 in d:\programdata\anaconda3\lib\site-packages (from pdfplumber) (9.4.0)
Requirement already satisfied: charset-normalizer>=2.0.0 in d:\programdata\anaconda3\lib\site-packages (from pdfminer.six==20221105->pdfplumber) (2.0.4)
Requirement already satisfied: cryptography>=36.0.0 in d:\programdata\anaconda3\lib\site-packages (from pdfminer.six==20221105->pdfplumber) (39.0.1)
Requirement already satisfied: cffi>=1.12 in d:\programdata\anaconda3\lib\site-packages (from cryptography>=36.0.0->pdfminer.six==20221105->pdfplumber) (1.15.1)
Requirement already satisfied: pycparser in d:\programdata\anaconda3\lib\site-packages (from cffi>=1.12->cryptography>=36.0.0->pdfminer.six==20221105->pdfplumber) (2.21)
Installing collected packages: Wand, pdfminer.six, pdfplumber
Successfully installed Wand-0.6.11 pdfminer.six-20221105 pdfplumber-0.9.0

2. 安装edge-tts包,用于将txt转为音频

(base) C:\Users\Administrator>pip install edge-tts
Collecting edge-ttsDownloading edge_tts-6.1.5-py3-none-any.whl (27 kB)
Requirement already satisfied: aiohttp>=3.8.0 in d:\programdata\anaconda3\lib\site-packages (from edge-tts) (3.8.4)
Requirement already satisfied: yarl<2.0,>=1.0 in d:\programdata\anaconda3\lib\site-packages (from aiohttp>=3.8.0->edge-tts) (1.8.2)
Requirement already satisfied: multidict<7.0,>=4.5 in d:\programdata\anaconda3\lib\site-packages (from aiohttp>=3.8.0->edge-tts) (6.0.4)
Requirement already satisfied: frozenlist>=1.1.1 in d:\programdata\anaconda3\lib\site-packages (from aiohttp>=3.8.0->edge-tts) (1.3.3)
Requirement already satisfied: attrs>=17.3.0 in d:\programdata\anaconda3\lib\site-packages (from aiohttp>=3.8.0->edge-tts) (22.1.0)
Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in d:\programdata\anaconda3\lib\site-packages (from aiohttp>=3.8.0->edge-tts) (4.0.2)
Requirement already satisfied: aiosignal>=1.1.2 in d:\programdata\anaconda3\lib\site-packages (from aiohttp>=3.8.0->edge-tts) (1.3.1)
Requirement already satisfied: charset-normalizer<4.0,>=2.0 in d:\programdata\anaconda3\lib\site-packages (from aiohttp>=3.8.0->edge-tts) (2.0.4)
Requirement already satisfied: idna>=2.0 in d:\programdata\anaconda3\lib\site-packages (from yarl<2.0,>=1.0->aiohttp>=3.8.0->edge-tts) (3.4)
Installing collected packages: edge-tts
Successfully installed edge-tts-6.1.5

三、代码很简单

# -*- coding: utf-8 -*-import pdfplumber
import asyncio
import os
import edge_tts
from edge_tts import VoicesManager  async def txt2mp3(txt,mp3,announcer='Microsoft Server Speech Text to Speech Voice (zh-CN, XiaoxiaoNeural)') -> None:# 将文本转换为mp3音频communicate = edge_tts.Communicate(txt, announcer)  await communicate.save(mp3)async def get_announcer(Gender="Female", Language="zh"):voices = await VoicesManager.create()  voice = voices.find(Gender=Gender, Language=Language)print(voice)if __name__ == "__main__":  rootdir = 'd:\\python_csdn\\files\\'filename = '道德经.pdf'pdf_path = rootdir+filenameannouncer='Microsoft Server Speech Text to Speech Voice (zh-CN, XiaoxiaoNeural)'if 0:# 查看可用播音角色(性别女性,语言为中文)asyncio.run(get_announcer(Gender="Female", Language="zh"))if 1:# 读取pdf并提取文本到txt文件,并将其内容转为mp3音频文件。page_num = 0with pdfplumber.open(pdf_path) as pdf:for page in pdf.pages:textdata = page.extract_text().replace("\n", "")#提取文字后删除末尾换行,以免转音频卡顿page_num += 1txt_path = pdf_path.split(".")[0]+"{:03d}".format(page_num)+'.txt'if len(textdata)>0:with open(txt_path ,'a',encoding='utf-8') as txt:txt.write(textdata)print('第'+str(page_num)+'页:',textdata)mp3_path = txt_path.split(".")[0]+'.mp3'asyncio.run(txt2mp3(textdata,mp3_path))print('第'+str(page_num)+'个txt文件已转音频:',mp3_path)print('Pdf文件共有'+str(page_num)+'页,已转换完成')

很快就搞定啦,见下图。以后再想听PDF就把上面代码跑起来!

四、变更播音员

在以上程序中修改以下代码if条件为1,即可查看可用播音角色。

    if 1:# 查看可用播音角色(性别女性,语言为中文),男性Gender="Male"asyncio.run(get_announcer(Gender="Female", Language="zh"))

运行后结果为一个list,通过json格式化后,如下所示。变更播音员只需要使用Name值替换前面announcer值即可。是不是很简单?

[{'Name': 'Microsoft Server Speech Text to Speech Voice (zh-HK, HiuGaaiNeural)','ShortName': 'zh-HK-HiuGaaiNeural','Gender': 'Female','Locale': 'zh-HK','SuggestedCodec': 'audio-24khz-48kbitrate-mono-mp3','FriendlyName': 'Microsoft HiuGaai Online (Natural) - Chinese (Cantonese Traditional)','Status': 'GA','VoiceTag': {'ContentCategories': ['General'],'VoicePersonalities': ['Friendly', 'Positive']},'Language': 'zh'
}, {'Name': 'Microsoft Server Speech Text to Speech Voice (zh-HK, HiuMaanNeural)','ShortName': 'zh-HK-HiuMaanNeural','Gender': 'Female','Locale': 'zh-HK','SuggestedCodec': 'audio-24khz-48kbitrate-mono-mp3','FriendlyName': 'Microsoft HiuMaan Online (Natural) - Chinese (Hong Kong)','Status': 'GA','VoiceTag': {'ContentCategories': ['General'],'VoicePersonalities': ['Friendly', 'Positive']},'Language': 'zh'
}, {'Name': 'Microsoft Server Speech Text to Speech Voice (zh-CN, XiaoxiaoNeural)','ShortName': 'zh-CN-XiaoxiaoNeural','Gender': 'Female','Locale': 'zh-CN','SuggestedCodec': 'audio-24khz-48kbitrate-mono-mp3','FriendlyName': 'Microsoft Xiaoxiao Online (Natural) - Chinese (Mainland)','Status': 'GA','VoiceTag': {'ContentCategories': ['News', 'Novel'],'VoicePersonalities': ['Warm']},'Language': 'zh'
}, {'Name': 'Microsoft Server Speech Text to Speech Voice (zh-CN, XiaoyiNeural)','ShortName': 'zh-CN-XiaoyiNeural','Gender': 'Female','Locale': 'zh-CN','SuggestedCodec': 'audio-24khz-48kbitrate-mono-mp3','FriendlyName': 'Microsoft Xiaoyi Online (Natural) - Chinese (Mainland)','Status': 'GA','VoiceTag': {'ContentCategories': ['Cartoon', 'Novel'],'VoicePersonalities': ['Lively']},'Language': 'zh'
}, {'Name': 'Microsoft Server Speech Text to Speech Voice (zh-CN-liaoning, XiaobeiNeural)','ShortName': 'zh-CN-liaoning-XiaobeiNeural','Gender': 'Female','Locale': 'zh-CN-liaoning','SuggestedCodec': 'audio-24khz-48kbitrate-mono-mp3','FriendlyName': 'Microsoft Xiaobei Online (Natural) - Chinese (Northeastern Mandarin)','Status': 'GA','VoiceTag': {'ContentCategories': ['Dialect'],'VoicePersonalities': ['Humorous']},'Language': 'zh'
}, {'Name': 'Microsoft Server Speech Text to Speech Voice (zh-TW, HsiaoChenNeural)','ShortName': 'zh-TW-HsiaoChenNeural','Gender': 'Female','Locale': 'zh-TW','SuggestedCodec': 'audio-24khz-48kbitrate-mono-mp3','FriendlyName': 'Microsoft HsiaoChen Online (Natural) - Chinese (Taiwan)','Status': 'GA','VoiceTag': {'ContentCategories': ['General'],'VoicePersonalities': ['Friendly', 'Positive']},'Language': 'zh'
}, {'Name': 'Microsoft Server Speech Text to Speech Voice (zh-TW, HsiaoYuNeural)','ShortName': 'zh-TW-HsiaoYuNeural','Gender': 'Female','Locale': 'zh-TW','SuggestedCodec': 'audio-24khz-48kbitrate-mono-mp3','FriendlyName': 'Microsoft HsiaoYu Online (Natural) - Chinese (Taiwanese Mandarin)','Status': 'GA','VoiceTag': {'ContentCategories': ['General'],'VoicePersonalities': ['Friendly', 'Positive']},'Language': 'zh'
}, {'Name': 'Microsoft Server Speech Text to Speech Voice (zh-CN-shaanxi, XiaoniNeural)','ShortName': 'zh-CN-shaanxi-XiaoniNeural','Gender': 'Female','Locale': 'zh-CN-shaanxi','SuggestedCodec': 'audio-24khz-48kbitrate-mono-mp3','FriendlyName': 'Microsoft Xiaoni Online (Natural) - Chinese (Zhongyuan Mandarin Shaanxi)','Status': 'GA','VoiceTag': {'ContentCategories': ['Dialect'],'VoicePersonalities': ['Bright']},'Language': 'zh'
}]

总结

查看所有播音角色,执行命令:>edge-tts --list-voices

(base) C:\Users\Administrator>edge-tts --list-voices
Name: af-ZA-AdriNeural
Gender: FemaleName: af-ZA-WillemNeural
Gender: MaleName: am-ET-AmehaNeural
Gender: MaleName: am-ET-MekdesNeural
Gender: FemaleName: ar-AE-FatimaNeural
Gender: FemaleName: ar-AE-HamdanNeural
Gender: MaleName: ar-BH-AliNeural
Gender: MaleName: ar-BH-LailaNeural
Gender: FemaleName: ar-DZ-AminaNeural
Gender: FemaleName: ar-DZ-IsmaelNeural
Gender: MaleName: ar-EG-SalmaNeural
Gender: FemaleName: ar-EG-ShakirNeural
Gender: MaleName: ar-IQ-BasselNeural
Gender: MaleName: ar-IQ-RanaNeural
Gender: FemaleName: ar-JO-SanaNeural
Gender: FemaleName: ar-JO-TaimNeural
Gender: MaleName: ar-KW-FahedNeural
Gender: MaleName: ar-KW-NouraNeural
Gender: FemaleName: ar-LB-LaylaNeural
Gender: FemaleName: ar-LB-RamiNeural
Gender: MaleName: ar-LY-ImanNeural
Gender: FemaleName: ar-LY-OmarNeural
Gender: MaleName: ar-MA-JamalNeural
Gender: MaleName: ar-MA-MounaNeural
Gender: FemaleName: ar-OM-AbdullahNeural
Gender: MaleName: ar-OM-AyshaNeural
Gender: FemaleName: ar-QA-AmalNeural
Gender: FemaleName: ar-QA-MoazNeural
Gender: MaleName: ar-SA-HamedNeural
Gender: MaleName: ar-SA-ZariyahNeural
Gender: FemaleName: ar-SY-AmanyNeural
Gender: FemaleName: ar-SY-LaithNeural
Gender: MaleName: ar-TN-HediNeural
Gender: MaleName: ar-TN-ReemNeural
Gender: FemaleName: ar-YE-MaryamNeural
Gender: FemaleName: ar-YE-SalehNeural
Gender: MaleName: az-AZ-BabekNeural
Gender: MaleName: az-AZ-BanuNeural
Gender: FemaleName: bg-BG-BorislavNeural
Gender: MaleName: bg-BG-KalinaNeural
Gender: FemaleName: bn-BD-NabanitaNeural
Gender: FemaleName: bn-BD-PradeepNeural
Gender: MaleName: bn-IN-BashkarNeural
Gender: MaleName: bn-IN-TanishaaNeural
Gender: FemaleName: bs-BA-GoranNeural
Gender: MaleName: bs-BA-VesnaNeural
Gender: FemaleName: ca-ES-EnricNeural
Gender: MaleName: ca-ES-JoanaNeural
Gender: FemaleName: cs-CZ-AntoninNeural
Gender: MaleName: cs-CZ-VlastaNeural
Gender: FemaleName: cy-GB-AledNeural
Gender: MaleName: cy-GB-NiaNeural
Gender: FemaleName: da-DK-ChristelNeural
Gender: FemaleName: da-DK-JeppeNeural
Gender: MaleName: de-AT-IngridNeural
Gender: FemaleName: de-AT-JonasNeural
Gender: MaleName: de-CH-JanNeural
Gender: MaleName: de-CH-LeniNeural
Gender: FemaleName: de-DE-AmalaNeural
Gender: FemaleName: de-DE-ConradNeural
Gender: MaleName: de-DE-KatjaNeural
Gender: FemaleName: de-DE-KillianNeural
Gender: MaleName: el-GR-AthinaNeural
Gender: FemaleName: el-GR-NestorasNeural
Gender: MaleName: en-AU-NatashaNeural
Gender: FemaleName: en-AU-WilliamNeural
Gender: MaleName: en-CA-ClaraNeural
Gender: FemaleName: en-CA-LiamNeural
Gender: MaleName: en-GB-LibbyNeural
Gender: FemaleName: en-GB-MaisieNeural
Gender: FemaleName: en-GB-RyanNeural
Gender: MaleName: en-GB-SoniaNeural
Gender: FemaleName: en-GB-ThomasNeural
Gender: MaleName: en-HK-SamNeural
Gender: MaleName: en-HK-YanNeural
Gender: FemaleName: en-IE-ConnorNeural
Gender: MaleName: en-IE-EmilyNeural
Gender: FemaleName: en-IN-NeerjaExpressiveNeural
Gender: FemaleName: en-IN-NeerjaNeural
Gender: FemaleName: en-IN-PrabhatNeural
Gender: MaleName: en-KE-AsiliaNeural
Gender: FemaleName: en-KE-ChilembaNeural
Gender: MaleName: en-NG-AbeoNeural
Gender: MaleName: en-NG-EzinneNeural
Gender: FemaleName: en-NZ-MitchellNeural
Gender: MaleName: en-NZ-MollyNeural
Gender: FemaleName: en-PH-JamesNeural
Gender: MaleName: en-PH-RosaNeural
Gender: FemaleName: en-SG-LunaNeural
Gender: FemaleName: en-SG-WayneNeural
Gender: MaleName: en-TZ-ElimuNeural
Gender: MaleName: en-TZ-ImaniNeural
Gender: FemaleName: en-US-AnaNeural
Gender: FemaleName: en-US-AriaNeural
Gender: FemaleName: en-US-ChristopherNeural
Gender: MaleName: en-US-EricNeural
Gender: MaleName: en-US-GuyNeural
Gender: MaleName: en-US-JennyNeural
Gender: FemaleName: en-US-MichelleNeural
Gender: FemaleName: en-US-RogerNeural
Gender: MaleName: en-US-SteffanNeural
Gender: MaleName: en-ZA-LeahNeural
Gender: FemaleName: en-ZA-LukeNeural
Gender: MaleName: es-AR-ElenaNeural
Gender: FemaleName: es-AR-TomasNeural
Gender: MaleName: es-BO-MarceloNeural
Gender: MaleName: es-BO-SofiaNeural
Gender: FemaleName: es-CL-CatalinaNeural
Gender: FemaleName: es-CL-LorenzoNeural
Gender: MaleName: es-CO-GonzaloNeural
Gender: MaleName: es-CO-SalomeNeural
Gender: FemaleName: es-CR-JuanNeural
Gender: MaleName: es-CR-MariaNeural
Gender: FemaleName: es-CU-BelkysNeural
Gender: FemaleName: es-CU-ManuelNeural
Gender: MaleName: es-DO-EmilioNeural
Gender: MaleName: es-DO-RamonaNeural
Gender: FemaleName: es-EC-AndreaNeural
Gender: FemaleName: es-EC-LuisNeural
Gender: MaleName: es-ES-AlvaroNeural
Gender: MaleName: es-ES-ElviraNeural
Gender: FemaleName: es-GQ-JavierNeural
Gender: MaleName: es-GQ-TeresaNeural
Gender: FemaleName: es-GT-AndresNeural
Gender: MaleName: es-GT-MartaNeural
Gender: FemaleName: es-HN-CarlosNeural
Gender: MaleName: es-HN-KarlaNeural
Gender: FemaleName: es-MX-DaliaNeural
Gender: FemaleName: es-MX-JorgeNeural
Gender: MaleName: es-NI-FedericoNeural
Gender: MaleName: es-NI-YolandaNeural
Gender: FemaleName: es-PA-MargaritaNeural
Gender: FemaleName: es-PA-RobertoNeural
Gender: MaleName: es-PE-AlexNeural
Gender: MaleName: es-PE-CamilaNeural
Gender: FemaleName: es-PR-KarinaNeural
Gender: FemaleName: es-PR-VictorNeural
Gender: MaleName: es-PY-MarioNeural
Gender: MaleName: es-PY-TaniaNeural
Gender: FemaleName: es-SV-LorenaNeural
Gender: FemaleName: es-SV-RodrigoNeural
Gender: MaleName: es-US-AlonsoNeural
Gender: MaleName: es-US-PalomaNeural
Gender: FemaleName: es-UY-MateoNeural
Gender: MaleName: es-UY-ValentinaNeural
Gender: FemaleName: es-VE-PaolaNeural
Gender: FemaleName: es-VE-SebastianNeural
Gender: MaleName: et-EE-AnuNeural
Gender: FemaleName: et-EE-KertNeural
Gender: MaleName: fa-IR-DilaraNeural
Gender: FemaleName: fa-IR-FaridNeural
Gender: MaleName: fi-FI-HarriNeural
Gender: MaleName: fi-FI-NooraNeural
Gender: FemaleName: fil-PH-AngeloNeural
Gender: MaleName: fil-PH-BlessicaNeural
Gender: FemaleName: fr-BE-CharlineNeural
Gender: FemaleName: fr-BE-GerardNeural
Gender: MaleName: fr-CA-AntoineNeural
Gender: MaleName: fr-CA-JeanNeural
Gender: MaleName: fr-CA-SylvieNeural
Gender: FemaleName: fr-CH-ArianeNeural
Gender: FemaleName: fr-CH-FabriceNeural
Gender: MaleName: fr-FR-DeniseNeural
Gender: FemaleName: fr-FR-EloiseNeural
Gender: FemaleName: fr-FR-HenriNeural
Gender: MaleName: ga-IE-ColmNeural
Gender: MaleName: ga-IE-OrlaNeural
Gender: FemaleName: gl-ES-RoiNeural
Gender: MaleName: gl-ES-SabelaNeural
Gender: FemaleName: gu-IN-DhwaniNeural
Gender: FemaleName: gu-IN-NiranjanNeural
Gender: MaleName: he-IL-AvriNeural
Gender: MaleName: he-IL-HilaNeural
Gender: FemaleName: hi-IN-MadhurNeural
Gender: MaleName: hi-IN-SwaraNeural
Gender: FemaleName: hr-HR-GabrijelaNeural
Gender: FemaleName: hr-HR-SreckoNeural
Gender: MaleName: hu-HU-NoemiNeural
Gender: FemaleName: hu-HU-TamasNeural
Gender: MaleName: id-ID-ArdiNeural
Gender: MaleName: id-ID-GadisNeural
Gender: FemaleName: is-IS-GudrunNeural
Gender: FemaleName: is-IS-GunnarNeural
Gender: MaleName: it-IT-DiegoNeural
Gender: MaleName: it-IT-ElsaNeural
Gender: FemaleName: it-IT-IsabellaNeural
Gender: FemaleName: ja-JP-KeitaNeural
Gender: MaleName: ja-JP-NanamiNeural
Gender: FemaleName: jv-ID-DimasNeural
Gender: MaleName: jv-ID-SitiNeural
Gender: FemaleName: ka-GE-EkaNeural
Gender: FemaleName: ka-GE-GiorgiNeural
Gender: MaleName: kk-KZ-AigulNeural
Gender: FemaleName: kk-KZ-DauletNeural
Gender: MaleName: km-KH-PisethNeural
Gender: MaleName: km-KH-SreymomNeural
Gender: FemaleName: kn-IN-GaganNeural
Gender: MaleName: kn-IN-SapnaNeural
Gender: FemaleName: ko-KR-InJoonNeural
Gender: MaleName: ko-KR-SunHiNeural
Gender: FemaleName: lo-LA-ChanthavongNeural
Gender: MaleName: lo-LA-KeomanyNeural
Gender: FemaleName: lt-LT-LeonasNeural
Gender: MaleName: lt-LT-OnaNeural
Gender: FemaleName: lv-LV-EveritaNeural
Gender: FemaleName: lv-LV-NilsNeural
Gender: MaleName: mk-MK-AleksandarNeural
Gender: MaleName: mk-MK-MarijaNeural
Gender: FemaleName: ml-IN-MidhunNeural
Gender: MaleName: ml-IN-SobhanaNeural
Gender: FemaleName: mn-MN-BataaNeural
Gender: MaleName: mn-MN-YesuiNeural
Gender: FemaleName: mr-IN-AarohiNeural
Gender: FemaleName: mr-IN-ManoharNeural
Gender: MaleName: ms-MY-OsmanNeural
Gender: MaleName: ms-MY-YasminNeural
Gender: FemaleName: mt-MT-GraceNeural
Gender: FemaleName: mt-MT-JosephNeural
Gender: MaleName: my-MM-NilarNeural
Gender: FemaleName: my-MM-ThihaNeural
Gender: MaleName: nb-NO-FinnNeural
Gender: MaleName: nb-NO-PernilleNeural
Gender: FemaleName: ne-NP-HemkalaNeural
Gender: FemaleName: ne-NP-SagarNeural
Gender: MaleName: nl-BE-ArnaudNeural
Gender: MaleName: nl-BE-DenaNeural
Gender: FemaleName: nl-NL-ColetteNeural
Gender: FemaleName: nl-NL-FennaNeural
Gender: FemaleName: nl-NL-MaartenNeural
Gender: MaleName: pl-PL-MarekNeural
Gender: MaleName: pl-PL-ZofiaNeural
Gender: FemaleName: ps-AF-GulNawazNeural
Gender: MaleName: ps-AF-LatifaNeural
Gender: FemaleName: pt-BR-AntonioNeural
Gender: MaleName: pt-BR-FranciscaNeural
Gender: FemaleName: pt-PT-DuarteNeural
Gender: MaleName: pt-PT-RaquelNeural
Gender: FemaleName: ro-RO-AlinaNeural
Gender: FemaleName: ro-RO-EmilNeural
Gender: MaleName: ru-RU-DmitryNeural
Gender: MaleName: ru-RU-SvetlanaNeural
Gender: FemaleName: si-LK-SameeraNeural
Gender: MaleName: si-LK-ThiliniNeural
Gender: FemaleName: sk-SK-LukasNeural
Gender: MaleName: sk-SK-ViktoriaNeural
Gender: FemaleName: sl-SI-PetraNeural
Gender: FemaleName: sl-SI-RokNeural
Gender: MaleName: so-SO-MuuseNeural
Gender: MaleName: so-SO-UbaxNeural
Gender: FemaleName: sq-AL-AnilaNeural
Gender: FemaleName: sq-AL-IlirNeural
Gender: MaleName: sr-RS-NicholasNeural
Gender: MaleName: sr-RS-SophieNeural
Gender: FemaleName: su-ID-JajangNeural
Gender: MaleName: su-ID-TutiNeural
Gender: FemaleName: sv-SE-MattiasNeural
Gender: MaleName: sv-SE-SofieNeural
Gender: FemaleName: sw-KE-RafikiNeural
Gender: MaleName: sw-KE-ZuriNeural
Gender: FemaleName: sw-TZ-DaudiNeural
Gender: MaleName: sw-TZ-RehemaNeural
Gender: FemaleName: ta-IN-PallaviNeural
Gender: FemaleName: ta-IN-ValluvarNeural
Gender: MaleName: ta-LK-KumarNeural
Gender: MaleName: ta-LK-SaranyaNeural
Gender: FemaleName: ta-MY-KaniNeural
Gender: FemaleName: ta-MY-SuryaNeural
Gender: MaleName: ta-SG-AnbuNeural
Gender: MaleName: ta-SG-VenbaNeural
Gender: FemaleName: te-IN-MohanNeural
Gender: MaleName: te-IN-ShrutiNeural
Gender: FemaleName: th-TH-NiwatNeural
Gender: MaleName: th-TH-PremwadeeNeural
Gender: FemaleName: tr-TR-AhmetNeural
Gender: MaleName: tr-TR-EmelNeural
Gender: FemaleName: uk-UA-OstapNeural
Gender: MaleName: uk-UA-PolinaNeural
Gender: FemaleName: ur-IN-GulNeural
Gender: FemaleName: ur-IN-SalmanNeural
Gender: MaleName: ur-PK-AsadNeural
Gender: MaleName: ur-PK-UzmaNeural
Gender: FemaleName: uz-UZ-MadinaNeural
Gender: FemaleName: uz-UZ-SardorNeural
Gender: MaleName: vi-VN-HoaiMyNeural
Gender: FemaleName: vi-VN-NamMinhNeural
Gender: MaleName: zh-CN-XiaoxiaoNeural
Gender: FemaleName: zh-CN-XiaoyiNeural
Gender: FemaleName: zh-CN-YunjianNeural
Gender: MaleName: zh-CN-YunxiNeural
Gender: MaleName: zh-CN-YunxiaNeural
Gender: MaleName: zh-CN-YunyangNeural
Gender: MaleName: zh-CN-liaoning-XiaobeiNeural
Gender: FemaleName: zh-CN-shaanxi-XiaoniNeural
Gender: FemaleName: zh-HK-HiuGaaiNeural
Gender: FemaleName: zh-HK-HiuMaanNeural
Gender: FemaleName: zh-HK-WanLungNeural
Gender: MaleName: zh-TW-HsiaoChenNeural
Gender: FemaleName: zh-TW-HsiaoYuNeural
Gender: FemaleName: zh-TW-YunJheNeural
Gender: MaleName: zu-ZA-ThandoNeural
Gender: FemaleName: zu-ZA-ThembaNeural
Gender: Male

【Python小技巧】将pdf转为txt,并使用edge-tts将txt批量转为MP3(不想看书想听书的转过来,送源代码)相关推荐

  1. 不藏了!分享100个Python小技巧!!

    目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手. 你可以用它来完成很多任务,比如数据科学.机器学习.Web开发.脚本编写.自动化等 ...

  2. 收藏喜+1!值得使用的100个Python小技巧

    目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手. 你可以用它来完成很多任务,比如数据科学.机器学习.Web开发.脚本编写.自动化等 ...

  3. 快收藏!整理了 100 个 Python 小技巧

    作者:小F 来源: 法纳斯特 目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手. 你可以用它来完成很多任务,比如数据科学.机器学习. ...

  4. python hist函数_虎哥的python小技巧放送之绘制统计图(2)

    先放出第一期让大家回顾一下上次的内容 虎哥的python小技巧放送之绘制统计图(1) 第一期主要给大家讲了一些图形设置的东西.这一次开始正式带大家画图~ 折线图:折线图可以通过matplotlib中的 ...

  5. 3分钟学会python_3分钟学会一个Python小技巧

    Python时间日期转换在开发中是非常高频的一个操作,你经常会遇到需要将字符串转换成 datetime 或者是反过来将 datetime 转换成字符串. datetime 分别提供了两个方法 strp ...

  6. 一些你可能不知道的 Python 小技巧!

    [CSDN 编者按]Python 风头正盛,未来一段时间内想必也会是热门编程语言之一.因此,熟练掌握 Python 对开发者来说极其重要,说不定能给作为开发者的你带来意想不到的财富. 作者 | Seb ...

  7. python小技巧:一步步教你用Python实现

    python小技巧:一步步教你用Python实现2048小游戏 https://www.meipian.cn/2xywlpbv https://www.meipian.cn/2xywhexo http ...

  8. 惊了惊了,三分钟学会七个Python小技巧(建议收藏)

    前言 有很多小可爱再入门的路上越走越远......这次分享一下简单的小技巧重新让你爱上Python啦. Python的小技巧很多,入门容易精通难!在进阶的路上,有没有什么好的技巧和好的方法,就 是不断 ...

  9. Python小技巧:富比较方法的妙用,__lt__、__le__、__eq__、__ne__、__gt__、__ge__。。。

    前言 这里是Python小技巧的系列文章.这是第二篇,富比较方法的妙用. 在 Python中,富比较方法共6个,如下表所示: 见名知意,富比较主要用于比较. 富比较方法 使用 释义 释义 object ...

  10. 100个Python小技巧!帮你节省很多头发

    目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手.你可以用它来完成很多任务,比如数据科学.机器学习.Web开发.脚本编写.自动化等. ...

最新文章

  1. CENTOS6.4 IBUS输入法不显示候选词解决办法
  2. 在软件中常用的“撤销”操作,其本质是“栈”!
  3. 【Flutter】Dart 面向对象 ( get 方法 | set 方法 | 静态方法 )
  4. 14 位大咖导师集结完毕,阿里云云原生加速器就等你来
  5. \sdk\include\wspiapi.h(47) : error C2265: 'Unknown' : reference to a zero-sized array is illegal 解
  6. 標準化,歸一化和的概念与适用范围整理
  7. Apache、tomcat、Nginx常用配置合集
  8. 两个 Integer 数值之间不建议使用 “==” 进行比较
  9. kvm虚拟化管理平台WebVirtMgr部署-完整记录(安装Windows虚拟机)-(4)
  10. 折腾凤凰系统 (by quqi99)
  11. 2019年360笔试
  12. Chrome Edge与Safari书签同步
  13. cs字体样式和盒子模型学习1
  14. 使用 Amazon Deep Learning AMI 快速实现 CUDA,cuDNN 和深度学习框架版本兼容
  15. RabbitMQ消息100%不丢失?
  16. C语言之程序环境和预处理
  17. ios状态栏的颜色修改
  18. 数据结构——一元n次多项式加法
  19. uniapp自定义整包更新与热更新
  20. Ubuntu安装eigen

热门文章

  1. JS中的堆和栈怎么理解?
  2. java实现舞伴分配问题
  3. AMBA AHB的burst termination
  4. JAVA计算机毕业设计计算机组成原理教学演示软件部署+源码+数据库+系统+lw文档
  5. 八大排序算法的Python实现 1
  6. (project generation have a problem)STM32CubeMX生成工程一直报错项目生成有问题[玄学三步解]
  7. ssm航空订票系统毕业设计(附源码、运行环境)
  8. 临清有学计算机编程的吗,『临清·第五次主题活动·少儿编程课堂』聊报小记者“小小程序员”活动...
  9. R语言使用epiDisplay包的kap函数(kap.ByCategory)函数计算Kappa统计量的值(总一致性、期望一致性)、对多个评分对象的结果进行一致性分析、评分的类别为多个类别
  10. Nginx查看、隐藏和修改版本号