国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【whisper】在python中調(diào)用whisper提取字幕或翻譯字幕到文本

這篇具有很好參考價(jià)值的文章主要介紹了【whisper】在python中調(diào)用whisper提取字幕或翻譯字幕到文本。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

最近在做視頻處理相關(guān)的業(yè)務(wù)。其中有需要將視頻提取字幕的需求,在我們實(shí)現(xiàn)過程中分為兩步:先將音頻分離,然后就用到了whisper來進(jìn)行語音識(shí)別或者翻譯。本文將詳細(xì)介紹一下whisper的基本使用以及在python中調(diào)用whisper的兩種方式。

一、whisper簡介

whisper 是一款用于語音識(shí)別的開源庫,支持多種語言,其中包括中文。在本篇文章中,我們將介紹如何安裝 whisper 以及如何使用它來識(shí)別中文字幕。

二、安裝 whisper

首先,我們需要安裝 whisper。根據(jù)操作系統(tǒng),可以按照以下步驟進(jìn)行安裝:

  • 對(duì)于 Windows 用戶,可以從 whisper 的 GitHub 頁面 (https://github.com/qingzhao/whisper) 下載適用的 Python 版本的whisper 安裝包,然后運(yùn)行安裝程序。

  • 對(duì)于 macOS 用戶,可以使用 Homebrew (https://brew.sh/) 進(jìn)行安裝。在終端中運(yùn)行以下命令:brew install python@3.10 whisper

  • 對(duì)于 Linux 用戶,可以使用包管理器 (如 apt 或 yum) 進(jìn)行安裝。例如,對(duì)于使用 Python 3.10 的 Ubuntu 用戶,在終端中運(yùn)行以下命令:sudo apt install python3.10 whisper

當(dāng)然,我們還需要配置環(huán)境,這里我們可以參考這篇文章,這篇文章是使用控制臺(tái)的方式來進(jìn)行字幕翻譯,比較適合非開發(fā)人員。

三、使用Whisper提取視頻字幕并生成文件

3.1 安裝Whisper庫

首先,我們需要安裝Whisper庫??梢允褂靡韵旅钤诿钚兄邪惭b:

pip install whisper

3.2 導(dǎo)入所需的庫和模塊

import whisper
import arrow
import time
from datetime import datetime, timedelta
import subprocess
import re
import datetime

參考 python生成requirements.txt的兩種方法
生成失敗參考 這里
對(duì)應(yīng)版本生成的requirements.txt信息

arrow==1.3.0
asposestorage==1.0.2
numpy==1.25.0
openai_whisper==20230918

3.3 提取字幕并生成文件

下面是一個(gè)函數(shù),用于從目標(biāo)視頻中提取字幕并生成到指定文件:

1.在python中直接調(diào)庫的方式

def extract_subtitles(video_file, output_file, actual_start_time=None):
    # 加載whisper模型
    model = whisper.load_model("medium")  # 根據(jù)需要選擇合適的模型
    subtitles = []
    # 提取字幕
    result = model.transcribe(video_file)
    start_time = arrow.get(actual_start_time, 'HH:mm:ss.SSS') if actual_start_time is not None else arrow.get(0)

    for segment in result["segments"]:
        # 計(jì)算開始時(shí)間和結(jié)束時(shí)間
        start = format_time(start_time.shift(seconds=segment["start"]))
        end = format_time(start_time.shift(seconds=segment["end"]))
        # 構(gòu)建字幕文本
        subtitle_text = f"【{start} -> {end}】: {segment['text']}"
        print(subtitle_text)
        subtitles.append(subtitle_text)
    # 將字幕文本寫入到指定文件中
    with open(output_file, "w", encoding="utf-8") as f:
        for subtitle in subtitles:
            f.write(subtitle + "\n")

2.在python中調(diào)用控制臺(tái)命令

"""
從目標(biāo)視頻中提取字幕并生成到指定文件
參數(shù):

video_file (str): 目標(biāo)視頻文件的路徑
output_file (str): 輸出文件的路徑
actual_start_time (str): 音頻的實(shí)際開始時(shí)間,格式為'時(shí):分:秒.毫秒'(可選)
target_lang (str): 目標(biāo)語言代碼,例如'en'表示英語,'zh-CN'表示簡體中文等(可選)
"""


def extract_subtitles_translate(video_file, output_file, actual_start_time=None, target_lang=None):
	# 指定whisper的路徑
    whisper_path = r"D:\soft46\AncondaSelfInfo\envs\py39\Scripts\whisper"
    subtitles = []
    # 構(gòu)建命令行參數(shù)
    command = [whisper_path, video_file, "--task", "translate", "--language", target_lang, "--model", "large"]

    if actual_start_time is not None:
        command.extend(["--start-time", actual_start_time])

    print(command)

    try:
        # 運(yùn)行命令行命令并獲取字節(jié)流輸出
        output = subprocess.check_output(command)
        output = output.decode('utf-8')  # 解碼為字符串
        subtitle_lines = output.split('\n')  # 按行分割字幕文本

        start_time = time_to_milliseconds(actual_start_time) if actual_start_time is not None else 0
        for line in subtitle_lines:
            line = line.strip()
            if line:  # 空行跳過
                # 解析每行字幕文本
                match = re.match(r'\[(\d{2}:\d{2}.\d{3})\s+-->\s+(\d{2}:\d{2}.\d{3})\]\s+(.+)', line)
                if match:
                	# 這是秒轉(zhuǎn)時(shí)間
                    # start = seconds_to_time(start_time + time_to_seconds(match.group(1)))
                    # end = seconds_to_time(start_time + time_to_seconds(match.group(2)))
                    start = start_time + time_to_milliseconds(match.group(1))
                    end = start_time + time_to_milliseconds(match.group(2))
                    text = match.group(3)
                    # 構(gòu)建字幕文本 自定義輸出格式
                    subtitle_text = f"【{start} -> {end}】: {text}"
                    print(subtitle_text)
                    subtitles.append(subtitle_text)
        # 將字幕文本寫入指定文件
        with open(output_file, "w", encoding="utf-8") as f:
            for subtitle in subtitles:
                f.write(subtitle + "\n")

    except subprocess.CalledProcessError as e:
        print(f"命令執(zhí)行失敗: {e}")

3.4 輔助函數(shù)

在上述代碼中,還使用了一些輔助函數(shù),用于處理時(shí)間格式的轉(zhuǎn)換和格式化:

def time_to_milliseconds(time_str):
    h, m, s = time_str.split(":")
    seconds = int(h) * 3600 + int(m) * 60 + float(s)
    return int(seconds * 1000)

def format_time(time):
    return time.format('HH:mm:ss.SSS')

def format_time_dot(time):
    return str(timedelta(seconds=time.total_seconds())).replace(".", ",")[:-3]
    
# 封裝一個(gè)計(jì)算方法運(yùn)行時(shí)間的函數(shù)
def time_it(func, *args, **kwargs):
    start_time = time.time()
    print("開始時(shí)間:", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(start_time)))

    result = func(*args, **kwargs)

    end_time = time.time()
    total_time = end_time - start_time

    minutes = total_time // 60
    seconds = total_time % 60

    print("結(jié)束時(shí)間:", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(end_time)))
    print("總共執(zhí)行時(shí)間: {} 分 {} 秒".format(minutes, seconds))

    return result

