当前位置: 首页 > news >正文

Ubuntu环境使用 Whisper 与 ZhipuAI 实现本地批量视频转录与文本标点复原(本地亲测可用)

使用 Whisper 与 ZhipuAI 实现批量视频转录与文本标点添加

在本篇博客中,我们将介绍一个实用的项目,帮助初学者了解如何使用 Whisper 和 ZhipuAI 的 API 来进行视频转录和文本处理。这个项目主要功能是将视频转录成文本,并利用大语言模型为转录文本添加标点符号,整个过程都是自动化完成的。

项目背景–傻瓜式实现完整文件夹内视频一键转录为文本!

随着视频内容的不断增加,手动对视频中的对话进行转录是一项耗时且枯燥的任务。本项目利用了 OpenAI 提供的 Whisper 模型,它是一个强大的自动语音识别(ASR)工具,可以自动将音频转录为文本。随后,为了使转录后的文本更加流畅,我们利用了智谱 AI 的 GLM4 模型来为文本添加标点符号。

这个工具能够批量处理视频文件,适合那些需要自动生成视频字幕或对视频内容进行文本分析的开发者。尤其对于 IT 新手来说,本项目可以帮助大家理解多线程处理、GPU 使用、API 调用等内容。

项目依赖与准备

在开始之前,你需要确保以下依赖已经安装:

  • Python 3.8 或更高版本
  • CUDA(如果你希望使用 GPU 加速)
  • Whisper
  • ffmpeg
  • tqdm(用于进度条显示)
  • psutil(用于内存监控)
  • zhipuai(用于调用智谱 AI 的 API)

1、安装依赖

你可以通过以下命令来安装必要的 Python 库:

pip install torch whisper ffmpeg-python tqdm psutil zhipuai

此外,请确保你已经安装了 ffmpeg。
可参考我的安装ffmpeg教程

2、免费获取并使用智谱API

前往https://www.bigmodel.cn/ 注册,获取免费API。

3、如何运行这个项目

  1. 克隆或下载项目代码,确保所有依赖已经安装。
  2. 修改代码中的 api_key 为你自己的智谱 AI API 密钥。
client = ZhipuAI(api_key="your_api_key")
  1. 将你要处理的视频文件放入指定文件夹中,并修改对应路径。
# 设定视频文件夹路径
video_folder_path = Path("/hy-tmp")
  1. 运行脚本即可开始批量处理视频。
python transcribe_videos.py

项目代码解析–学习分享

1. 导入依赖并设置设备

在项目中,我们首先导入了所有需要的 Python 库。通过 torch.cuda.device_count() 来判断是否有可用的 GPU,从而决定是使用 GPU 还是 CPU 来进行计算。

import torch
available_gpus = torch.cuda.device_count()
use_gpu = available_gpus > 0
device = "cuda" if use_gpu else "cpu"

2. 设置线程和初始化任务队列

项目中使用了 threadingThreadPoolExecutor 来实现多线程处理。具体来说,为每个 GPU 分配了 2 个线程,如果是 CPU,则只使用一个线程。任务队列用于存放需要处理的视频文件。

from queue import Queue
import threadingthreads_per_gpu = 2 if use_gpu else 1
num_threads = max(available_gpus * threads_per_gpu, 1)
task_queue = Queue()
completion_task_queue = Queue()

3. 初始化 Whisper 模型并转录视频

使用 Whisper 模型将视频的音频内容提取并转录为文本。如果音频文件已经存在,则跳过提取步骤,从而节省时间。

import whisper
import subprocessmodel = whisper.load_model("large", device=device)
def transcribe_video(video_path):audio_path = video_path.with_suffix(".mp3")if not audio_path.exists():subprocess.run(["ffmpeg", "-i", str(video_path), "-ar", "16000", "-ac", "1", "-q:a", "2", str(audio_path)], check=True)result = model.transcribe(str(audio_path), language="zh", task="transcribe")return result["text"]

4. 使用 GLM4 添加标点符号

对于标点符号的添加,项目使用了智谱 AI 的 GLM4 模型。由于大段文本可能超过 API 限制,因此将文本分割成多个小段来处理,然后合并所有的标点结果。

from zhipuai import ZhipuAI
client = ZhipuAI(api_key="your_api_key")def add_punctuation_glm4(text, max_chunk_size=2048):chunks = [text[i:i + max_chunk_size] for i in range(0, len(text), max_chunk_size)]punctuated_text = ""for chunk in chunks:response = client.chat.completions.create(model="glm-4-plus",messages=[{"role": "user", "content": chunk}],stream=True,)for res in response:punctuated_text += res.choices[0].delta.contentreturn punctuated_text

