[AI/视频/音频/NLP/知识库] 技术方案:视频转文本方案——扩展AI知识库系统的边界
0 序
-
瓦尔纳有一个观点:知识杠杆是所有复利杠杆中的最强的一款。所以,构建企业或个人的知识库系统,显得尤为必要。
-
但视频文件,长期游离在各类知识库方案之外。
-
如何将视频文件转换成易于检索、利于理解的自然语言文本?这是核心难题。
-
先分享一下转换效果:

1 需求描述
- 相信有不少读者和笔者一样,在平时从B站、微信视频号、Youtube、小红书等互联网内容平台上刷到、检索到一些极其优质的视频内容,需要将其下载、并转储到个人或单位中存储,并希望这些优质视频也成为AI知识库系统的一部分,但视频最大的问题是——不利于大语言模型、计算机操作系统的检索(语义检索、全文检索)。
- 我梳理了一下具体的痛点、和实现思路。
核心痛点:视频是一座难以开采的金矿,迫切需要纳入到知识库的管理范围
- 你或者企业收藏了、存储了几百G、几百T的优质视频内容,却几乎再也没打开过。原因很简单:
- 搜不到:想找某句话、某个观点,只能凭记忆翻文件夹,逐帧拖动
- 读不懂:大语言模型无法直接"看"视频,内容进不了知识库,AI问答时形同虚设
- 管不住:文件大、格式杂,无法像文档一样打标签、分类、归档
-
知识就在硬盘里,但企业软件系统、你和AI(LLM)都用不了。
-
视频与文本的区别:
视频最大的优势:人的眼睛消化吸收视频的效率是最快、最高的。
但视频远不如文本,文本易于被电脑操作系统快速全文检索、易于被 AI 大语言模型快速地语义理解,并纳入AI知识库。
- 此外,如果不想被市面大模型厂商、或商业软件产品锁定,或被高昂的软件订阅费劝退,那么个人或企业如何通过私有化部署的方式解决这个问题?
解决思路:3步让视频"开口说话"、让你和AI秒搜、秒懂
Step0 下载视频文件
- 网络视频文件的下载、自动化,此处不详细展开。详情参见笔者另一篇博客
- [流媒体/网络爬虫] 网络流媒体平台的音视频下载工具 - 博客园/千千寰宇
- 如需技术支持,需可关注微信公众号后,私信来意。
- Demo Video: 为何30到40岁,是普通人一生中唯一能翻身的十年——纳瓦尔·拉维坎特 - Bilibili
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 WhisperAI语音模型软件 实际上也能直接吃 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种语言,未针对特定数据集微调。因此,零样本泛化能力强、对噪声/口音鲁棒 。
- 处理流程示意
- 方案优势:整套方案完全开源免费、可离线运行,数据不出本机——这是相比各类在线转录的软件/API 的最大优势
Step1 视频转语音文件
- 更多丰富场景,可参见: [视频资源/网络爬虫] FFMPEG(多媒体音视频处理工具) - 博客园/千千寰宇
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%,不足之处:没有段落划分)

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

- 解决方法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,将原始文本切分为【自然段落】 (可选步骤)
- 效果图

- 主要目的(不改变原文内容的前提下)
- 断句/标点符号的增强
- 段落划分
- 新增段落级的标题
- 提示词模板 / 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,生成摘要内容。

Z FAQ
Q: 运行 openai-whisper Python 程序,报 SSL 证书错误ssl.SSLError: [ASN1: NOT_ENOUGH_DATA] not enough data (_ssl.c:4040)?
- 详情参见: Python FAQ - 博客园/千千寰宇
Y 推荐文献
-
OpenAI-Whisper 开源项目
Whisper是一个开源的自动语音识别系统,它在网络上收集了680,000小时的多语种和多任务监督数据进行训练,使得它可以将多种语言的音频转文字。
Whisper的好处是开源免费、支持多语种(包括中文、英文等),有不同模型可供选择,最终的效果比市面上很多音频转文字的效果都要好。

浙公网安备 33010602011771号