3.5 調(diào)用函數(shù)提取字幕

可以使用以下代碼調(diào)用上述函數(shù),并提取字幕到指定的輸出文件中:

if __name__ == '__main__':
    video_file = "C:/path/to/video.mp4"  # 替換為目標(biāo)視頻文件的路徑
    output_file = "C:/path/to/output.txt"  # 替換為輸出txt文件的路徑
    actual_start_time = '00:00:00.000'  # 替換為實(shí)際的音頻開始時(shí)間,格式為'時(shí):分:秒.毫秒',如果未提供則默認(rèn)為00:00:00.000時(shí)刻
	# 直接在main方法中調(diào)用
    # extract_subtitles(video_file, output_file, actual_start_time)
    time_it(extract_subtitles_translate, video_file, output_file, None, 'en')

注意替換video_fileoutput_file為實(shí)際的視頻文件路徑和輸出文件路徑。如果有實(shí)際的音頻開始時(shí)間,可以替換actual_start_time參數(shù)。

在上面的代碼中,我們首先導(dǎo)入 whisper 庫,然后定義一個(gè)名為 recognize_chinese_subtitle 的函數(shù),該函數(shù)接受一個(gè)音頻文件路徑作為輸入,并使用 whisper 客戶端進(jìn)行語音識(shí)別。識(shí)別結(jié)果保存在 result 字典中,其中 text 字段包含了識(shí)別出的字幕文本。

if __name__ == "__main__" 塊中,我們調(diào)用 recognize_chinese_subtitle 函數(shù),傳入一個(gè)音頻文件路徑,然后打印識(shí)別出的字幕。

