
一、前言:为什么我要做一个视频转文字的工具?
随着短视频和在线课程的爆发式增长,越来越多的信息以“视频”的形式呈现。但许多时候,我们想要快速获取视频中的内容,列如会议记录、教学讲解、采访对话等,手动听写效率太低,而且容易出错。
于是,我就想着自己动手,用 Whisper 和 DeepSeek-R1 模型 ,手搓一个全自动视频转文字+格式化输出 的小工具,不仅能识别语音,还能自动纠错、加标点、分段落,简直不要太香!
二、项目简介:这个工具能做什么?
该项目实现了以下功能:
✅ 通过moviepy从视频中提取音频
✅ 使用 Whisper 将音频转为原始文本
✅ 将原始文本保存为 .txt 文件
✅ 调用 DeepSeek-R1 模型对文本进行格式化处理
✅ 自动修正错别字、添加标点、书面化表达
✅ 输出最终结构清晰、可读性强的文档
一句话总结:视频一拖进去,直接输出排版整齐、语义通顺的文字稿!
三、核心技术栈介绍
1. MoviePy(视频处理)
- 提取视频中的音频轨道
- 简单易用,Python 写脚本神器
2. Whisper(语音转文字)
- 来自 OpenAI 的开源语音识别模型
- 支持多语言识别,中文也完全没问题
- 可选择不同大小模型(tiny / base / small / medium / large)
3. DeepSeek-R1(文本处理)
- 硅基流动平台提供的大模型服务
- 基于 deepseek-ai/DeepSeek-R1
- 超级擅长文本格式化、错别字纠正、书面化转换等任务
四、实现思路详解(附代码逻辑)
整个流程分为以下几个步骤:
Step 1:从视频中提取音频
from moviepy.editor import VideoFileClip
def extract_audio_from_video(video_path, audio_output_path):
video = VideoFileClip(video_path)
video.audio.write_audiofile(audio_output_path)
使用 MoviePy 从视频中提取音频文件(如 .wav),供下一步语音识别使用。
Step 2:使用 Whisper 进行语音识别
import whisper
def transcribe_audio_to_text(audio_path, text_output_path):
model = whisper.load_model("large")
result = model.transcribe(audio_path, language="zh",fp16=False)
raw_text = result["text"]
with open(text_output_path, "w", encoding="utf-8") as f:
f.write(raw_text)
加载 Whisper 模型并进行语音识别,将结果写入 .txt 文件。
这里我们使用了large的whisper模型