5. 批量处理视频文件

通过递归的方式遍历文件夹中的视频文件,将每个视频文件放入任务队列,并使用多线程进行处理。这样可以显著提高处理速度。

from concurrent.futures import ThreadPoolExecutordef transcribe_folder(folder_path):folder = Path(folder_path)video_files = list(folder.rglob("*.mp4"))for video_file in video_files:task_queue.put(video_file)with ThreadPoolExecutor(max_workers=num_threads) as executor:for _ in range(num_threads):executor.submit(worker_thread)

注意事项

  • GPU 使用:如果你有可用的 GPU,Whisper 会自动利用 GPU 来加速转录过程。如果没有 GPU,则使用 CPU,但处理速度会慢很多。
  • 内存检查:项目中加入了内存检查功能,确保系统不会因为内存不足而崩溃。
  • API 调用限制:智谱 AI 的 API 可能会有调用次数或并发限制,因此在使用时要注意合理分配。
  • 多线程:目前建议指定单线程运行,多线程不稳定(不修改项目代码默认项目线程为1)。

总结

通过本项目,你可以了解到如何利用开源的自动语音识别工具(如 Whisper)和大语言模型(如 GLM4)来实现批量视频转录和文本处理。这些工具和技术的结合不仅简化了转录和标点添加的过程,还展示了多线程处理在实际项目中的应用。

希望这个项目能帮助你更好地理解视频处理自动化的相关技术,欢迎大家留言讨论或提出改进建议!

相关文章:

Ubuntu环境使用 Whisper 与 ZhipuAI 实现本地批量视频转录与文本标点复原(本地亲测可用)

使用 Whisper 与 ZhipuAI 实现批量视频转录与文本标点添加 在本篇博客中,我们将介绍一个实用的项目,帮助初学者了解如何使用 Whisper 和 ZhipuAI 的 API 来进行视频转录和文本处理。这个项目主要功能是将视频转录成文本,并利用大语言模型为转…...

SPI机制

一、SPI简介 SPI(Service Provider Interface)机制是一种服务发现机制,广泛用于Java生态中。它允许框架或库通过接口解耦具体实现,用户可以在运行时动态地提供接口的实现,而不是在编译时确定。这种机制在很多场景下非…...

生信分析流程:从数据准备到结果解释的完整指南

介绍 生物信息学(生信)分析是一个复杂的过程,涉及从数据准备到结果解释的多个步骤。随着高通量测序技术的发展和生物数据的迅猛增长,了解和掌握生信分析的标准流程变得尤为重要。这不仅有助于提高分析的准确性,还能优…...

golang语法

参考链接&#xff1a;https://www.runoob.com/go/ 创建变量 // 3种方法 var a int a : 10 // 类型推断 a : make() // 复合类型循环 // 3种循环 for i : 0; i < 10; i {// 循环体} // 传统for循环 for index, num : range nums {// 循环体} // nums是可迭代的复合类型…...

【fisco学习记录2】多群组搭建

说明 文档参考&#xff1a; 多群组部署 — FISCO BCOS 2.0 v2.11.0 文档 (fisco-bcos-documentation.readthedocs.io) 多群组搭建之前&#xff0c;先暂停之前的单群组&#xff0c;并删除&#xff1a; cd fisco bash nodes/127.0.0.1/stop_all.sh rm -rf nodes/ 实现图&…...

深度解读:路由交换、负载均衡与防火墙的网络交响

一、路由交换&#xff1a;网络流动的“大动脉” 1. 路由&#xff1a;决定命运的“路径规划师” 路由技术如同现代交通网络中的导航系统&#xff0c;决定了数据从起点到终点的最佳路径。路由器基于网络层IP地址&#xff0c;对每个数据包进行精确的路径选择&#xff0c;并确保其…...

linux线程 | 线程的控制(二)

前言&#xff1a; 本节内容是线程的控制部分的第二个小节。 主要是列出我们的线程控制部分的几个细节性问题以及我们的线程分离。这些都是需要大量的代码去进行实验的。所以&#xff0c; 准备好接受新知识的友友们请耐心观看。 现在开始我们的学习吧。 ps:本节内容适合了解线程…...

npm install报错一堆sass gyp ERR!

