news 2026/4/18 2:43:17

基于开源软件本地搭建视频语音转文字

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于开源软件本地搭建视频语音转文字

一、目的

想要本地运行、开源免费的视频语音提取转文字方案,这类方案完全可控、无隐私泄露风险,还能自定义适配不同语言和场景。

二、技术路线 (FFmpeg + Whisper)

这是目前最成熟的开源组合:

  • FFmpeg:负责从视频中无损提取音频(全能的音视频处理工具,开源免费)。
  • OpenAI Whisper:OpenAI 开源的语音转文字模型,支持 99 种语言,准确率极高,可本地运行。

三、前置准备(环境搭建)

  1. 安装 Python(3.8 及以上版本):https://www.python.org/downloads/
  2. 安装 FFmpeg:
    • Windows:下载 FFmpeg 压缩包,解压后将bin目录添加到系统环境变量,验证:ffmpeg -version
    • Mac:brew install ffmpeg
    • Linux:sudo apt update && sudo apt install ffmpeg
  3. 安装 Whisper:
    # 创建独立python环境conda create--name whisper python=3.12# 激活创建的独立python环境conda activate whisper# 基础安装(包含轻量模型)pip install openai-whisper# 在安装了nvidia的Windows或Linux机器上:安装PyTorch GPU版本(提速5-10倍,需显卡支持),指明了具体CUDA版本121pip3 install torch torchvision torchaudio--index-url https://download.pytorch.org/whl/cu121# 如果是MacBook,无法使用 CUDA,默认使用苹果的Apple Silicon (M系列芯片)# PyTorch专门为苹果开发了MPS(Metal Performance Shaders) 后端。PyTorch会自动识别你的硬件并准备好 MPS 支持。pip3 install torch torchvision torchaudio

四、完整代码实现(一键提取 + 转写)

以下代码可直接运行,实现「视频→提取音频→转写文字→导出 TXT/SRT 字幕」全流程:

#!/usr/bin/env python3importwhisperimportsubprocessimportosimportargparseimporttorch# 导入 torch 以便检查 MPS/CUDAfromwhisper.utilsimportget_writer# 导入官方写入工具defextract_audio_from_video(video_path,audio_path="temp_audio.wav"):""" 从视频中提取音频(使用FFmpeg) :param video_path: 输入视频路径(支持MP4/MOV/AVI等所有格式) :param audio_path: 输出音频路径(默认WAV格式) :return: 提取后的音频路径 """ifos.path.exists(audio_path):os.remove(audio_path)# 删除旧的临时音频# FFmpeg命令:提取音频,忽略视频流,输出WAVcmd=["ffmpeg","-i",video_path,"-vn",# 禁用视频流"-acodec","pcm_s16le",# 音频编码(保证兼容性)"-ar","16000",# 采样率16kHz(Whisper推荐)"-ac","1",# 单声道audio_path,"-y"# 覆盖已有文件]try:subprocess.run(cmd,check=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)print(f"✅ 音频提取完成:{audio_path}")returnaudio_pathexceptsubprocess.CalledProcessErrorase:raiseException(f"❌ 音频提取失败:{e.stderr.decode()}")defvideo_to_text(video_path,output_dir=".",model_size="base"):""" 视频转文字主函数 :param video_path: 输入视频路径 :param output_dir: 输出路径 :param model_size: Whisper模型大小(tiny/base/small/medium/large,越大越准但越慢) """# 0. 设备检测逻辑 (保持兼容性)iftorch.backends.mps.is_available():device="mps"print("🚀 检测到 Apple Silicon GPU,使用 MPS 加速")eliftorch.cuda.is_available():device="cuda"print("🚀 检测到 NVIDIA GPU,使用 CUDA 加速")else:device="cpu"print("⚠️ 未检测到 GPU 加速,使用 CPU 运行")# 1. 提取音频audio_path=extract_audio_from_video(video_path)# 2. 加载Whisper模型(首次运行会自动下载对应模型,约1GB-6GB)print(f"📥 加载Whisper{model_size}模型...")model=whisper.load_model(model_size,device=device)# 3. 语音转文字(支持自动识别语言)print("🔊 正在转写音频...")result=model.transcribe(audio_path,language="zh",# 手动指定语言(可选,不指定则自动识别)word_timestamps=False,# 如需单词级时间戳设为Trueverbose=False,fp16=False# 注意:MPS 目前对 fp16 支持不稳,设为 False 使用 fp32 兼容性更好)# 4. 使用官方工具导出结果# 获取输出目录路径output_dir=os.path.dirname(os.path.abspath(output_dir))ifos.path.dirname(output_dir)else"."# 导出 SRTsrt_writer=get_writer("srt",output_dir)srt_writer(result,video_path,{"max_line_width":None,"max_line_count":None,"highlight_words":False})# 导出 TXTtxt_writer=get_writer("txt",output_dir)txt_writer(result,video_path,{"max_line_width":None,"max_line_count":None,"highlight_words":False})print(f"📝 纯文本已导出")print(f"🎬 字幕文件已导出")# 清理临时音频os.remove(audio_path)print("✅ 全部完成!")# ====================== 运行示例 ======================if__name__=="__main__":# 1. 创建解析器parser=argparse.ArgumentParser(description="使用 Whisper 提取视频字幕")# 2. 添加参数# 必填参数:视频路径parser.add_argument("video_path",type=str,help="输入视频文件的路径 (例如: test.mp4)")# 可选参数:模型大小 (默认 base)parser.add_argument("--model",type=str,default="base",choices=["tiny","base","small","medium","large"],help="Whisper 模型大小,默认是 base")parser.add_argument("--output_dir",type=str,default=".")# 3. 解析参数args=parser.parse_args()# 4. 将解析出的参数传递给你的函数video_to_text(video_path=args.video_path,output_dir=args.output_dir,model_size=args.model)