whisper 模型文件
Step 3:调用 DeepSeek-R1 对文本进行格式化处理
由于whisper输出的文字通篇没有标点符号和换行,偶尔有错别字,这就需要AI大模型来进行整理输出。
import openai
def format_text_with_siliconflow(raw_text, api_key, formatted_output_path):
client = openai.OpenAI(
base_url="https://api.siliconflow.cn/v1",
api_key=api_key,
)
prompt = """# 角色
你是一个文本格式化与错别字修正智能体,专门处理无分段和标点的文本文件,能按照正常格式要求对其进行格式化,精准识别并修正其中的错别字。
## 技能
### 技能 1: 格式化文本
1. 接收无分段和标点的文本文件内容。
2. 依据正常语言表达习惯和格式要求,对文本进行分段处理,添加合适的标点符号。
### 技能 2:分段和书面化转换
1. 在格式化后的文本中,运用自身语言知识储备,识别并标记出所有错别字。
2. 将错别字替换为正确的字词。
3. 根据文档内容,按照常规的文章段落要求进行分段落显示。
4. 对文章中过于口语化的内容做书面形式的转换,要求不影响整体意思的表达。
## 限制
- 仅处理无分段和标点且存在错别字的文本文件内容,不涉及其他类型任务。
- 不增删和修改文字,不要做总结,直接完整输出。
- 处理过程严格按照正常语言格式要求和通用语言规范进行,不得随意更改文本原意。
"""
completion = client.chat.completions.create(
model="deepseek-ai/DeepSeek-R1",
messages=[
{"role": "system", "content": prompt},
{"role": "user", "content": raw_text}
]
)
formatted_text = completion.choices[0].message.content
with open(formatted_output_path, "w", encoding="utf-8") as f:
f.write(formatted_text)
通过 SiliconFlow API 调用 DeepSeek-R1 大模型,对识别出的原始文本进行格式化、错别字修正、标点补充、段落划分等处理。
Step 4:整合所有模块,一键运行
将上述模块整合成一个完整的函数,传入视频路径即可完成全流程处理。
完整代码如下:
from moviepy.editor import VideoFileClip
import os
import whisper
import openai
# Step 1: 从视频中提取音频
def extract_audio_from_video(video_path, audio_output_path):
print("正在从视频中提取音频...")
video = VideoFileClip(video_path)
video.audio.write_audiofile(audio_output_path)
print(f"音频已保存为 {audio_output_path}")
# Step 2: 将音频转为文字
def transcribe_audio_to_text(audio_path, text_output_path):
print("正在加载 Whisper 模型并识别语音内容...")
model_path = "/root/.cache/whisper/large-v3-turbo.pt" # 例如:'./models/base.pt'
# 从本地加载模型
model = whisper.load_model(model_path)
result = model.transcribe(audio_path, language="zh",fp16=False) # 设置语言为中文
text = result["text"]
print(f"识别完成,正在将原始文字写入文件:{text_output_path}")
with open(text_output_path, "w", encoding="utf-8") as f:
f.write(text)
print("原始文字已成功写入文件")
return text
# Step 3: 使用 SiliconFlow API 格式化文本
def format_text_with_siliconflow(raw_text, api_key, formatted_output_path):
print("正在调用 SiliconFlow API 对文本进行格式化与纠错...")
client = openai.OpenAI(
base_url="https://api.siliconflow.cn/v1",
api_key=api_key,
)
prompt = """# 角色
你是一个文本格式化与错别字修正智能体,专门处理无分段和标点的文本文件,能按照正常格式要求对其进行格式化,精准识别并修正其中的错别字。
## 技能
### 技能 1: 格式化文本
1. 接收无分段和标点的文本文件内容。
2. 依据正常语言表达习惯和格式要求,对文本进行分段处理,添加合适的标点符号。
### 技能 2:分段和书面化转换
1. 在格式化后的文本中,运用自身语言知识储备,识别并标记出所有错别字。
2. 将错别字替换为正确的字词。
3. 根据文档内容,按照常规的文章段落要求进行分段落显示。
4. 对文章中过于口语化的内容做书面形式的转换,要求不影响整体意思的表达。
## 限制
- 仅处理无分段和标点且存在错别字的文本文件内容,不涉及其他类型任务。
- 不增删和修改文字,不要做总结,直接完整输出。
- 处理过程严格按照正常语言格式要求和通用语言规范进行,不得随意更改文本原意。
"""
try:
completion = client.chat.completions.create(
model="deepseek-ai/DeepSeek-R1",
messages=[
{"role": "system", "content": prompt},
{"role": "user", "content": raw_text}
]
)
formatted_text = completion.choices[0].message.content
print(f"格式化完成,正在将结果写入文件:{formatted_output_path}")
with open(formatted_output_path, "w", encoding="utf-8") as f:
f.write(formatted_text)
print("格式化文本已成功写入文件")
return formatted_text
except Exception as e:
print("调用 SiliconFlow API 出错:", str(e))
return None
# 主函数
def video_to_formatted_text(video_file, output_text_file="output.txt", formatted_output_file="formatted_output.txt"):
audio_file = "output.wav"
# Step 1: 提取音频
extract_audio_from_video(video_file, audio_file)
# Step 2: 音频转文字
raw_text = transcribe_audio_to_text(audio_file, output_text_file)
# Step 3: 使用 API 进行格式化
siliconflow_api_key = "your_siliconflow_api_key_here" # 替换为你自己的 API Key
formatted_text = format_text_with_siliconflow(raw_text, siliconflow_api_key, formatted_output_file)
# Step 4: 删除临时音频文件
if os.path.exists(audio_file):
os.remove(audio_file)
print("临时音频文件已删除")
return formatted_text
# 示例调用
if __name__ == "__main__":
video_path = "video.mp4" # 替换为你自己的视频路径
output_text_path = "output.txt"
formatted_output_path = "formatted_output.txt"
video_to_formatted_text(video_path, output_text_path, formatted_output_path)
print(f"
原始识别文本已保存到:{output_text_path}")
print(f"格式化后文本已保存到:{formatted_output_path}")
执行代码:
python video2text_deepseek.py

执行转化脚本
输出的文本内容:

对比原来的视频内容,文字准确还是挺高的。
© 版权声明
文章版权归作者所有,未经允许请勿转载。

并发能够多少?
并发要看机器的配置情况的
我都是用360AI里面有免费额度,可以视频转文字的,非常好用。
视频转文字,效率提升不止一点点。
收藏了,感谢分享