英文视频添加中英双语字幕(基于Whisper语音识别和Google翻译)
第一步:安裝配置環(huán)境,這一步重要介紹安裝的環(huán)境依賴,可以看完第二章再來看一遍
(1)Whisper環(huán)境配置
可以參考以下博客的內(nèi)容講顯卡驅(qū)動,CUDA和cudnn的安裝比較詳細(xì),我建議能用GPU加速就盡量使用,Whisper速度有點慢如何在你的電腦上完成whisper的簡單部署_Wayne_WX的博客-CSDN博客?Windows使用whisper前需要進(jìn)行的一些環(huán)境配置https://blog.csdn.net/m0_52156129/article/details/129263703
我的ffmpeg是使用conda安裝的,命令如下(注意:需要安裝到自己創(chuàng)建的conda環(huán)境):
conda install -c conda-forge ffmpeg-python激活創(chuàng)建的conda環(huán)境,這里我的環(huán)境名是whisper
conda activate whisper檢查ffmpeg是否安裝成功?
ffmpeg -version顯示結(jié)果如下表明安裝成功,ffmpeg非常重要,在我們的處理后續(xù)也有應(yīng)用?
?(2)安裝以下依賴
? 可以將文件夾里mp4格式視頻批量轉(zhuǎn)換成mp3,多次測試發(fā)現(xiàn)Whisper處理mp3速度快些,缺啥安裝啥,慢地話可以換個國內(nèi)源
from moviepy.editor import * import os import filetype import argparse(3)Google翻譯環(huán)境依賴
兩種方法,可以使用googletrans
pip install googletrans==4.0.0rc1或者requests
pip install requests第二步:編寫腳本主要有兩步
(1)批量將MP4格式視頻轉(zhuǎn)換成MP3
這里其實可以使用ffmpeg來做,我一開始用的moviety庫,后來發(fā)現(xiàn)ffmpeg也可以
參考了這里,代碼很詳細(xì)寫地很好Python3 批量提取視頻中的音頻_python提取視頻中的音頻_流星蝴蝶沒有劍的博客-CSDN博客Python3 批量提取 視頻中的音頻https://blog.csdn.net/qq_44009311/article/details/124818112
?轉(zhuǎn)換好的Mp3文件便可以進(jìn)行語音識別提取了
(2)使用Whisper進(jìn)行語音轉(zhuǎn)文字并制作srt文件
首先你可以在MP3文件所在的文件夾內(nèi)打開cmd,conda激活環(huán)境,使用
whisper 文件名.mp3也可以生成字幕文件,如果你只是要求英文字幕的話可以到此為止了,Whisper不支持翻譯成中文,只支持轉(zhuǎn)錄源語言或者將源語言翻譯成英文,如果獲取純中文字幕或者中英雙語字幕,你需要繼續(xù)看下去
1.了解Whisper的transcribe和Srt文件的格式
回想openai給出的官方python測試代碼
import whispermodel = whisper.load_model("base") result = model.transcribe("audio.mp3") print(result["text"])result具有眾多屬性,包括識別的文本,以及文本的開始時間start和結(jié)束時間end,其他的對于我們本次任務(wù)沒有幫助故不介紹,那么我們這樣就可以輸出識別的每一句話的開始和結(jié)束時間以及內(nèi)容
import whisper model = whisper.load_model("base") result = model.transcribe("13.mp3") for segment in result["segments"]:print(segment['start'])print(segment['text'])print(segment['end'])?這樣,輸出結(jié)果如上圖所示
另外需要了解srt文件的格式
第一行:編號(從0開始)
第二行:起始時間,比我們常見的時分秒HH:MM:SS又多了一個逗號和三位數(shù)的毫秒單位
往后都是字幕部分,但是字幕到下一條字幕之間一定有空格。
?兩者對比可知,我們可以通過Whisper獲取字幕的文字內(nèi)容以及起始時間,核心時起始時間格式的轉(zhuǎn)換。然后可以使用f.write()的方法逐行寫入srt文件即可
2.轉(zhuǎn)換時間格式
Whisper輸出的時間格式是帶小數(shù)點的,我們可以這樣來想:
第一步:使用字符串分割以小數(shù)點為分界點,小數(shù)點左邊是秒,秒可以參考這里,轉(zhuǎn)換成時分秒的格式
Python時間轉(zhuǎn)換:X秒 --> 時:分:秒_python 時分秒_zhu6201976的博客-CSDN博客Python 秒轉(zhuǎn)時分秒 思路實現(xiàn)https://blog.csdn.net/zhu6201976/article/details/126750272
第二步:小數(shù)點右邊的不足一秒的部分換成三位數(shù)毫秒
第三步:然后二者再進(jìn)行字符串相加即可
3.調(diào)用谷歌翻譯的兩種方法
參考這里即可,使用的時候要科學(xué)上網(wǎng)3種谷歌多語言翻譯接口的調(diào)用方法(Python)_谷歌翻譯接口_DooDoo~的博客-CSDN博客在日常的生活和工作中,我們經(jīng)常會需要使用到翻譯工具。在諸多翻譯工具中,我個人更青睞谷歌翻譯,因此在這里整理通過Python調(diào)用谷歌翻譯接口的3種方式。https://blog.csdn.net/qq_40039731/article/details/126239369
有一個問題,多次嘗試發(fā)現(xiàn),對于長視頻,翻譯字幕需要調(diào)用google翻譯非常多次,服務(wù)器會不穩(wěn)定導(dǎo)致報錯,建議使用ffmpeg或者SolveigMM Video Splitter軟件裁剪,ffmpeg慢些但是方便,個人推薦
進(jìn)入代裁剪視頻文件夾內(nèi)激活whisper環(huán)境,輸入如下命令即可裁剪視頻,-ss對應(yīng)的是起始時間?
有時間的可以看下這個做下最基本的入門:
FFmpeg 最最強大的視頻工具 (轉(zhuǎn)碼/壓縮/剪輯/濾鏡/水印/錄屏/Gif/...)_嗶哩嗶哩_bilibili
有人說可以長視頻轉(zhuǎn)換成mp3使用ffmpeg裁剪,分別得到srt文件再合成一個,但是這樣時間格式比較繁瑣,建議長視頻直接裁剪幾個部分即可
4.寫入文件存儲以及一個批處理思路
批處理文件夾內(nèi)眾多mp3文件可以使用,前提是你的mp3都已經(jīng)不太長,長的mp3可能在谷歌翻譯時報錯,導(dǎo)致循環(huán)無法繼續(xù)執(zhí)行
#自己的Mp3文件所在的文件夾路徑inpath = r'E:\MP3'#讀取所有的mp3格式文件路徑mp3folder = glob.glob(os.path.join(inpath, "*.mp3"))for mp3 in mp3folder:excute('small',mp3)(3)字幕與視頻合成或使用播放器打開外掛srt文件(推薦)
可以使用Potplayer播放器,我都放在了下載鏈接里,安裝即可可以打開srt文件并方便地調(diào)整字幕的顏色、字體大小,位置等,到這里我們的工作就完成啦!
?注:下載內(nèi)容包括
(1)MP4文件批量轉(zhuǎn)換MP3文件代碼
(2)讀入MP3文件獲取SRT文件的代碼(兩個分別對應(yīng)兩種調(diào)用谷歌翻譯的方法)
(3)視頻剪輯SolveigMM Video Splitter軟件和Potplayer播放器
總結(jié)
以上是生活随笔為你收集整理的英文视频添加中英双语字幕(基于Whisper语音识别和Google翻译)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP Class - 图片水印
- 下一篇: 干货 | 数字经济创新创业——数字技术创