代码关键部分解释

  • extract_audio_from_video:调用 FFmpeg 命令行工具,将视频中的音频提取为 Whisper 最优的 WAV 格式(16kHz 单声道),保证转写准确率。
  • whisper.load_model:加载不同大小的模型,新手优先选base(约 1GB),追求准确率选medium(约 3GB),速度优先选tiny(约 100MB)。
  • model.transcribe:核心转写函数,language="zh"指定中文(可改为 “en” 等),自动处理口音、断句。
  • 导出功能:同时生成纯文本(TXT)和带时间戳的字幕(SRT),满足不同需求。

五、使用步骤

  1. 安装好 Python、FFmpeg、Whisper 环境。
  2. 将代码保存为video2text.py。
  3. 运行代码:
python3 video2text.py test_video.mp4

六、进阶优化

批量处理:修改代码,遍历文件夹下所有视频:

# 批量处理示例importglobforvideo_fileinglob.glob("videos/*.mp4"):# 遍历videos文件夹下的所有MP4video_to_text(video_file,output_dir=".")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 13:27:41

卷不动了?2025大模型开发新趋势:6款AI工具让程序员效率提升10倍!

一、 市场运行与行业趋势 昆仑芯启动港股IPO进程[1] 昆仑芯正式启动中国香港上市进程,推进国产AI芯片资本化布局。受益于国产算力需求快速增长,AI芯片市场持续扩张。 MiniMax和智谱AI通过上市聆讯[2] MiniMax、智谱AI已通过上市聆讯,大模…

作者头像 李华
网站建设 2026/4/16 15:03:05

sward快速上手指南 - 如何有效保障文档的安全可靠

sward是一款国产开源免费知识库管理工具,工具支持一键安装零配置,页面设计简洁易用。本文将介绍sward如何通过多重机制有效保障文档的安全可靠。1、知识库可见范围创建知识库时,可以选择可见范围公共或者私密。公共:系统全部成员可…

作者头像 李华
网站建设 2026/4/18 7:58:25

利用GLM-4.6V-Flash-WEB提升视觉辅助决策系统响应速度

利用GLM-4.6V-Flash-WEB提升视觉辅助决策系统响应速度 在医疗影像初筛、工业质检巡检、远程客服协助等高实时性场景中,一个常见的痛点是:模型“看得准”,但“反应慢”。用户上传一张图片,等待数秒甚至更久才得到反馈——这不仅破…

作者头像 李华
网站建设 2026/4/18 2:29:47

【限时干货】Dify API调用安全配置的4个关键步骤

第一章:Dify API调用安全配置概述在集成 Dify 平台提供的 API 服务时,确保调用过程的安全性是系统设计中的关键环节。合理的安全配置不仅能防止未授权访问,还能有效防范数据泄露与恶意攻击。通过身份认证、权限控制和通信加密等机制&#xff…

作者头像 李华