[AI/视频/音频/NLP/知识库] 技术方案:视频转文本方案——扩展AI知识库系统的边界

0 序

  • 瓦尔纳有一个观点:知识杠杆是所有复利杠杆中的最强的一款。所以,构建企业或个人的知识库系统,显得尤为必要。

  • 但视频文件,长期游离在各类知识库方案之外。

  • 如何将视频文件转换成易于检索、利于理解的自然语言文本?这是核心难题。

  • 先分享一下转换效果:

image

1 需求描述

  • 相信有不少读者和笔者一样,在平时从B站、微信视频号、Youtube、小红书等互联网内容平台上刷到、检索到一些极其优质的视频内容,需要将其下载、并转储到个人或单位中存储,并希望这些优质视频也成为AI知识库系统的一部分,但视频最大的问题是——不利于大语言模型、计算机操作系统的检索(语义检索、全文检索)。
  • 我梳理了一下具体的痛点、和实现思路。

核心痛点:视频是一座难以开采的金矿,迫切需要纳入到知识库的管理范围

  • 你或者企业收藏了、存储了几百G、几百T的优质视频内容,却几乎再也没打开过。原因很简单:
  • 搜不到:想找某句话、某个观点,只能凭记忆翻文件夹,逐帧拖动
  • 读不懂:大语言模型无法直接"看"视频,内容进不了知识库,AI问答时形同虚设
  • 管不住:文件大、格式杂,无法像文档一样打标签、分类、归档
  • 知识就在硬盘里,但企业软件系统、你和AI(LLM)都用不了。

  • 视频与文本的区别:

视频最大的优势:人的眼睛消化吸收视频的效率是最快、最高的。
但视频远不如文本,文本易于被电脑操作系统快速全文检索、易于被 AI 大语言模型快速地语义理解,并纳入AI知识库。

  • 此外,如果不想被市面大模型厂商、或商业软件产品锁定,或被高昂的软件订阅费劝退,那么个人或企业如何通过私有化部署的方式解决这个问题?

解决思路:3步让视频"开口说话"、让你和AI秒搜、秒懂

Step0 下载视频文件

  • 网络视频文件的下载、自动化,此处不详细展开。详情参见笔者另一篇博客

Step1 视频转【文本】

  • 高精度语音识别,自动生成带时间戳的完整文字稿,多语种、多行业术语精准适配。
  • 撰写本篇的核心环节。

Step2 基于视频文本,转【摘要文本】 (可选步骤)

  • AI 自动提炼核心观点、关键数据、行动结论,一分钟掌握一小时视频的精华。

Step3 基于视频文本及摘要,构建【视频知识库】

  • 转写文本自动入库,支持全文检索、语义问答、标签分类,让视频内容真正成为AI可调用的知识资产。

价值飞轮:从"存视频"到"用知识"

传统存储 本方案
查找 逐帧观看,数小时 关键词搜索,秒级定位
AI调用 无法入库,形同虚设 语义检索,随时问答
管理 文件杂乱,难以归档 结构化知识库,统一管理
  • 别让你的优质视频继续沉默。 每一段视频,都值得变成可搜索、可复用、可增值的知识资产

3 解决方案(视频转文本)

本章节的核心在于:视频转文本环节

总体思路

  • 总体思路

基于开源AI语音模型软件实现 mp4 音频转文本,业界最成熟的方案是 FFmpeg + OpenAI Whisper 组合:FFmpeg 负责从 mp4 中抽离音频,Whisper 是 MIT 许可的开源语音识别模型,支持 99+ 种语言、可完全离线运行 。

mp4 文件 ──(FFmpeg 提取音频)──▶ wav/mp3 ──(Whisper 语音识别)──▶ txt/srt/vtt/json
    ──▶ 二次断句、段落划分后的文本 (可选步骤)
    ──▶ 生成摘要文本 (可选步骤)
  • OpenAI Whisper AI语音模型软件 实际上也能直接吃 mp4 视频文件,但先用 FFmpeg 把音频标准化成 16kHz 单声道 WAV,是语音识别准确率最有保障的做法
  • AI语音模型软件也可替换为其他语音模型(例如: faster-whisper / ),当然,需要读者自行尝试了。
