使用Python給視頻添加字幕和語音的操作方法
前言
最近嘗試用python實現(xiàn)給一個視頻添加字幕和語音,查了很多博客后有了一個拼拼湊湊的方法:
- 使用"pyttsx3"來實現(xiàn)“文字到音頻”的轉(zhuǎn)換;
- 使用"pydub"來對得到的音頻進行加工和處理;
- 使用"moviepy"來合成字幕和語音文件。
(注:本篇僅作為個人小白的學習記錄)
一、"pyttsx3"實現(xiàn)“文字到音頻”的轉(zhuǎn)換
pyttsx3是一個很方便的實現(xiàn)從“文字”到“語音”的庫,安裝和使用都很簡單,windows下安裝只需要:
pip install pyttsx3
如果要簡單實現(xiàn)“文字段”的語音播放也很簡單:
import pyttsx3 # 語音模塊初始化 engine = pyttsx3.init() # 設(shè)置要播報的字符串 text = "哈哈哈哈哈哈" engine.say(text) # 等待運行 engine.runAndWait()
還可以在這基礎(chǔ)上將音頻文件保存下來:
outFile = "output.aiff" engine.save_to_file(text, outFile) # 注意下面這句不能少,否則無法正常生成音頻文件 engine.runAndWait()
這里需要注意的一點是,使用pyttsx3能夠?qū)⑽淖洲D(zhuǎn)為音頻,但是其編碼格式特殊,保存下來的文件也是"aiff"格式的音頻文件,所以如果要使用"MP3"格式則需要pydub中的AudioSegment模塊來對其進行更改:
AudioSegment.from_file(outFile).export("Python.mp3", format="mp3")
當然,我也嘗試了強行利用“save_to_file”將文件保存為“MP3”格式,雖然能夠正常播放,但是這個文件是存在問題的(比如后面使用pydub進行處理的時候會因為無法讀入而報錯)
參考博客:https://blog.csdn.net/qq_19394437/article/details/97567298?spm=1001.2014.3001.5506
二、"pydub"處理音頻
1.安裝
pip install pydub
安裝完pydub之后還需要安裝ffmpeg,可以選擇去github下載安裝包,我這里給出網(wǎng)盤分享(某位老哥分享了網(wǎng)盤鏈接,我找不到原文鏈接了抱歉)
鏈接: https://pan.baidu.com/s/1dsE8p9YL-ji48Mg0vTfaMA
提取碼: irxi
解壓后在bin文件夾下有以下三個文件:

復(fù)制bin文件路徑,添加到環(huán)境變量中,然后在cmd窗口運行如下命令:
ffmpeg -version
若正常輸出則代表安裝完了

(當然這里安裝完了,在后面實際使用的時候還可能會出問題)
2.測試
from pydub import AudioSegment
# 讀入MP3音頻文件
audio = AudioSegment.from_mp3('Python.mp3')
# 簡單加一段空白(靜音)片段
X = 2000 #ms
silent = AudioSegment.silent(duration=X)
new_audio = silent + audio
# 保存文件
new_audio.export("new_Python.mp3", format="mp3")
代碼運行到這里一般都會報錯,類似于"RuntimeWarning: Couldn’t find ffmpeg or avconv - defaulting to ffmpeg, but may not work warn(“Couldn’t find ffmpeg or avconv - defaulting to ffmpeg, but may not work”, RuntimeWarning)”,或者是"RuntimeWarning: Couldn’t find ffprobe or …"
我也不知道具體為什么,可能是因為環(huán)境路徑的問題?
直接給出解決辦法:
報錯應(yīng)該會給一個"pydub"中的一個叫“utils.py”文件的路徑, 第一步:找到該文件 第二步:找到一個叫"which(program)"的函數(shù) 第三步:添加前面下載的"ffmpeg"的“bin”文件路徑 第四步:重啟電腦
補充(第三步實例):

重啟后應(yīng)該能夠正常運行了。
三、“moviepy”合成字幕和音頻
1.安裝
pip install moviepy # 實際上安裝moviepy的時候會自動安裝下面兩個庫 pip install imageio pip install imageio-ffmpeg
另外需要單獨安裝ImageMagick軟件并添加到環(huán)境變量中
2.測試
from moviepy.editor import *
def videocaption(src_mp4, dst_mp4, dottemp):
# input:
# src_mp4: the path of wait-to-dispose video
# dst_mp4: the path of after-dispose video
# dottemp--字幕列表['text1','text2','text3',...]
# 加載視頻
video = VideoFileClip(src_mp4)
# 逐句添加字幕
time = [2,2,2,...] # 字幕持續(xù)時間,自行設(shè)置
start = [4,6,8,10,...] # 字幕開始時間,自行設(shè)置
position = ['bottom','center',...] # 顯示位置,自行設(shè)置
txts = []
for si,sentence in enumerate(dottemp):
txt = (TextClip(sentence, fontsize=40,
font='SimHei', size=(1900, 40),
align='center', color='red')
.set_position(position[si])
.set_duration(time[si]).set_start(start[si]))
txts.append(txt)
# 合成字幕
video = CompositeVideoClip([video, *txts])
# 合成音頻
videos = video.set_audio(AudioFileClip('Python.mp3'))
# 保存視頻,注意加上參數(shù)audio_codec='aac',否則音頻無聲音
videos.write_videofile(dst_mp4, audio_codec='aac')
if __name__ == '__main__':
# 輸入輸出路徑
src_mp4 = r'input.mp4'
dst_mp4 = r'output.mp4'
# 字幕列表
dottemp = ['test1','test2','test3']
# 合成視頻
videocaption(src_mp4,dst_mp4,dottemp)
代碼可能會有點問題,自行調(diào)試修改
總結(jié)
到此這篇關(guān)于使用Python給視頻添加字幕和語音的操作方法的文章就介紹到這了,更多相關(guān)Python視頻添加字幕和語音內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python + OpenCV 實現(xiàn)LBP特征提取的示例代碼
這篇文章主要介紹了Python + OpenCV 實現(xiàn)LBP特征提取的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07
在Windows上安裝和配置 Jupyter Lab 作為桌面級應(yīng)用程序教程
這篇文章主要介紹了在Windows上安裝和配置 Jupyter Lab 作為桌面級應(yīng)用程序教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
python實現(xiàn)的MySQL增刪改查操作實例小結(jié)
這篇文章主要介紹了python實現(xiàn)的MySQL增刪改查操作,結(jié)合實例形式總結(jié)分析了Python基本的mysql增刪改查及銀行賬號查詢等相關(guān)操作實現(xiàn)技巧,需要的朋友可以參考下2018-12-12
Pytorch中accuracy和loss的計算知識點總結(jié)
在本片文章里小編給大家整理的是關(guān)于Pytorch中accuracy和loss的計算相關(guān)知識點內(nèi)容,有需要的朋友們可以學習下。2019-09-09