执行npm install &#xff0c;出现一堆gyp含有sass错误的情况下。 解决办法&#xff1a; 首页可能是node版本问题&#xff0c;太高或者太低&#xff0c;也会导致npm install安装错误&#xff08;不会自动生成node_modules文件&#xff09;&#xff0c;本次试验&#xff0c;刚开…...

微知-BlueField DPU在lspci中显示Flash Recovery是什么意思?

效果&#xff1a; lspci |grep BlueField10:00.0 Memory controller: Mellanox Technologies MT42822 Family [BlueField-2 SoC Flash Recovery] (rev 01)*原因&#xff1a; 表示此时flash是empty空的&#xff0c;或者在flash中的FW是无法工作的。比如烧录错误。 这里指的一提…...

【前端知识点】前端笔记

css 引入css文件的文件路径 <!-- 引入外部 CSS 文件 --> <!-- 当前文件所在文件夹目录 --> <link rel"stylesheet" href"./"> <!-- 当前文件所在父文件夹目录 --> <link rel"stylesheet" href"../">j…...

Sping Cache 使用详解

缓存是提升应用性能的常用手段。它通过将耗时的操作结果存储起来&#xff0c;下次请求可以直接从缓存中获取&#xff0c;从而避免重复计算或查询数据库&#xff0c;显著减少响应时间和服务器负载。Spring 框架提供了强大的缓存抽象 Spring Cache&#xff0c;它简化了缓存的使用…...

动手学深度学习60 机器翻译与数据集

1. 机器翻译与数据集 import os import torch from d2l import torch as d2l#save d2l.DATA_HUB[fra-eng] (d2l.DATA_URL fra-eng.zip,94646ad1522d915e7b0f9296181140edcf86a4f5)#save def read_data_nmt():"""载入“英语&#xff0d;法语”数据集"&qu…...

Python网络爬虫技术

Python网络爬虫技术详解 引言 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;又称网络蜘蛛&#xff08;Web Spider&#xff09;或网络机器人&#xff08;Web Robot&#xff09;&#xff0c;是一种按照一定规则自动抓取互联网信息的程序或脚本。它们通过遍历网页链…...

黑马程序员-redis项目实践笔记1

目录 一、 基于Session实现登录 发送验证码 验证用户输入验证码 校验登录状态 Redis代替Session登录 发送验证码修改 验证用户输入验证码 登录拦截器的优化 二、 商铺查询缓存 缓存更新策略 数据库和缓存不一致解决方案 缓存更新策略的最佳实践方案 实现商铺缓…...

ES-入门聚合查询

url 请求地址 http://192.168.1.108:9200/shopping/_search {"aggs": { //聚合操作"price_group":{ //名称,随意起名"terms":{ //分组"field": "price" //分组字段}}} } 查询出来的结果是 查询结果中价格的平均值 {&q…...

七维大脑: 探索人类认知的未来之路

七维大脑&#xff1a; 探索人类认知的未来之路 随着科技的不断发展&#xff0c;人们对于大脑的认知也在不断扩展。近年来&#xff0c;科学家们提出了一个名为“七维大脑”的概念&#xff0c;试图通过七个维度来理解人类的认知过程。这个概念的提出&#xff0c;让人们开始思考&…...

spring |Spring Security安全框架 —— 认证流程实现

文章目录 开头简介环境搭建入门使用1、认证1、实体类2、Controller层3、Service层3.1、接口3.2、实现类3.3、实现类&#xff1a;UserDetailsServiceImpl 4、Mapper层3、自定义token认证filter 注意事项小结 开头 Spring Security 官方网址&#xff1a;Spring Security官网 开…...

Django+vue自动化测试平台---正式开源!!!

自动化测试&#xff1a;接口、Web UI 与 App 的全面探索 在此郑重声明&#xff1a;本文内容未经本人同意&#xff0c;不得随意转载。若有违者&#xff0c;必将追究其法律责任。同时&#xff0c;禁止对相关源码进行任何形式的售卖行为&#xff0c;本内容仅供学习使用。 Git 地…...

电子电气架构 --- 智能网联汽车未来是什么样子?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...

docker安装elasticsearch(es)+kibana

目录 docker安装elasticsearch 一.准备工作 1.打开docker目录 2.创建elasticsearch目录 3.打开elasticsearch目录 4.拉取elasticsearch镜像 5.检查镜像 二.挂载目录 1.创建数据挂载目录 2.创建配置挂载目录 3.创建插件挂载目录 4.权限授权 三.编辑配置 1.打开con…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...