pip install faster-whisper
-----------
from faster_whisper import WhisperModel
model = WhisperModel("medium", device="cuda")  # 或 "cpu"
segments, info = model.transcribe("audio.wav", language="zh")
for seg in segments:
    print(f"[{seg.start:.2f}s -> {seg.end:.2f}s] {seg.text}")
  • Whisper 语音模型:
  • 项目简介: 作为 OpenAI 开源的端到端语音识别模型,本质是 Encoder-Decoder Transformer;本地运行完全不需要调用外部大语言模型
  • 知识产权: Whisper 模型权重和推理代码均以 MIT 许可开源,可完全离线运行在本地 CPU/GPU 上,音频数据不出本机
  • 核心原理
  • 输入音频被切成 30 秒片段 → 转换为 80 通道对数梅尔谱图(log-Mel spectrogram)→ 送入 Transformer 编码器提取声学表征 → 解码器以自回归方式逐 token 生成文本 。
  • 它的巧妙之处在于多任务统一建模:通过在解码器输入侧放入特殊 token(语言标识、任务类型 transcription / translation、是否输出时间戳等),同一个模型权重就能完成语言识别、原语种转录、翻译为英文、时间戳对齐等任务 。
  • 训练数据是互联网收集的 68 万小时多语言弱监督音频-文本对,覆盖 99 种语言,未针对特定数据集微调。因此,零样本泛化能力强对噪声/口音鲁棒
  • 处理流程示意
flowchart LR A[原始音频<br/>16kHz] --> B[分帧: 30秒/块<br/>25ms窗, 10ms步] B --> C[80通道<br/>对数梅尔谱图] C --> D[Encoder<br/>2层1D卷积 + N层Transformer] D --> E[音频语义表征序列] E --> F[Decoder<br/>自回归生成 token] G[特殊Token<br/>语言/任务/时间戳] --> F F --> H[文本 / 字幕 / 翻译结果]
  • 方案优势:整套方案完全开源免费可离线运行,数据不出本机——这是相比各类在线转录的软件/API 的最大优势

Step1 视频转语音文件

Step1.1 安装 FFMPEG(多媒体音视频处理的开源软件)

  • FFMPEG 的安装

[安装 FFMPEG - 视频资源/网络爬虫] FFMPEG(多媒体音视频处理工具) - 博客园/千千寰宇
http://ffmpeg.org
FFmpeg(多媒体视频处理工具) 有非常强大的功能,包括但不限于:视频采集功能、视频格式转换、视频抓图、给视频加水印等。

  • 安装完成后,可查验
C:\Users\xxx\Desktop> ffmpeg -version
ffmpeg version n6.1.2-21-gac60bc2bb0-20250203 Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 14.2.0 (crosstool-NG 1.26.0.120_4d36f27)
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-libxml2 --enable-lzma --enable-fontconfig --enable-libharfbuzz --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-libzmq --enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs=-lgomp --extra-ldflags=-pthread --extra-ldexeflags= --cc=x86_64-w64-mingw32-gcc --cxx=x86_64-w64-mingw32-g++ --ar=x86_64-w64-mingw32-gcc-ar --ranlib=x86_64-w64-mingw32-gcc-ranlib --nm=x86_64-w64-mingw32-gcc-nm --extra-version=20250203
libavutil      58. 29.100 / 58. 29.100
libavcodec     60. 31.102 / 60. 31.102
libavformat    60. 16.100 / 60. 16.100
libavdevice    60.  3.100 / 60.  3.100
libavfilter     9. 12.100 /  9. 12.100
libswscale      7.  5.100 /  7.  5.100
libswresample   4. 12.100 /  4. 12.100
libpostproc    57.  3.100 / 57.  3.100

