python把PDF念給你聽
1. 轉語音工具
微信讀書有一個功能,可以將書里的文字轉換為音頻,而且聲音優化的不錯,比傳統的機械朗讀聽起來舒服很多。
記得之前看到過Python有一個工具包,可以將文字轉換為語音,支持英文和中文,而且可以調節語速語調、導出mp3等。
去Github查了下,這個庫叫:pyttsx3
簡單來說,pyttsx3可以文字轉語音,而且是離線工作的,這一點就很實用。
安裝比較容易,直接在命令行用pip安裝:
pip install pyttsx3
1
我準備動手試試,將PDF書籍轉成音頻。
我們任選一本pdf電子書。
2. PDF轉文本
既然是把PDF轉化成語音,肯定是需要先讀取PDF中的文字,再利用pyttsx3轉語音。
Python中操作PDF的工具庫主要是PyPDF2,但發現編碼實在有點繁瑣,我就換了另一個庫pdfplumber,與PyPDF2語法類似,用起來還算流暢。
pdfplumber可以處理PDF包括文本、表格、格式在內的各種信息,小而強大。
# 讀取PDF文檔 pdf = pdfplumber.open("價值.pdf") # 獲取頁數 print("總頁數:",len(pdf.pages)) print("-----------------------------------------") # 讀取第4頁 first_page = pdf.pages[3] print("本頁:",first_page.page_number+1) print("-----------------------------------------") # 導出第4頁文本 text = first_page.extract_text() print(text)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
輸出:
上面的代碼做了幾件事情: 「讀取PDF文檔、讀取頁數、讀取第4頁、輸出第4頁文本」
3. 文本轉語音
接下來開始將第4頁的文本轉化為音頻。
import pyttsx3 # 初始化來獲取語音引擎 engine = pyttsx3.init() # 去掉文本中的換行符 text = text.replace('\n','') # 朗讀文本 engine.say(text) engine.runAndWait()
1
2
3
4
5
6
7
8
9
10
11
上面代碼使用pyttsx3將文本轉化為音頻,然后朗讀出來。我是在jupyter notebook上做實驗的,代碼執行后,電腦會直接朗讀。
也可以將生成的音頻保存為mp3格式。
# 保存音頻到本地,格式為mp3 engine.save_to_file(text, 'test.mp3') engine.runAndWait()
1
2
3
當然你還可以調整聲音的類型、速度、大小。
# 調整人聲類型 voices = engine.getProperty('voices') engine.setProperty('voice', voices[0].id) # 調整語速,范圍一般在0~500之間 rate = engine.getProperty('rate') engine.setProperty('rate', 200) # 調整聲量,范圍在0~1之間 volume = engine.getProperty('volume') engine.setProperty('volume',0.8)
1
2
3
4
5
6
7
8
9
10
11
整體還是比較流暢的,雖然不如微信讀書語音聽著那般舒服,但做做小工具還是不錯的。
4. 文本轉語音
從微信下載下來的語音是 mp3 格式的,想調用百度語音 api,發現不支持 mp3,支持 wav。
準備:
需要安裝 pydub 庫,直接pip install pydub就好了。
還需要安裝 ffmpeg.exe 文件,然后再配置一下就好了,請看:
ffmpeg.exe 的安裝及配置,與常見問題
原理:
讀取 mp3 音頻的波形數據,然后再寫入 wav 文件。
from pydub import AudioSegment import wave # 讀取mp3的波形數據 sound = AudioSegment.from_file("666.mp3", format = 'MP3') # 將讀取的波形數據轉化為wav f = wave.open("777.wav", 'wb') f.setnchannels(1) # 頻道數 f.setsampwidth(2) # 量化位數 f.setframerate(16000) # 取樣頻率 f.setnframes(len(sound._data)) # 取樣點數,波形數據的長度 f.writeframes(sound._data) # 寫入波形數據 f.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
運行效果圖:
原 mp3 只有 2k 左右,轉化后 31.5k,聽著效果跟原音頻沒有差別,保真度很高!
Python 語音通話
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。