3.6 模型的選擇,參考如下

_MODELS = {
    "tiny.en": "https://openaipublic.azureedge.net/main/whisper/models/d3dd57d32accea0b295c96e26691aa14d8822fac7d9d27d5dc00b4ca2826dd03/tiny.en.pt",
    "tiny": "https://openaipublic.azureedge.net/main/whisper/models/65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9/tiny.pt",
    "base.en": "https://openaipublic.azureedge.net/main/whisper/models/25a8566e1d0c1e2231d1c762132cd20e0f96a85d16145c3a00adf5d1ac670ead/base.en.pt",
    "base": "https://openaipublic.azureedge.net/main/whisper/models/ed3a0b6b1c0edf879ad9b11b1af5a0e6ab5db9205f891f668f8b0e6c6326e34e/base.pt",
    "small.en": "https://openaipublic.azureedge.net/main/whisper/models/f953ad0fd29cacd07d5a9eda5624af0f6bcf2258be67c92b79389873d91e0872/small.en.pt",
    "small": "https://openaipublic.azureedge.net/main/whisper/models/9ecf779972d90ba49c06d968637d720dd632c55bbf19d441fb42bf17a411e794/small.pt",
    "medium.en": "https://openaipublic.azureedge.net/main/whisper/models/d7440d1dc186f76616474e0ff0b3b6b879abc9d1a4926b7adfa41db2d497ab4f/medium.en.pt",
    "medium": "https://openaipublic.azureedge.net/main/whisper/models/345ae4da62f9b3d59415adc60127b97c714f32e89e936602e85993674d08dcb1/medium.pt",
    "large-v1": "https://openaipublic.azureedge.net/main/whisper/models/e4b87e7e0bf463eb8e6956e646f1e277e901512310def2c24bf0e11bd3c28e9a/large-v1.pt",
    "large-v2": "https://openaipublic.azureedge.net/main/whisper/models/81f7c96c852ee8fc832187b0132e569d6c3065a3252ed18e56effd0b6a73e524/large-v2.pt",
    "large": "https://openaipublic.azureedge.net/main/whisper/models/81f7c96c852ee8fc832187b0132e569d6c3065a3252ed18e56effd0b6a73e524/large-v2.pt",
}

# 1.
# tiny.en / tiny:
# - 鏈接:https: // openaipublic.azureedge.net / main / whisper / models / d3dd57d32accea0b295c96e26691aa14d8822fac7d9d27d5dc00b4ca2826dd03 / tiny.en.pt
# - 鏈接:https: // openaipublic.azureedge.net / main / whisper / models / 65147644
# a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9 / tiny.pt
# - 優(yōu)點(diǎn):模型體積較小,適合在資源受限的環(huán)境中使用,推理速度較快。
# - 缺點(diǎn):由于模型較小,可能在處理復(fù)雜或長文本時(shí)表現(xiàn)不如其他大型模型。           -------------錯(cuò)誤較多
#
# 2.
# base.en / base:
# - 鏈接:https: // openaipublic.azureedge.net / main / whisper / models / 25
# a8566e1d0c1e2231d1c762132cd20e0f96a85d16145c3a00adf5d1ac670ead / base.en.pt
# - 鏈接:https: // openaipublic.azureedge.net / main / whisper / models / ed3a0b6b1c0edf879ad9b11b1af5a0e6ab5db9205f891f668f8b0e6c6326e34e / base.pt
# - 優(yōu)點(diǎn):具有更大的模型容量,可以處理更復(fù)雜的對(duì)話和文本任務(wù)。
# - 缺點(diǎn):相對(duì)于較小的模型,推理速度可能會(huì)稍慢。
#
# 3.
# small.en / small:
# - 鏈接:https: // openaipublic.azureedge.net / main / whisper / models / f953ad0fd29cacd07d5a9eda5624af0f6bcf2258be67c92b79389873d91e0872 / small.en.pt
# - 鏈接:https: // openaipublic.azureedge.net / main / whisper / models / 9
# ecf779972d90ba49c06d968637d720dd632c55bbf19d441fb42bf17a411e794 / small.pt
# - 優(yōu)點(diǎn):模型規(guī)模適中,具有一定的表現(xiàn)能力和推理速度。
# - 缺點(diǎn):在處理更復(fù)雜的對(duì)話和文本任務(wù)時(shí),可能不如較大的模型表現(xiàn)出色。
#
# 4.
# medium.en / medium:
# - 鏈接:https: // openaipublic.azureedge.net / main / whisper / models / d7440d1dc186f76616474e0ff0b3b6b879abc9d1a4926b7adfa41db2d497ab4f / medium.en.pt
# - 鏈接:https: // openaipublic.azureedge.net / main / whisper / models / 345
# ae4da62f9b3d59415adc60127b97c714f32e89e936602e85993674d08dcb1 / medium.pt
# - 優(yōu)點(diǎn):更大的模型容量,可以處理更復(fù)雜的對(duì)話和文本任務(wù)。
# - 缺點(diǎn):相對(duì)于較小的模型,推理速度可能會(huì)較慢。                          ---斷句很長  【00:00:52.000 -> 00:01:03.000】: 嗯,有一個(gè)那個(gè)小箱子,能看到嗎?上面有那個(gè)白色的泡沫,那個(gè)白色塑料紙一樣蓋著,把那個(gè)白色那個(gè)塑料紙拿起來,下面就是。
#
# 5.
# large - v1 / large - v2 / large:
# - 鏈接:https: // openaipublic.azureedge.net / main / whisper / models / e4b87e7e0bf463eb8e6956e646f1e277e901512310def2c24bf0e11bd3c28e9a / large - v1.pt
# - 鏈接:https: // openaipublic.azureedge.net / main / whisper / models / 81
# f7c96c852ee8fc832187b0132e569d6c3065a3252ed18e56effd0b6a73e524 / large - v2.pt
# - 鏈接:https: // openaipublic.azureedge.net / main / whisper / models / 81
# f7c96c852ee8fc832187b0132e569d6c3065a3252ed18e56effd0b6a73e524 / large - v2.pt
# - 優(yōu)點(diǎn):最大的模型容量,具有最強(qiáng)大的表現(xiàn)能力,可以處理復(fù)雜的對(duì)話和文本任務(wù)。
# - 缺點(diǎn):相對(duì)于其他較小的模型,推理速度較慢,占用更多的內(nèi)存。


