使用Python給視頻添加字幕和語音的操作方法
前言
最近嘗試用python實(shí)現(xiàn)給一個(gè)視頻添加字幕和語音,查了很多博客后有了一個(gè)拼拼湊湊的方法:
- 使用"pyttsx3"來實(shí)現(xiàn)“文字到音頻”的轉(zhuǎn)換;
- 使用"pydub"來對得到的音頻進(jìn)行加工和處理;
- 使用"moviepy"來合成字幕和語音文件。
(注:本篇僅作為個(gè)人小白的學(xué)習(xí)記錄)
一、"pyttsx3"實(shí)現(xiàn)“文字到音頻”的轉(zhuǎn)換
pyttsx3是一個(gè)很方便的實(shí)現(xiàn)從“文字”到“語音”的庫,安裝和使用都很簡單,windows下安裝只需要:
pip install pyttsx3
如果要簡單實(shí)現(xiàn)“文字段”的語音播放也很簡單:
import pyttsx3 # 語音模塊初始化 engine = pyttsx3.init() # 設(shè)置要播報(bào)的字符串 text = "哈哈哈哈哈哈" engine.say(text) # 等待運(yùn)行 engine.runAndWait()
還可以在這基礎(chǔ)上將音頻文件保存下來:
outFile = "output.aiff" engine.save_to_file(text, outFile) # 注意下面這句不能少,否則無法正常生成音頻文件 engine.runAndWait()
這里需要注意的一點(diǎn)是,使用pyttsx3能夠?qū)⑽淖洲D(zhuǎn)為音頻,但是其編碼格式特殊,保存下來的文件也是"aiff"格式的音頻文件,所以如果要使用"MP3"格式則需要pydub中的AudioSegment模塊來對其進(jìn)行更改:
AudioSegment.from_file(outFile).export("Python.mp3", format="mp3")
當(dāng)然,我也嘗試了強(qiáng)行利用“save_to_file”將文件保存為“MP3”格式,雖然能夠正常播放,但是這個(gè)文件是存在問題的(比如后面使用pydub進(jìn)行處理的時(shí)候會因?yàn)闊o法讀入而報(bào)錯(cuò))
參考博客: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文件夾下有以下三個(gè)文件:

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

(當(dāng)然這里安裝完了,在后面實(shí)際使用的時(shí)候還可能會出問題)
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")
代碼運(yùn)行到這里一般都會報(bào)錯(cuò),類似于"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 …"
我也不知道具體為什么,可能是因?yàn)榄h(huán)境路徑的問題?
直接給出解決辦法:
報(bào)錯(cuò)應(yīng)該會給一個(gè)"pydub"中的一個(gè)叫“utils.py”文件的路徑, 第一步:找到該文件 第二步:找到一個(gè)叫"which(program)"的函數(shù) 第三步:添加前面下載的"ffmpeg"的“bin”文件路徑 第四步:重啟電腦
補(bǔ)充(第三步實(shí)例):

重啟后應(yīng)該能夠正常運(yùn)行了。
三、“moviepy”合成字幕和音頻
1.安裝
pip install moviepy # 實(shí)際上安裝moviepy的時(shí)候會自動安裝下面兩個(gè)庫 pip install imageio pip install imageio-ffmpeg
另外需要單獨(dú)安裝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í)間,自行設(shè)置
start = [4,6,8,10,...] # 字幕開始時(shí)間,自行設(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ǎn)問題,自行調(diào)試修改
總結(jié)
到此這篇關(guān)于使用Python給視頻添加字幕和語音的操作方法的文章就介紹到這了,更多相關(guān)Python視頻添加字幕和語音內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python基于TCP實(shí)現(xiàn)的文件下載器功能案例
這篇文章主要介紹了python基于TCP實(shí)現(xiàn)的文件下載器功能,結(jié)合具體實(shí)例形式分析了Python使用socket模塊實(shí)現(xiàn)的tcp協(xié)議下載功能客戶端與服務(wù)器端相關(guān)操作技巧,需要的朋友可以參考下2019-12-12
玩轉(zhuǎn)Python發(fā)短信的實(shí)現(xiàn)
用Python實(shí)現(xiàn)發(fā)短信功能,當(dāng)監(jiān)控到問題出現(xiàn)時(shí),短信報(bào)警,使問題能得到及時(shí)的處理。當(dāng)然,我相信,用Python發(fā)短信應(yīng)用場景不止此一處,下面我們開始Python發(fā)短信的實(shí)現(xiàn),感興趣的朋友參考下吧2022-01-01
Pycharm運(yùn)行加載文本出現(xiàn)錯(cuò)誤的解決方法
今天小編就為大家分享一篇Pycharm運(yùn)行加載文本出現(xiàn)錯(cuò)誤的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
FFT快速傅里葉變換的python實(shí)現(xiàn)過程解析
這篇文章主要介紹了FFT快速傅里葉變換的python實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
python?Socket無限發(fā)送接收數(shù)據(jù)方式
這篇文章主要介紹了python?Socket無限發(fā)送接收數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06

