Python+OpenAI?Whisper實現視頻生成字幕
安裝正確的 OpenAI Whisper 包:
pip install openai-whisper
這里是一個完整的可工作的代碼示例:
import whisper
import os
from moviepy.editor import VideoFileClip
from datetime import timedelta
import torch
def extract_audio(video_path, audio_path):
"""從視頻中提取音頻"""
try:
video = VideoFileClip(video_path)
video.audio.write_audiofile(audio_path)
video.close()
except Exception as e:
print(f"音頻提取錯誤: {str(e)}")
raise
def generate_srt(segments, output_srt):
"""生成SRT格式字幕文件"""
with open(output_srt, 'w', encoding='utf-8') as f:
for i, segment in enumerate(segments, start=1):
# 轉換時間格式
start = str(timedelta(seconds=int(segment['start']))) + ',000'
end = str(timedelta(seconds=int(segment['end']))) + ',000'
# 寫入SRT格式
f.write(f"{i}\n")
f.write(f"{start} --> {end}\n")
f.write(f"{segment['text'].strip()}\n\n")
def main(video_path, output_srt):
"""主函數"""
try:
# 檢查CUDA是否可用
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"使用設備: {device}")
# 加載模型
print("加載Whisper模型...")
model = whisper.load_model("base", device=device)
# 直接使用視頻文件進行轉錄
print("開始轉錄...")
result = model.transcribe(video_path, language="zh")
# 生成字幕文件
print("生成字幕文件...")
generate_srt(result["segments"], output_srt)
print(f"字幕已生成: {output_srt}")
except Exception as e:
print(f"處理過程中出錯: {str(e)}")
raise
if __name__ == "__main__":
# 設置輸入輸出路徑
video_path = "your_video.mp4" # 替換為你的視頻文件路徑
output_srt = "output.srt" # 輸出的字幕文件路徑
main(video_path, output_srt)
這段代碼是用于加載 OpenAI 的 Whisper 模型的。在語音識別中,Whisper 是 OpenAI 提供的一個開源模型,專門用于語音轉文字(ASR,Automatic Speech Recognition)。
解析代碼:
print("加載Whisper模型...")
model = whisper.load_model("base", device=device)
1. whisper.load_model("base", device=device)
whisper.load_model: 這是調用 Whisper 庫中的 load_model 函數,用來加載一個預訓練的 Whisper 模型。
"base": 這是所選模型的名稱。在 Whisper 中,有多個預訓練模型,它們的大小和性能有所不同。"base" 是其中一個中等規(guī)模的模型(不是最小的,也不是最大的)。Whisper 提供了不同規(guī)模的模型,如:
- "tiny": 最小的模型,速度最快,但準確率相對較低。
- "base": 中等規(guī)模的模型,速度和準確率之間有一個平衡。
- "small": 更大一些,提供更好的準確性,但速度較慢。
- "medium" 和 "large": 這些是最大規(guī)模的模型,準確率非常高,但需要更多計算資源,速度較慢。
選擇 "base" 模型通常是因為它在 速度和準確率 之間有一個良好的平衡。適用于大多數日常應用。
2. device=device
device=device: 這部分代碼指定了模型運行的硬件設備。通常,device 可以是 "cpu"(中央處理器)或 "cuda"(如果有支持 CUDA 的 NVIDIA GPU)。根據你的設備配置,Whisper 會在 CPU 或 GPU 上運行模型。使用 GPU 進行計算可以大大加速模型推理的過程,特別是在較大的模型時。
例如:
- 如果你的計算機有 GPU 并且已經安裝了 CUDA,device="cuda" 會讓 Whisper 使用 GPU 來加載和執(zhí)行模型。
- 如果沒有 GPU 或者沒有配置 CUDA,Whisper 會默認使用 CPU。
為什么使用 "base" 模型?
選擇 "base" 模型的原因通常是以下幾個考慮:
平衡性:"base" 模型相較于 tiny 模型更為準確,但計算資源需求又不如 large 或 medium 模型那么高。它是很多用戶的常見選擇,因為它在準確性和處理速度之間達到了較好的折中。
性能:對大多數普通應用(例如實時語音識別)來說,"base" 模型通常能提供足夠的準確率,同時不會太耗費硬件資源。
硬件要求:比起更大的模型,"base" 模型需要的顯存和計算資源較少,因此適合于那些沒有特別強大硬件的設備。
選擇其他模型:
- 如果你的硬件支持,且對識別準確度要求較高,你可以選擇 "small"、"medium" 或者 "large" 模型,這樣可以獲得更高的識別準確率,但可能會犧牲一定的速度。
- 如果硬件性能有限,或者你需要快速響應,可以選擇 "tiny" 模型,盡管它的識別準確度相對較低。
總結:
這段代碼的作用是加載 Whisper 模型,并指定使用的設備(CPU 或 GPU)。
"base" 模型是中等規(guī)模的模型,通常適用于多數需要平衡準確性和速度的場景。
使用說明:
將 video_path 替換為你的實際視頻文件路徑
確保有足夠的磁盤空間
如果有 NVIDIA GPU,會自動使用 CUDA 加速
可能需要的額外依賴:
pip install torch torchvision torchaudio pip install moviepy
如果想要更詳細的進度顯示,可以添加進度條:
from tqdm import tqdm
def generate_srt_with_progress(segments, output_srt):
"""帶進度顯示的字幕生成"""
with open(output_srt, 'w', encoding='utf-8') as f:
for i, segment in tqdm(enumerate(segments, start=1),
desc="生成字幕",
total=len(segments)):
start = str(timedelta(seconds=int(segment['start']))) + ',000'
end = str(timedelta(seconds=int(segment['end']))) + ',000'
f.write(f"{i}\n")
f.write(f"{start} --> {end}\n")
f.write(f"{segment['text'].strip()}\n\n")
添加錯誤處理和日志:
import logging
import sys
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('subtitle_generation.log'),
logging.StreamHandler(sys.stdout)
]
)
def main(video_path, output_srt):
"""帶有完整錯誤處理和日志的主函數"""
try:
if not os.path.exists(video_path):
raise FileNotFoundError(f"視頻文件不存在: {video_path}")
logging.info(f"開始處理視頻: {video_path}")
# 檢查CUDA
device = "cuda" if torch.cuda.is_available() else "cpu"
logging.info(f"使用設備: {device}")
# 加載模型
logging.info("加載Whisper模型...")
model = whisper.load_model("base", device=device)
# 轉錄
logging.info("開始轉錄...")
result = model.transcribe(video_path, language="zh")
# 生成字幕
logging.info("生成字幕文件...")
generate_srt_with_progress(result["segments"], output_srt)
logging.info(f"字幕生成完成: {output_srt}")
except FileNotFoundError as e:
logging.error(f"文件錯誤: {str(e)}")
raise
except Exception as e:
logging.error(f"處理錯誤: {str(e)}")
raise
如果需要處理長視頻,可以添加分段處理:
def process_long_video(video_path, output_srt, segment_duration=300):
"""分段處理長視頻"""
from moviepy.editor import VideoFileClip
video = VideoFileClip(video_path)
duration = video.duration
segments = []
for start in range(0, int(duration), segment_duration):
end = min(start + segment_duration, duration)
# 提取片段
segment = video.subclip(start, end)
temp_audio = f"temp_{start}_{end}.wav"
segment.audio.write_audiofile(temp_audio)
# 處理片段
result = model.transcribe(temp_audio, language="zh")
segments.extend(result["segments"])
# 清理臨時文件
os.remove(temp_audio)
# 生成完整字幕
generate_srt(segments, output_srt)
video.close()
Whisper 可以實現將英文語音翻譯成中文。Whisper 是一個多語言語音識別模型,支持語音識別和翻譯任務,包括將英語語音翻譯成中文。
如何實現英文語音翻譯成中文:
在使用 Whisper 時,你可以通過以下步驟來實現英文語音的翻譯:
加載模型并進行轉錄
使用 whisper.load_model 加載模型(例如,base 或 small 等),然后使用 transcribe 方法來識別英文語音。為了進行翻譯,你需要設置 task="translate" 參數。
指定翻譯目標語言為中文
設置 language="en" 來告知模型輸入語言是英語,Whisper 會自動將識別到的英文語音翻譯成你指定的目標語言(中文)。
示例代碼:
import whisper
# 加載模型
model = whisper.load_model("base")
# 設置視頻或音頻文件路徑
audio_path = "path_to_audio_or_video"
# 進行語音翻譯,英文語音翻譯成中文
result = model.transcribe(audio_path, language="en", task="translate")
# 打印翻譯結果
print(result["text"])
解釋:
language="en":告訴 Whisper 輸入的語言是英文。
task="translate":啟用翻譯模式,Whisper 會將識別到的英文語音翻譯成中文。
result["text"]:這是翻譯后的中文文本。
注意事項:
翻譯質量:Whisper 的翻譯能力比較強,但它的翻譯質量受限于模型的規(guī)模與訓練數據。因此,翻譯結果可能不是完美的,特別是針對某些復雜的句子或語境。
語音識別和翻譯:Whisper 結合了語音識別與翻譯功能,適合直接從語音中獲得翻譯文本,而不需要分開執(zhí)行語音識別和翻譯步驟。
總結:
Whisper 能夠處理英文語音,并將其翻譯成中文,直接通過設置 task="translate" 來實現。
到此這篇關于Python+OpenAI Whisper實現視頻生成字幕的文章就介紹到這了,更多相關Python視頻生成字幕內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
向量化操作改進數據分析工作流的Pandas?Numpy示例分析
這篇文章主要介紹了向量化操作改進數據分析工作流的Pandas?Numpy示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10