Step1.2 将 MP4 视频文件转 WAV 音频文件

  • 将 MP4 视频文件转 WAV 音频文件

下述这些参数也可按需调整

ffmpeg -i video.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 audio.wav

-vn:丢弃视频流,只处理音频
-acodec pcm_s16le:16位 PCM 编码(WAV 标准)
-ar 16000:采样率 16kHz(Whisper 的标准输入)
-ac 1:单声道(立体声反而会干扰识别)

Step2 基于AI语音模型(OpenAI-Whisper),将【音频文件】转为【文本文件】

  • 本方法基于 OpenAI-Whisper 开源语音模型,转换为文本文件。

此处使用了 英伟达的 GPU/显卡,当然也可使用 CPU,只是针对长音频文件的处理速度会非常慢。

1) 安装环境依赖组件

  • 安装 CUDA (可选步骤,如果没有英伟达GPU、或不准备安装,则跳过)
  • 验证 CUDA 的安装情况
C:\Users\xxx> nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Wed_Aug_20_13:58:20_Pacific_Daylight_Time_2025
Cuda compilation tools, release 13.0, V13.0.88
Build cuda_13.0.r13.0/compiler.36424714_0
  • 安装 python + pip
  • 要求版本: python >= 3.8
  • 参考文献:

笔者基于 miniforge 安装的 conda(多版本、多python环境管理器) + python + pip 环境

C:\Users\xxx> conda --version
conda 25.1.1

C:\Users\xxx> conda env list

# conda environments:
#
pytorch_env            C:\Users\xxx\.conda\envs\pytorch_env
                       D:\ProgramData\miniforge3\envs\python-3.9
base                   D:\Program_Files\Miniforge\Miniforge3

C:\Users\xxx> conda activate pytorch_env

(pytorch_env) C:\Users\xxx> python --version
Python 3.10.19

(pytorch_env) C:\Users\xxx>pip --version
pip_system_certs: ERROR: could not inject truststore: [ASN1: NOT_ENOUGH_DATA] not enough data (_ssl.c:4040)
pip 25.3 from C:\Users\xxx\.conda\envs\pytorch_env\lib\site-packages\pip (python 3.10)
  • 安装 python 依赖
# openai-whisper 语音模型软件
pip install -U openai-whisper -i https://mirrors.aliyun.com/pypi/simple/

# GPU加速(可选,本文已执行)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
  • 消除静音段幻觉 (可选,本文未执行)

解释:Whisper 在静音段可能产生"幻觉文本"。可配合 Silero VAD 或 WhisperX 做语音活动检测预处理,减少无效输出 。

2) 编写并运行程序脚本: transcribe.py

踩坑1:模型文件的下载。最初笔者是通过命令行的方式来做音频文件的文本转换的。但试验后发现:

模型文件太大(--model)(GB级别) + 叠加国内网络 qiang 带来的网络不稳定问题。一旦运行下列命令,会从远端网络下载指定的模型文件。

whisper audio.wav --language zh --model medium --output_format txt

# 其他参考命令
## 1 基础转写,自动检测语言
whisper audio.wav --output_format txt

## 2 中文视频,指定语言和模型(推荐) 即 最上面这个命令
whisper audio.wav --language zh --model medium --output_format txt

# 3 同时输出多种格式 (亲测: 尚未成功)
whisper audio.wav --language zh --model small  --output_format txt,srt,vtt,json

--model : 可选值: medium / small / ...
--output_format :支持 txt:纯文本 / srt / vtt:字幕文件 / json:带时间戳和置信度的完整结构化数据 / tsv:带时间戳的表格
--language : 支持 zh / ...,特意指定中文后,识别准确率会比自动检测明显更好

踩坑2:: HuggingFace的模型文件pytorch_model.bin - HuggingFace 并不能被openai-whisper库兼容,需要专门下载指定的medium.pt - OpenaiPublic.AzureEdge.net文件。无奈,只能前往官网手动下载模型文件(medium.pt)了。

