实用系列1 —— 视频中的语音转换成文字python版本

背景说明

疫情原因,家里的老师亲戚需要对着电脑上网课,晋升为十八线小主播~
备课的内容来源都是当地教育局的公开课,为了学习公开课的上课方法,只能自己慢速播放视频,并手动敲下所有汉字,此时我作为一个家里人眼中的‘电脑高手’,被迫上场表演,那么就来看看如何做到自动转换视频中的语音到文字呢?

技术方案设计

要实现自动转换视频中的语音到文字的功能需要两步,
第一,抽取视频中的语音流数据
第二,使用语音识别模型识别语音流数据
语言:python 3.6/3.6+
视频格式: MP4

抽取视频中的语音流数据

我是用python库moviepy (链接:https://pypi.org/project/moviepy)
安装方法:pip install moviepy
目的:从mp4视频中抽取语音流数据并转换成wav格式
使用方法:

    from moviepy.editor import *import os file_name = 'SVID_20200429_151304_1.mp4'dir_name = file_name.replace('.mp4', '')cmd1 = 'mkdir /Users/user/Documents/{}'.format(dir_name)os.system(cmd1)  # 新视频就建立个新目录存放video = VideoFileClip('/Users/user/Documents/{}.mp4'.format(dir_name))audio = video.audioaudio.write_audiofile('/Users/user/Documents/{}.wav'.format(dir_name))  # 主要转化函数

使用语音识别模型识别语音流数据

自己尝试自己训练了下语音模型,使用开源数据下效果只能说是一般;故而使用百度云的语音识别API,目前(2020.05)只要注册就可以免费调用50000次短语音识别(语音长度不超过60秒)
注册地址:https://login.bce.baidu.com/?redirect=http%3A%2F%2Fcloud.baidu.com%2Fcampaign%2FPromotionApr%2Findex.html
注册完成后记得建立应用并记录对应的API_KEY和SECRET_KEY,这是你调用API的身份凭识

具体调用脚本可以参考百度云在git上的demo,注意百度短语音识别只支持单声道,16000码率的音频,这需要我们转换下音频的格式,需要使用到ffmpeg,mac直接使用homebrew安装即可
具体转换命令:ffmpeg -y -i wavfile_name -acodec pcm_s16le -f s16le -ac 1 -ar 16000 pcmfile_name

整体示例代码

# coding=utf-8import sys
import json
import base64
import time
from scipy.io import wavfile
import subprocess
import osIS_PY3 = sys.version_info.major == 3if IS_PY3:from urllib.request import urlopenfrom urllib.request import Requestfrom urllib.error import URLErrorfrom urllib.parse import urlencodetimer = time.perf_counter
else:from urllib2 import urlopenfrom urllib2 import Requestfrom urllib2 import URLErrorfrom urllib import urlencodeif sys.platform == "win32":timer = time.clockelse:# On most other platforms the best timer is time.time()timer = time.timeAPI_KEY = '你的api key'
SECRET_KEY = '你的secret key'# 需要识别的文件
AUDIO_FILE = '/Users/user/Documents/test2.pcm'  # 只支持 pcm/wav/amr 格式,极速版额外支持m4a 格式
# 文件格式
FORMAT = AUDIO_FILE[-3:]  # 文件后缀只支持 pcm/wav/amr 格式,极速版额外支持m4a 格式CUID = '123456PYTHON'
# 采样率
RATE = 16000  # 固定值# 普通版DEV_PID = 1537  # 1537 表示识别普通话,使用输入法模型。根据文档填写PID,选择语言及识别模型
ASR_URL = 'http://vop.baidu.com/server_api'
SCOPE = 'audio_voice_assistant_get'  # 有此scope表示有asr能力,没有请在网页里勾选,非常旧的应用可能没有#测试自训练平台需要打开以下信息, 自训练平台模型上线后,您会看见 第二步:“”获取专属模型参数pid:8001,modelid:1234”,按照这个信息获取 dev_pid=8001,lm_id=1234
# DEV_PID = 8001 ;
# LM_ID = 1234 ;# 极速版 打开注释的话请填写自己申请的appkey appSecret ,并在网页中开通极速版(开通后可能会收费)# DEV_PID = 80001
# ASR_URL = 'http://vop.baidu.com/pro_api'
# SCOPE = 'brain_enhanced_asr'  # 有此scope表示有极速版能力,没有请在网页里开通极速版# 忽略scope检查,非常旧的应用可能没有
# SCOPE = Falseclass DemoError(Exception):pass"""  TOKEN start """TOKEN_URL = 'http://openapi.baidu.com/oauth/2.0/token'def fetch_token():params = {'grant_type': 'client_credentials','client_id': API_KEY,'client_secret': SECRET_KEY}post_data = urlencode(params)if (IS_PY3):post_data = post_data.encode( 'utf-8')req = Request(TOKEN_URL, post_data)try:f = urlopen(req)result_str = f.read()except URLError as err:print('token http response http code : ' + str(err.code))result_str = err.read()if (IS_PY3):result_str =  result_str.decode()print(result_str)result = json.loads(result_str)print(result)if ('access_token' in result.keys() and 'scope' in result.keys()):print(SCOPE)if SCOPE and (not SCOPE in result['scope'].split(' ')):  # SCOPE = False 忽略检查raise DemoError('scope is not correct')print('SUCCESS WITH TOKEN: %s  EXPIRES IN SECONDS: %s' % (result['access_token'], result['expires_in']))return result['access_token']else:raise DemoError('MAYBE API_KEY or SECRET_KEY not correct: access_token or scope not found in token response')"""  TOKEN end """if __name__ == '__main__':token = fetch_token()from moviepy.editor import *import osfile_name = 'SVID_20200429_151304_1.mp4'dir_name = file_name.replace('.mp4', '')cmd1 = 'mkdir /Users/user/Documents/{}'.format(dir_name)os.system(cmd1)video = VideoFileClip('/Users/user/Documents/{}.mp4'.format(dir_name))audio = video.audioaudio.write_audiofile('/Users/user/Documents/{}.wav'.format(dir_name))speech_data = []like = wavfile.read('/Users/user/Documents/{}.wav'.format(dir_name))start_sec = 10end_sec = 1777intern = 55# start_sec: 识别起始秒数,end_sec:识别结束秒数, intern : 每次调用秒数间隔,不能超过60,保守起见选择55秒with open("/Users/user/Documents/{}/result.txt".format(dir_name), "w") as of:for i in range(start_sec, end_sec, intern):j = min(end_sec, i + intern)wavfile_name = '/Users/user/Documents/{}/test_{}_{}.wav'.format(dir_name, i, j)pcmfile_name = '/Users/user/Documents/{}/test_{}_{}.pcm'.format(dir_name, i, j)wavfile.write(wavfile_name, 44100, like[1][i * 44100:j * 44100])cmdline = "ffmpeg -y  -i {}  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {}".format(wavfile_name, pcmfile_name)ret = os.system(cmdline)print('code: ', ret)with open(pcmfile_name, 'rb') as speech_file:speech_data = speech_file.read()length = len(speech_data)if length == 0:raise DemoError('file %s length read 0 bytes' % AUDIO_FILE)speech = base64.b64encode(speech_data)if (IS_PY3):speech = str(speech, 'utf-8')params = {'dev_pid': DEV_PID,# "lm_id" : LM_ID,    #测试自训练平台开启此项'format': FORMAT,'rate': RATE,'token': token,'cuid': CUID,'channel': 1,'speech': speech,'len': length}post_data = json.dumps(params, sort_keys=False)# print post_datareq = Request(ASR_URL, post_data.encode('utf-8'))req.add_header('Content-Type', 'application/json')try:begin = timer()f = urlopen(req)result_str = f.read()print("Request time cost %f" % (timer() - begin))except URLError as err:print('asr http response http code : ' + str(err.code))result_str = err.read()if (IS_PY3):result_str = str(result_str, 'utf-8')print(result_str)dd = json.loads(result_str)of.write(dd['result'][0] + '\n')

实用系列1 —— 视频中的语音转换成文字相关推荐

  1. 如何提取视频中的语音转换成文字?分享一个超好用的方法

    在现代的数字化时代,视频和音频的使用越来越广泛.但是,当你需要从视频中获取有用的信息时,最好的方法是将视频中的语音转换成文字.这不仅使信息更容易理解,还可以通过搜索引擎和文本编辑器对其进行搜索.在本文 ...

  2. 利用python将长视频、长语音转换成文字教程 ,非常好用

    原本自己想弄一个语音转文本的,但是发现很多博客都说的不是自己想要的,原因有以下几点:1.因为百度接口支持的语音是pcm格式,而自己的是.mp3格式的文件. 2.百度只支持60s内的文件格式,而自己想要 ...

  3. 【日常】无字幕教学视频中的音频转换成文字

    需求:看一些教学视频时老师语速较快且无字幕,对于知识点的吸收效率不高,因此需要将视频中的音频提取成文字,方便理解: 实现(工具+操作) 工具 格式工厂 打开格式工厂: 选择音频转MP3栏目,添加文件( ...

  4. 如何将视频中的语音转成文字?3招教会你实现转换

      有时候我们从手机或者电脑接收到的视频,需要对其中的文字内容进行整理,形成一份电子文档.如果大家还一直用传统的方式,通过观看视频进行手动整理,那未免有些浪费时间.想要快速得到视频中的文字内容,我们不 ...

  5. 记一次失败的《将视频中的音频转换成文字》的经历

    视频中的音频如何转换成文字 前言 前段时间我打算做B站林超的视频笔记,突然想到我是否可以用工具将视频的音频转换成文字,或者将视频中的字幕用OCR转化为文字.这样我就不要干巴巴敲内容了.不过因为林超的视 ...

  6. 如何把视频语音转换成文字呢?

    视频语音转换成文字操作实际上是将视频中的音频语言转换成文本形式.如果正常要实现这种操作,我们一般需要先了解视频在讲解什么,然后再手动整理内容.但其实这个操作是需要时间的.而现在我们只需要一些转换工具就 ...

  7. 视频语音转换成文字要怎么操作呢?

    近年来,随着人们对视频拍摄的需求越来越大,视频传输的速度越来越快,视频存储的空间越来越大,各种场景中积累了大量的视频数据,这就需要一种有效的视频管理.分析和处理工具.有时就需要把一些视频语音转换成文字 ...

  8. 剪映+json解析将视频中的声音转换成文本

    前言 有时候我们想将一段视频中的音频转换成文本,最简单最笨的方法就是通过人耳去听,然后通过打字打出来.但这种方法无疑是十分费劲的.机智的小伙伴肯定都知道我们可以借助语音识别工具来做这件事,但是比较现实 ...

  9. 怎么把视频语音转换成文字呢?

    相信有不少小伙伴们喜欢在网上找相关的课程视频,通过自学课程来提升自己,但是有时候会发现有些课程并不需要视频演示.由于这些网络课堂图片包含的知识重点较少,比较枯燥,容易分散注意力.这时有些朋友会想把视频 ...

最新文章

  1. 逻辑回归,朴素贝叶斯,KMeans,决策树的不足和优势
  2. 获取系统进程信息和进程依赖的dll信息--CreateToolhelp32Snapshot
  3. 科大星云诗社动态20210504
  4. Codeforces Round #374 (Div. 2) A. One-dimensional Japanese Crosswor 水题
  5. [Android] Implementation vs API dependency
  6. linux ubuntu 软件安装的三种方式
  7. 九年级数学解方程50道_初中数学公式中考知识点总结,初三数学上册,九年级数学上册...
  8. 作者:李冰(1989-),女,中国电子技术标准化研究院工程师。
  9. 空间计量经济学(2)---广义空间自回归与空间误差模型
  10. 发票分类代码地区代码列表
  11. 柯马机器人示教器编程_COMAU柯马机器人示教器按键失灵,无显示专业维修
  12. win7安装JDK并配置
  13. 今天电脑突然出现问题: 请安装 TCP/IP 协议 错误 10106 【已解决·】
  14. docker 常用命令 -----(批量查看镜像/容器,重命名,运行,进入容器,私有仓库)
  15. android和ios系统的内存,为什么说IOS系统的2G运存相当于安卓手机的8G运存
  16. List<?>和list的区别
  17. 如何实现一个“线程池”
  18. google日历免费短信天气提醒
  19. 零售连锁门店收银系统源码管理商品分类的功能逻辑分享
  20. 在iOS上进行WebP编码是一种怎样的体验?

热门文章

  1. pythoneducoder苹果梨子煮水的功效_苹果梨子煮水的功效是什么呢
  2. linux修复win10启动失败,win10自动修复失败开不了机解决方法
  3. selenium Gird
  4. 第十二章:项目采购管理 - (12.1 规划采购管理)
  5. hadoop java 文件追加_HDFS追加文件
  6. 【教程】如何利用patchrom来编译你自己的MIUI
  7. 程序流程图、N-S图、PAD图
  8. P7939 [B1] Alice Wins (easy version)--题解报告
  9. 软件缺陷的生命周期(二)
  10. 180902 逆向-网鼎(4-dalao)