How to convert PDF to MP3 with Python.
一、PDF转为MP3
我们平常看到很多文件都是PDF格式,网上的各类书籍多为此格式。有时候不方便阅读,或者怕费眼睛伤颈椎,那么有没有一种方法可以把它变为音频,这样上下班路上也就可以听一听。
这里做个科普,什么是TTS?TTS(Text To Speech,文本转语音)是语音合成应用的一种,它将储存于电脑中的文件,如帮助文件或者网页,转换成自然语音输出。edge-tts就是将微软的语音合成技术,他是将edge浏览器里提供的tts打包成Python第三方包,这样就可以免费调用微软的语音合成技术。
二、准备工作
将PDF转为音频MP3文件,需要两步。第一步,将pdf转为txt文本;第二步,将txt转为音频。所以我们需要以下两个库。
1. 安装pdfplumber包,用于将pdf转为txt
(base) C:\Users\Administrator>pip install pdfplumber
Collecting pdfplumber
Downloading 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==20221105
Downloading 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.10
Downloading 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-tts
Downloading 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=1.0 in d:\programdata\anaconda3\lib\site-packages (from aiohttp>=3.8.0->edge-tts) (1.8.2)
Requirement already satisfied: multidict=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=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=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=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+filename
announcer='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 = 0
with pdfplumber.open(pdf_path) as pdf:
for page in pdf.pages:
textdata = page.extract_text().replace("\n", "")#提取文字后删除末尾换行,以免转音频卡顿
page_num += 1
txt_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: Female Name: af-ZA-WillemNeural Gender: Male Name: am-ET-AmehaNeural Gender: Male Name: am-ET-MekdesNeural Gender: Female Name: ar-AE-FatimaNeural Gender: Female Name: ar-AE-HamdanNeural Gender: Male Name: ar-BH-AliNeural Gender: Male Name: ar-BH-LailaNeural Gender: Female Name: ar-DZ-AminaNeural Gender: Female Name: ar-DZ-IsmaelNeural Gender: Male Name: ar-EG-SalmaNeural Gender: Female Name: ar-EG-ShakirNeural Gender: Male Name: ar-IQ-BasselNeural Gender: Male Name: ar-IQ-RanaNeural Gender: Female Name: ar-JO-SanaNeural Gender: Female Name: ar-JO-TaimNeural Gender: Male Name: ar-KW-FahedNeural Gender: Male Name: ar-KW-NouraNeural Gender: Female Name: ar-LB-LaylaNeural Gender: Female Name: ar-LB-RamiNeural Gender: Male Name: ar-LY-ImanNeural Gender: Female Name: ar-LY-OmarNeural Gender: Male Name: ar-MA-JamalNeural Gender: Male Name: ar-MA-MounaNeural Gender: Female Name: ar-OM-AbdullahNeural Gender: Male Name: ar-OM-AyshaNeural Gender: Female Name: ar-QA-AmalNeural Gender: Female Name: ar-QA-MoazNeural Gender: Male Name: ar-SA-HamedNeural Gender: Male Name: ar-SA-ZariyahNeural Gender: Female Name: ar-SY-AmanyNeural Gender: Female Name: ar-SY-LaithNeural Gender: Male Name: ar-TN-HediNeural Gender: Male Name: ar-TN-ReemNeural Gender: Female Name: ar-YE-MaryamNeural Gender: Female Name: ar-YE-SalehNeural Gender: Male Name: az-AZ-BabekNeural Gender: Male Name: az-AZ-BanuNeural Gender: Female Name: bg-BG-BorislavNeural Gender: Male Name: bg-BG-KalinaNeural Gender: Female Name: bn-BD-NabanitaNeural Gender: Female Name: bn-BD-PradeepNeural Gender: Male Name: bn-IN-BashkarNeural Gender: Male Name: bn-IN-TanishaaNeural Gender: Female Name: bs-BA-GoranNeural Gender: Male Name: bs-BA-VesnaNeural Gender: Female Name: ca-ES-EnricNeural Gender: Male Name: ca-ES-JoanaNeural Gender: Female Name: cs-CZ-AntoninNeural Gender: Male Name: cs-CZ-VlastaNeural Gender: Female Name: cy-GB-AledNeural Gender: Male Name: cy-GB-NiaNeural Gender: Female Name: da-DK-ChristelNeural Gender: Female Name: da-DK-JeppeNeural Gender: Male Name: de-AT-IngridNeural Gender: Female Name: de-AT-JonasNeural Gender: Male Name: de-CH-JanNeural Gender: Male Name: de-CH-LeniNeural Gender: Female Name: de-DE-AmalaNeural Gender: Female Name: de-DE-ConradNeural Gender: Male Name: de-DE-KatjaNeural Gender: Female Name: de-DE-KillianNeural Gender: Male Name: el-GR-AthinaNeural Gender: Female Name: el-GR-NestorasNeural Gender: Male Name: en-AU-NatashaNeural Gender: Female Name: en-AU-WilliamNeural Gender: Male Name: en-CA-ClaraNeural Gender: Female Name: en-CA-LiamNeural Gender: Male Name: en-GB-LibbyNeural Gender: Female Name: en-GB-MaisieNeural Gender: Female Name: en-GB-RyanNeural Gender: Male Name: en-GB-SoniaNeural Gender: Female Name: en-GB-ThomasNeural Gender: Male Name: en-HK-SamNeural Gender: Male Name: en-HK-YanNeural Gender: Female Name: en-IE-ConnorNeural Gender: Male Name: en-IE-EmilyNeural Gender: Female Name: en-IN-NeerjaExpressiveNeural Gender: Female Name: en-IN-NeerjaNeural Gender: Female Name: en-IN-PrabhatNeural Gender: Male Name: en-KE-AsiliaNeural Gender: Female Name: en-KE-ChilembaNeural Gender: Male Name: en-NG-AbeoNeural Gender: Male Name: en-NG-EzinneNeural Gender: Female Name: en-NZ-MitchellNeural Gender: Male Name: en-NZ-MollyNeural Gender: Female Name: en-PH-JamesNeural Gender: Male Name: en-PH-RosaNeural Gender: Female Name: en-SG-LunaNeural Gender: Female Name: en-SG-WayneNeural Gender: Male Name: en-TZ-ElimuNeural Gender: Male Name: en-TZ-ImaniNeural Gender: Female Name: en-US-AnaNeural Gender: Female Name: en-US-AriaNeural Gender: Female Name: en-US-ChristopherNeural Gender: Male Name: en-US-EricNeural Gender: Male Name: en-US-GuyNeural Gender: Male Name: en-US-JennyNeural Gender: Female Name: en-US-MichelleNeural Gender: Female Name: en-US-RogerNeural Gender: Male Name: en-US-SteffanNeural Gender: Male Name: en-ZA-LeahNeural Gender: Female Name: en-ZA-LukeNeural Gender: Male Name: es-AR-ElenaNeural Gender: Female Name: es-AR-TomasNeural Gender: Male Name: es-BO-MarceloNeural Gender: Male Name: es-BO-SofiaNeural Gender: Female Name: es-CL-CatalinaNeural Gender: Female Name: es-CL-LorenzoNeural Gender: Male Name: es-CO-GonzaloNeural Gender: Male Name: es-CO-SalomeNeural Gender: Female Name: es-CR-JuanNeural Gender: Male Name: es-CR-MariaNeural Gender: Female Name: es-CU-BelkysNeural Gender: Female Name: es-CU-ManuelNeural Gender: Male Name: es-DO-EmilioNeural Gender: Male Name: es-DO-RamonaNeural Gender: Female Name: es-EC-AndreaNeural Gender: Female Name: es-EC-LuisNeural Gender: Male Name: es-ES-AlvaroNeural Gender: Male Name: es-ES-ElviraNeural Gender: Female Name: es-GQ-JavierNeural Gender: Male Name: es-GQ-TeresaNeural Gender: Female Name: es-GT-AndresNeural Gender: Male Name: es-GT-MartaNeural Gender: Female Name: es-HN-CarlosNeural Gender: Male Name: es-HN-KarlaNeural Gender: Female Name: es-MX-DaliaNeural Gender: Female Name: es-MX-JorgeNeural Gender: Male Name: es-NI-FedericoNeural Gender: Male Name: es-NI-YolandaNeural Gender: Female Name: es-PA-MargaritaNeural Gender: Female Name: es-PA-RobertoNeural Gender: Male Name: es-PE-AlexNeural Gender: Male Name: es-PE-CamilaNeural Gender: Female Name: es-PR-KarinaNeural Gender: Female Name: es-PR-VictorNeural Gender: Male Name: es-PY-MarioNeural Gender: Male Name: es-PY-TaniaNeural Gender: Female Name: es-SV-LorenaNeural Gender: Female Name: es-SV-RodrigoNeural Gender: Male Name: es-US-AlonsoNeural Gender: Male Name: es-US-PalomaNeural Gender: Female Name: es-UY-MateoNeural Gender: Male Name: es-UY-ValentinaNeural Gender: Female Name: es-VE-PaolaNeural Gender: Female Name: es-VE-SebastianNeural Gender: Male Name: et-EE-AnuNeural Gender: Female Name: et-EE-KertNeural Gender: Male Name: fa-IR-DilaraNeural Gender: Female Name: fa-IR-FaridNeural Gender: Male Name: fi-FI-HarriNeural Gender: Male Name: fi-FI-NooraNeural Gender: Female Name: fil-PH-AngeloNeural Gender: Male Name: fil-PH-BlessicaNeural Gender: Female Name: fr-BE-CharlineNeural Gender: Female Name: fr-BE-GerardNeural Gender: Male Name: fr-CA-AntoineNeural Gender: Male Name: fr-CA-JeanNeural Gender: Male Name: fr-CA-SylvieNeural Gender: Female Name: fr-CH-ArianeNeural Gender: Female Name: fr-CH-FabriceNeural Gender: Male Name: fr-FR-DeniseNeural Gender: Female Name: fr-FR-EloiseNeural Gender: Female Name: fr-FR-HenriNeural Gender: Male Name: ga-IE-ColmNeural Gender: Male Name: ga-IE-OrlaNeural Gender: Female Name: gl-ES-RoiNeural Gender: Male Name: gl-ES-SabelaNeural Gender: Female Name: gu-IN-DhwaniNeural Gender: Female Name: gu-IN-NiranjanNeural Gender: Male Name: he-IL-AvriNeural Gender: Male Name: he-IL-HilaNeural Gender: Female Name: hi-IN-MadhurNeural Gender: Male Name: hi-IN-SwaraNeural Gender: Female Name: hr-HR-GabrijelaNeural Gender: Female Name: hr-HR-SreckoNeural Gender: Male Name: hu-HU-NoemiNeural Gender: Female Name: hu-HU-TamasNeural Gender: Male Name: id-ID-ArdiNeural Gender: Male Name: id-ID-GadisNeural Gender: Female Name: is-IS-GudrunNeural Gender: Female Name: is-IS-GunnarNeural Gender: Male Name: it-IT-DiegoNeural Gender: Male Name: it-IT-ElsaNeural Gender: Female Name: it-IT-IsabellaNeural Gender: Female Name: ja-JP-KeitaNeural Gender: Male Name: ja-JP-NanamiNeural Gender: Female Name: jv-ID-DimasNeural Gender: Male Name: jv-ID-SitiNeural Gender: Female Name: ka-GE-EkaNeural Gender: Female Name: ka-GE-GiorgiNeural Gender: Male Name: kk-KZ-AigulNeural Gender: Female Name: kk-KZ-DauletNeural Gender: Male Name: km-KH-PisethNeural Gender: Male Name: km-KH-SreymomNeural Gender: Female Name: kn-IN-GaganNeural Gender: Male Name: kn-IN-SapnaNeural Gender: Female Name: ko-KR-InJoonNeural Gender: Male Name: ko-KR-SunHiNeural Gender: Female Name: lo-LA-ChanthavongNeural Gender: Male Name: lo-LA-KeomanyNeural Gender: Female Name: lt-LT-LeonasNeural Gender: Male Name: lt-LT-OnaNeural Gender: Female Name: lv-LV-EveritaNeural Gender: Female Name: lv-LV-NilsNeural Gender: Male Name: mk-MK-AleksandarNeural Gender: Male Name: mk-MK-MarijaNeural Gender: Female Name: ml-IN-MidhunNeural Gender: Male Name: ml-IN-SobhanaNeural Gender: Female Name: mn-MN-BataaNeural Gender: Male Name: mn-MN-YesuiNeural Gender: Female Name: mr-IN-AarohiNeural Gender: Female Name: mr-IN-ManoharNeural Gender: Male Name: ms-MY-OsmanNeural Gender: Male Name: ms-MY-YasminNeural Gender: Female Name: mt-MT-GraceNeural Gender: Female Name: mt-MT-JosephNeural Gender: Male Name: my-MM-NilarNeural Gender: Female Name: my-MM-ThihaNeural Gender: Male Name: nb-NO-FinnNeural Gender: Male Name: nb-NO-PernilleNeural Gender: Female Name: ne-NP-HemkalaNeural Gender: Female Name: ne-NP-SagarNeural Gender: Male Name: nl-BE-ArnaudNeural Gender: Male Name: nl-BE-DenaNeural Gender: Female Name: nl-NL-ColetteNeural Gender: Female Name: nl-NL-FennaNeural Gender: Female Name: nl-NL-MaartenNeural Gender: Male Name: pl-PL-MarekNeural Gender: Male Name: pl-PL-ZofiaNeural Gender: Female Name: ps-AF-GulNawazNeural Gender: Male Name: ps-AF-LatifaNeural Gender: Female Name: pt-BR-AntonioNeural Gender: Male Name: pt-BR-FranciscaNeural Gender: Female Name: pt-PT-DuarteNeural Gender: Male Name: pt-PT-RaquelNeural Gender: Female Name: ro-RO-AlinaNeural Gender: Female Name: ro-RO-EmilNeural Gender: Male Name: ru-RU-DmitryNeural Gender: Male Name: ru-RU-SvetlanaNeural Gender: Female Name: si-LK-SameeraNeural Gender: Male Name: si-LK-ThiliniNeural Gender: Female Name: sk-SK-LukasNeural Gender: Male Name: sk-SK-ViktoriaNeural Gender: Female Name: sl-SI-PetraNeural Gender: Female Name: sl-SI-RokNeural Gender: Male Name: so-SO-MuuseNeural Gender: Male Name: so-SO-UbaxNeural Gender: Female Name: sq-AL-AnilaNeural Gender: Female Name: sq-AL-IlirNeural Gender: Male Name: sr-RS-NicholasNeural Gender: Male Name: sr-RS-SophieNeural Gender: Female Name: su-ID-JajangNeural Gender: Male Name: su-ID-TutiNeural Gender: Female Name: sv-SE-MattiasNeural Gender: Male Name: sv-SE-SofieNeural Gender: Female Name: sw-KE-RafikiNeural Gender: Male Name: sw-KE-ZuriNeural Gender: Female Name: sw-TZ-DaudiNeural Gender: Male Name: sw-TZ-RehemaNeural Gender: Female Name: ta-IN-PallaviNeural Gender: Female Name: ta-IN-ValluvarNeural Gender: Male Name: ta-LK-KumarNeural Gender: Male Name: ta-LK-SaranyaNeural Gender: Female Name: ta-MY-KaniNeural Gender: Female Name: ta-MY-SuryaNeural Gender: Male Name: ta-SG-AnbuNeural Gender: Male Name: ta-SG-VenbaNeural Gender: Female Name: te-IN-MohanNeural Gender: Male Name: te-IN-ShrutiNeural Gender: Female Name: th-TH-NiwatNeural Gender: Male Name: th-TH-PremwadeeNeural Gender: Female Name: tr-TR-AhmetNeural Gender: Male Name: tr-TR-EmelNeural Gender: Female Name: uk-UA-OstapNeural Gender: Male Name: uk-UA-PolinaNeural Gender: Female Name: ur-IN-GulNeural Gender: Female Name: ur-IN-SalmanNeural Gender: Male Name: ur-PK-AsadNeural Gender: Male Name: ur-PK-UzmaNeural Gender: Female Name: uz-UZ-MadinaNeural Gender: Female Name: uz-UZ-SardorNeural Gender: Male Name: vi-VN-HoaiMyNeural Gender: Female Name: vi-VN-NamMinhNeural Gender: Male Name: zh-CN-XiaoxiaoNeural Gender: Female Name: zh-CN-XiaoyiNeural Gender: Female Name: zh-CN-YunjianNeural Gender: Male Name: zh-CN-YunxiNeural Gender: Male Name: zh-CN-YunxiaNeural Gender: Male Name: zh-CN-YunyangNeural Gender: Male Name: zh-CN-liaoning-XiaobeiNeural Gender: Female Name: zh-CN-shaanxi-XiaoniNeural Gender: Female Name: zh-HK-HiuGaaiNeural Gender: Female Name: zh-HK-HiuMaanNeural Gender: Female Name: zh-HK-WanLungNeural Gender: Male Name: zh-TW-HsiaoChenNeural Gender: Female Name: zh-TW-HsiaoYuNeural Gender: Female Name: zh-TW-YunJheNeural Gender: Male Name: zu-ZA-ThandoNeural Gender: Female Name: zu-ZA-ThembaNeural Gender: Male
The above is the detailed content of How to convert PDF to MP3 with Python.. For more information, please follow other related articles on the PHP Chinese website!
Hot AI Tools
Undress AI Tool
Undress images for free
Undresser.AI Undress
AI-powered app for creating realistic nude photos
AI Clothes Remover
Online AI tool for removing clothes from photos.
Clothoff.io
AI clothes remover
Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!
Hot Article
Hot Tools
Notepad++7.3.1
Easy-to-use and free code editor
SublimeText3 Chinese version
Chinese version, very easy to use
Zend Studio 13.0.1
Powerful PHP integrated development environment
Dreamweaver CS6
Visual web development tools
SublimeText3 Mac version
God-level code editing software (SublimeText3)
What are class methods in Python
Aug 21, 2025 am 04:12 AM
ClassmethodsinPythonareboundtotheclassandnottoinstances,allowingthemtobecalledwithoutcreatinganobject.1.Theyaredefinedusingthe@classmethoddecoratorandtakeclsasthefirstparameter,referringtotheclassitself.2.Theycanaccessclassvariablesandarecommonlyused
python asyncio queue example
Aug 21, 2025 am 02:13 AM
asyncio.Queue is a queue tool for secure communication between asynchronous tasks. 1. The producer adds data through awaitqueue.put(item), and the consumer uses awaitqueue.get() to obtain data; 2. For each item you process, you need to call queue.task_done() to wait for queue.join() to complete all tasks; 3. Use None as the end signal to notify the consumer to stop; 4. When multiple consumers, multiple end signals need to be sent or all tasks have been processed before canceling the task; 5. The queue supports setting maxsize limit capacity, put and get operations automatically suspend and do not block the event loop, and the program finally passes Canc
How to use regular expressions with the re module in Python?
Aug 22, 2025 am 07:07 AM
Regular expressions are implemented in Python through the re module for searching, matching and manipulating strings. 1. Use re.search() to find the first match in the entire string, re.match() only matches at the beginning of the string; 2. Use brackets() to capture the matching subgroups, which can be named to improve readability; 3. re.findall() returns all non-overlapping matches, and re.finditer() returns the iterator of the matching object; 4. re.sub() replaces the matching text and supports dynamic function replacement; 5. Common patterns include \d, \w, \s, etc., you can use re.IGNORECASE, re.MULTILINE, re.DOTALL, re
How to build and run Python in Sublime Text?
Aug 22, 2025 pm 03:37 PM
EnsurePythonisinstalledbyrunningpython--versionorpython3--versionintheterminal;ifnotinstalled,downloadfrompython.organdaddtoPATH.2.InSublimeText,gotoTools>BuildSystem>NewBuildSystem,replacecontentwith{"cmd":["python","-
How to use variables and data types in Python
Aug 20, 2025 am 02:07 AM
VariablesinPythonarecreatedbyassigningavalueusingthe=operator,anddatatypessuchasint,float,str,bool,andNoneTypedefinethekindofdatabeingstored,withPythonbeingdynamicallytypedsotypecheckingoccursatruntimeusingtype(),andwhilevariablescanbereassignedtodif
How to pass command-line arguments to a script in Python
Aug 20, 2025 pm 01:50 PM
Usesys.argvforsimpleargumentaccess,whereargumentsaremanuallyhandledandnoautomaticvalidationorhelpisprovided.2.Useargparseforrobustinterfaces,asitsupportsautomatichelp,typechecking,optionalarguments,anddefaultvalues.3.argparseisrecommendedforcomplexsc
How to debug a remote Python application in VSCode
Aug 30, 2025 am 06:17 AM
To debug a remote Python application, you need to use debugpy and configure port forwarding and path mapping: First, install debugpy on the remote machine and modify the code to listen to port 5678, forward the remote port to the local area through the SSH tunnel, then configure "AttachtoRemotePython" in VSCode's launch.json and correctly set the localRoot and remoteRoot path mappings. Finally, start the application and connect to the debugger to realize remote breakpoint debugging, variable checking and code stepping. The entire process depends on debugpy, secure port forwarding and precise path matching.
How to fill out and sign a PDF form on a Mac?
Aug 18, 2025 am 11:07 AM
OpenthePDFinPreviewbydouble-clickingit.2.ClickfillablefieldstotypeorusetheTexttooltoaddtextanywhere.3.UseTabtonavigatebetweenfieldsorclickmanually.4.Clickcheckboxesorradiobuttonstoselectthem.5.Toaddasignature,opentheMarkupToolbar,clickSignature,andch


