前言
用python实现将视频的声音对白转换成文字,可有以下两种方案:
- 提取视频字幕
往往视频作者都会在视频底部加上字幕,以提升观看体验。我们可以利用这点,通过python的图像库截取视频画面,再通过文字OCR识别图像上字幕,转写成文字。
- 视频→音频→文字
有的视频是没有字幕的,我们可以利用python的媒体库,将视频源文件转成音频格式,再对音频格式进行语音识别文字。
功能实现
1.整体思路
- 读取媒体文件
- 根据媒体文件类型统一转成WAV格式的音频
- 将音频分割成30秒以内的短音频(有利于提高调用成功率,并支持多线程以提高效率)
- 调用语音转文字服务,将音频转为文字,存入txt文本中
- 将多个文本按照顺序合并
2.借助的工具
- python
speech_recognition
语音识别库;支持 google、ibm、bing等多家的语音转写开放接口,本文使用的 Google Web Speech API。

SpeechRecognition 自身附带了 Google Web Speech API 的默认 API 密钥,可直接使用它。其他几个 API 都需要申请密钥或用户名/密码组合进行身份验证。
这几个库中只有
recognition_sphinx
与CMU Sphinx
支持引擎脱机工作,其他六个都要连接互联网。pydub
, 音频格式转换;
VideoFileClip
, 视频格式转换;
3.项目代码实现
以下是主方法代码片段:
def convert_to_text(media_path, output_path='./output'): """ 将指定的音频或视频文件转换为文本 :param media_path: 源文件路径 :param output_path: 输出目录 :return: """ try: # 获取文件名作为项目名 project_name = get_file_name(media_path)[0] # 创建输出文件夹 output_path = r'./output/' + project_name if not os.path.exists(output_path): os.makedirs(output_path) # 统一预处理文件 转Wav voice_path = convert_media_to_wave(media_path) # 将音频文件分割成小段 split_file_array = split_voice_file(voice_path, project_name, output_path) # 多线程批量音频转文字 text_array = convert_audios_to_text(split_file_array) # 将文本文件组合并成一个文档 combine_text(text_array, output_path + '/' + project_name + '.txt') except Exception as e: logging.error(traceback.format_exc())
详情请访问Github源码 https://github.com/tangly1024/Video2Text
4.已知缺陷
- 需要科学上网,否则无法使用谷歌音频转写接口
- 文字分段突兀,由于音频被按照30秒强行切开的,而不是按照断句分割,所以最好手动校对结果过。
- 没有标点符号
调用演示
具体可以下载开源代码,在自己的电脑上运行,这里简单演示运行正确的过程 :
- 将源文件的mp4,mp3等文件统一转wav音频

- 将音频文件分割成多个

- 批量调用API转换文字

- 输出结果
在output目录下会生成一个与你的原视频同名的音频文件和文本文件。而在/output/split目录下是被分割后的文件。

写在后面
这个python小程序的转换效果还有很大的优化空间,另外,网上自然有提供一些在线视频转文字的服务:
- 剪映专业版
这是一个视频剪辑的神器,步骤很简单,将素材拖入轨道,然后点击文本-智能字幕-开始识别即可。

选择 文件 - 导出 - 然后仅勾选字幕导出即可。

- 微信的轻抖小程序提取视频文案

- 蜜蜂剪辑的在线视频转文字。

- 云猫视频转文字

- PDF365在线视频转写文字
视频对照文本