whisper audio.wav --language zh --model medium --model_dir E:\Program-Data\models\openai-whisper\ --output_format txt

如果不手动指定--model_dir参数,则: 默认会去C:\Users\xxx\.cache\whisper目录下寻找medium.pt模型文件。

  • Whisper 细分模型的选择建议:
模型 显存占用 速度 准确率 适用场景
tiny ~1 GB 极快 较低 快速预览
base ~1 GB 一般 简单音频
small ~2 GB 中等 较好 通用场景
medium ~5 GB 较慢 嘈杂音频、中文推荐
large-v3 ~10 GB 最高 生产环境、最高精度

中文场景下,medium准确率与速度的甜点;如果只有 CPU无独显,small 更现实。

  • 编写并运行: python transcribe.py

还是老老实实写 python 脚本稳当。
首次运行: 会自动下载模型权重,后续无需联网 。

import whisper

"""
@description transcribe.py
    1. 将语音文件(wav)转文本(txt)
    2. 等效于 CMD 命令: whisper audio.wav --language zh --model medium --model_dir E:\Program-Data\models\openai-whisper\ --output_format txt
"""

# 直接指定 .pt 文件的绝对路径
## https://openaipublic.azureedge.net/main/whisper/models/345ae4da62f9b3d59415adc60127b97c714f32e89e936602e85993674d08dcb1/medium.pt
model = whisper.load_model(
    r"E:\Program-Data\models\openai-whisper\medium.pt"

    # 笔者的 GPU 情况: 第 1+0 块 GPU = Intel 的集成显卡; 第 1+1 块 GPU = Nvidia 独立显卡 (GeForce GTX 1650)
    # Intel 核显 → PyTorch 看不到它作为 CUDA
    # NVIDIA 独显 → PyTorch 看到的唯一一块 CUDA 设备,索引是 cuda:0
    # PyTorch 只会找到 1 块 CUDA 设备,即 NVIDIA 独显 (cuda:0)
    , device="cuda:0"  # ← 指定 NVIDIA 独显 GPU; device=None :自动选(默认优先 GPU)
)

# 方法2: 强制 CPU 跑 : CPU 上默认就是 FP32,不可能出现 NaN。但 medium 模型在 CPU 上转录 1 分钟音频大概需要 1-2 分钟,比较慢。
# model = whisper.load_model(    r"E:\Program-Data\models\openai-whisper\medium.pt",device="cpu")

# 转录音频
result = model.transcribe(
    r"C:\Users\xxx\Desktop\audio.wav"
    , language="zh"

    # prompt 最好带标点、且内容贴近你的音频场景(会议/访谈/课程),并以句号结尾,效果最佳 => 解决语音转文本时,所有文本无标点/断句、全沾粘在一起的问题
    # 但 initial_prompt 只是"软引导"——音频噪声大、无人声停顿、或模型太小时,模型可能直接忽略它
    , initial_prompt="1、内容提要:本段音频是以大陆普通话的视频内容。\n2、语音识别时记得断句、不要全文沾粘在一起。"

    # 方法1: 关闭 FP16 :因模型在 CUDA(GPU)上用 FP16(半精度浮点)做推理,计算过程中容易出现 NaN(非数字),会导致解码时 Categorical 分布直接崩溃。 => 这是 Whisper + PyTorch + CUDA 的经典问题
    # 关闭 FP16 不影响结果,仅与运行效率有关:运行速度会稍慢一点(约 10-20%),但结果完全正确
    , fp16=False
);


# 保存为 txt
with open(r"C:\Users\xxx\Desktop\audio.txt", "w", encoding="utf-8") as f:
    f.write(result["text"])

print(result["text"])

运行后输出的内容:(准确度≈100%,不足之处:没有段落划分)