# whisper C:/Users/Lenovo/Desktop/whisper/luyin.aac --language Chinese --task translate

四、結(jié)論

通過以上步驟,已經(jīng)成功安裝了 whisper 并實(shí)現(xiàn)了識(shí)別中文字幕的功能。在實(shí)際應(yīng)用中,可能需要根據(jù)實(shí)際情況對(duì)代碼進(jìn)行一些調(diào)整,例如處理音頻文件路徑、識(shí)別結(jié)果等。希望這篇文章對(duì)你有所幫助!文章來源地址http://www.zghlxwxcb.cn/news/detail-753988.html

到了這里,關(guān)于【whisper】在python中調(diào)用whisper提取字幕或翻譯字幕到文本的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【開源工具】使用Whisper提取視頻、語音的字幕

    【開源工具】使用Whisper提取視頻、語音的字幕

    運(yùn)行 WhisperDesktop.exe , 啟動(dòng)后加載模型“l(fā)oad model,please wait…”,等待其將模型加載到內(nèi)存。 2.1 下載模型 剛開始是沒有模型的,需要到Hugging Face 2 的倉庫里面下載模型并配置相關(guān)路徑 2.1.1 進(jìn)入Hugging Face 2 的倉庫 點(diǎn)擊 ggerganov/whisper.cpp 進(jìn)入Hugging Face倉庫 2.1.2 選擇需要下載的模型

    2024年02月09日
    瀏覽(84)
  • 英文視頻添加中英雙語字幕(基于Whisper語音識(shí)別和Google翻譯)

    英文視頻添加中英雙語字幕(基于Whisper語音識(shí)別和Google翻譯)

    可以參考以下博客的內(nèi)容講顯卡驅(qū)動(dòng),CUDA和cudnn的安裝比較詳細(xì),我建議能用GPU加速就盡量使用,Whisper速度有點(diǎn)慢 如何在你的電腦上完成whisper的簡單部署_Wayne_WX的博客-CSDN博客? Windows使用whisper前需要進(jìn)行的一些環(huán)境配置 https://blog.csdn.net/m0_52156129/article/details/129263703 我的f

    2024年02月09日
    瀏覽(29)
  • github開源推薦,基于whisper的字幕生成和字幕翻譯工具——再也沒有看不懂的片啦

    github開源推薦,基于whisper的字幕生成和字幕翻譯工具——再也沒有看不懂的片啦

    GitHub - qinL-cdy/auto_ai_subtitle github上開源的一款字幕生成和字幕翻譯的整合工具,可以根據(jù)視頻中提取到的音頻來轉(zhuǎn)換成字幕,再根據(jù)需要將字幕進(jìn)行翻譯,基于whisper 1)安裝ffmpeg 安裝ffmpeg的教程比較多,就不詳細(xì)介紹了,Windows上安裝完成后記得添加環(huán)境變量,最后在cmd中輸入

    2024年02月13日
    瀏覽(60)
  • 【開源工具】使用Whisper將提取視頻、語音的字幕

    【開源工具】使用Whisper將提取視頻、語音的字幕

    運(yùn)行 WhisperDesktop.exe , 啟動(dòng)后加載模型“l(fā)oad model,please wait…”,等待其將模型加載到內(nèi)存。 2.1 下載模型 剛開始是沒有模型的,需要到Hugging Face 2 的倉庫里面下載模型并配置相關(guān)路徑 2.1.1 進(jìn)入Hugging Face 2 的倉庫 點(diǎn)擊 ggerganov/whisper.cpp 進(jìn)入Hugging Face倉庫 2.1.2 選擇需要下載的模型

    2024年02月08日
    瀏覽(94)
  • whisper生成字幕python代碼實(shí)現(xiàn)

    whisper生成字幕python代碼實(shí)現(xiàn)

    whisper模型

    2024年02月15日
    瀏覽(22)
  • B站下載助手_Python_whisper_PotPlayer 實(shí)現(xiàn)字幕倍速學(xué)習(xí)

    B站下載助手_Python_whisper_PotPlayer 實(shí)現(xiàn)字幕倍速學(xué)習(xí)

    目的是想倍速學(xué)習(xí),但是倍速學(xué)習(xí)的時(shí)候容易聽不清楚老師在講什么,所以得需要字幕的存在 ,但是有些視頻沒有字幕所以想出來下面這個(gè)方法?。。。?! 因?yàn)閎站上面的視頻有很多是又分集的,批量下載之后需要合并,我在實(shí)驗(yàn)的時(shí)候,使用一般的合并視頻的方法時(shí),所需

    2024年02月09日
    瀏覽(56)
  • Python視頻處理(3)——提取視頻字幕

    目錄 一、安裝tesseract-ocr 1、下載安裝 2、設(shè)置環(huán)境變量: ????3、測(cè)試安裝是否成功 ?二、視頻字幕識(shí)提取

    2023年04月12日
    瀏覽(27)
  • 持續(xù)進(jìn)化,快速轉(zhuǎn)錄,F(xiàn)aster-Whisper對(duì)視頻進(jìn)行雙語字幕轉(zhuǎn)錄實(shí)踐(Python3.10)

    Faster-Whisper是Whisper開源后的第三方進(jìn)化版本,它對(duì)原始的 Whisper 模型結(jié)構(gòu)進(jìn)行了改進(jìn)和優(yōu)化。這包括減少模型的層數(shù)、減少參數(shù)量、簡化模型結(jié)構(gòu)等,從而減少了計(jì)算量和內(nèi)存消耗,提高了推理速度,與此同時(shí),F(xiàn)aster-Whisper也改進(jìn)了推理算法、優(yōu)化計(jì)算過程、減少冗余計(jì)算等

    2024年02月06日
    瀏覽(18)
  • Python - 利用 OCR 技術(shù)提取視頻臺(tái)詞、字幕

    Python - 利用 OCR 技術(shù)提取視頻臺(tái)詞、字幕

    目錄 一.引言 二.視頻處理 1.視頻樣式 2.視頻截取 ◆ 裁切降幀 ◆ 處理效果 3.視頻分段 三.OCR 處理 1.視頻幀處理 2.文本識(shí)別結(jié)果 3.后續(xù)工作與優(yōu)化 ◆ 識(shí)別去重 ◆ 多線程提效 ◆ 片頭片尾優(yōu)化 四.總結(jié) 視頻經(jīng)常會(huì)配套對(duì)應(yīng)的臺(tái)詞或者字幕,通過文本與字幕可以更好地理解視頻

    2024年02月03日
    瀏覽(83)
  • 【python】 油管外掛字幕下載位srt歌詞字幕文本文件

    【python】 油管外掛字幕下載位srt歌詞字幕文本文件

    以上為部分代碼哈! 隱藏的都是正則部分,會(huì)Python的都能自己補(bǔ)全哈!超簡單的

    2024年02月13日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包