前言
最近打开百度网盘,看到播放视频有一个AI字幕功能,心情非常激动,看视频的同时可以看自动生成的字幕,防止听不清视频中人物的话语
然而不是SVIP,我试用过了之后就没有这个功能选项了
我在想,如果随便哪一个“免费”播放器,都可以一边播放视频,一边生成字幕,外文自动翻译,那不是牛哄哄?
看教程,看视频都可以方便很多,因为语音太杂了,听完后有时还要猜视频中的人物说的什么,尤其是倍速情况下,有了自动生成的字幕之后,都不再是问题
问题是如何达到这一点?当然喽,重点是免费,高效
当然,我已经实现了,Follow me!
文件都在这里,下载好文件一步步来就可以了
配置环境:
- 系统: win10
- ffmpeg:ffmpeg-5.1.2-essentials_build.zip
- python:3.8.8
- python包:vosk-0.3.45-py3-none-win_amd64.whl
- 语音模型:vosk-model-cn-0.22
流程
设想这样一个情景,向视频播放器中塞进一个语音转文字模型,当它加载视频流的时候,一边提前读取视频流,用语音模型生成字幕,一遍播放已经生成字幕的视频,不就是如此吗?
先安装相关文件
安装ffmpeg
https://ffmpeg.org/download.html
这是官网
安装就是解压而已,然后在系统变量中添加文件中的bin路径
然后cmd输入命令,查看是否已经识别
ffmpeg –version
安装python包
自己从官网下再安装 https://pypi.org/
vosk-0.3.45-py3-none-win_amd64.whl放到目录下,
pip install vosk-0.3.45-py3-none-win_amd64.whl
测试模型——对视频使用语音模型生成srt字幕,拖入视频播放器中
官网 模型文件下载地址https://alphacephei.com/vosk/models
先生成字幕文件
将想要识别语言类别的对应模型解压,想要识别中文语音就用中文模型,英文就用英文模型,日文就用日文模型等
需要注意的是先将视频文件,转成单通道wav语音文件,语音模型是对wav文件识别的,抛弃了对语音识别无用的图像信息
格式工厂yyds
将代码中的音频文件换一下位置,模型文件换个解压好的名字,等待输出就行了
如果报错wav非pcm开头等等,请确认一下wav文件是否是单通道,测试中发现格式工厂使用高质量输出可以,保持原采样率,如果降低质量则识别失败,使用中保持原始采样率即可,单改通道
import subprocess
import os
import sys
from vosk import Model, KaldiRecognizer, SetLogLevel
SAMPLE_RATE = 16000
SetLogLevel(-1)
# 解压的模型文件,英文,中文用对应model
model = Model(r"C:\Users\Administrator\MyFileLi\AIPrograms\model_cn")
rec = KaldiRecognizer(model, SAMPLE_RATE)
# 修改需要识别的语音文件路径
wavPath=r"D:\FFOutput\课时1.wav"
rec.SetWords(True)
result = []
with subprocess.Popen(["ffmpeg", "-loglevel", "quiet", "-i",
wavPath,
"-ar", str(SAMPLE_RATE) , "-ac", "1", "-f", "s16le", "-"],
stdout=subprocess.PIPE).stdout as stream:
result.append(rec.SrtResult(stream))
print(result)
# 生成srt文件
output = open(wavPath.split("\\")[-1].split(".")[:-1][0]+'.srt','w')
output.write("\n".join(result))
output.close()