image

  • 样例文件的统计信息:
  • 全文字数:7600余字(不含标点符号)
  • 视频时常: 约23分钟
  • 运行耗时: 约20分钟
  • 硬件配置: Nvidia 独立显卡 (GeForce GTX 1650,显存=4GB) + CUDA(关闭了 FP16) / 16GB内存 / Intel i5-9300H(2.4GHz)
  • 如果没有 initial_prompt 的示例提示词,则:输出的文本会——没有任何标点符号、断句,文本全部沾粘在一起

image

  • 解决方法1:model.transcribe() 方法上利用initial_prompt参数添加示例的 Prompt 语句给模型。(示例语句可自由定义;效果:优秀)
initial_prompt="1、内容提要:本段音频是以大陆普通话的视频内容。\n2、语音识别时记得断句、不要全文沾粘在一起。"
  • 解决方法2: 利用 LLM 模型(如: DeepSeek / 豆包 等),在不改动原文的前提下,对沾粘文本进行标点符号/断句、乃至段落的切分。(效果:优秀)

参见下一步骤的章节内容。

  • 解决方法3:whisper-punctuator(推荐,零样本,开源;未亲测)

利用 Whisper 本身做零样本标点恢复,无需额外训练,支持任意 Whisper 支持的语言

pip install git+https://github.com/jumon/whisper-punctuator.git
from whisper_punctuator import Punctuator

punctuator = Punctuator(
    language="zh",
    punctuations=",。?!",
    initial_prompt="这是一段中文转写。"
)

# 把方案一里"粘文本"的音频和文本一起喂给它
punctuated = punctuator.punctuate("audio.wav", result["text"])
print(punctuated)

注意:音频需短于 30 秒,长于 30 秒会取前 30 秒做声学参考 。

  • 解决方法: ... (此处省略)

3) 基于大语言模型 + Prompt/Skill,将原始文本切分为【自然段落】 (可选步骤)

  • 效果图

image

  • 主要目的(不改变原文内容的前提下)
  • 断句/标点符号的增强
  • 段落划分
  • 新增段落级的标题
  • 提示词模板 / SKILL
# 安装 clawhub
npm i -g clawhub

# 搜索 skill
clawhub search "jz-chinese-text-punctuation-restoration"
或 openclaw skills search "jz-chinese-text-punctuation-restoration"

# 安装 skill
clawhub install johnny-ztsd/jz-chinese-text-punctuation-restoration
或 openclaw skills install johnny-ztsd/jz-chinese-text-punctuation-restoration
或 clawhub install johnny-ztsd/jz-chinese-text-punctuation-restoration
或 openclaw skills install johnny-ztsd/jz-chinese-text-punctuation-restoration

Step3 基于LLM模型 + 视频文本,生成【视频摘要】 (可选步骤)

  • step3.1 安装或自定义生成摘要的Skill、或 自定义 prompt
  • powershell

skill: https://clawhub.ai/ivangdavila/skills/summarizer :=> https://clawic.com/skills/summarizer

$env.NODE_USE_ENV_PROXY=1
$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"

npx skills add https://clawhub.ai/ivangdavila/skills/summarizer

npx 安装的 全局级 Skill的存储路径: ~\.agents\skills\
NodeJS >= 25,且需启用网络代理时,需配置: NODE_USE_ENV_PROXY=1 + HTTP_PROXY + HTTPS_PROXY

  • step3.2 基于LLM模型 + 摘要 Skill,生成摘要内容。

image

Z FAQ

Q: 运行 openai-whisper Python 程序,报 SSL 证书错误ssl.SSLError: [ASN1: NOT_ENOUGH_DATA] not enough data (_ssl.c:4040)?

Y 推荐文献

Whisper是一个开源的自动语音识别系统,它在网络上收集了680,000小时的多语种和多任务监督数据进行训练,使得它可以将多种语言的音频转文字。
Whisper的好处是开源免费、支持多语种(包括中文、英文等),有不同模型可供选择,最终的效果比市面上很多音频转文字的效果都要好。

image

X 参考文献

posted @ 2026-08-24 14:24  数据知音  阅读(12)  评论(0)    收藏  举报