【语音算法】使用端点检测和百度语音识别技术实现视频的字幕生成
文章目录
- 前言
- 1. 流程
- 2. 代码
- 3. 字幕生成的其他方式
- 3.1 通过双门限法进行端点检测
- 3.2 通过 SpeechRcognition 进行语音识别
- 3.3 通过autosub包直接生成字幕文件
- 4. 总结
前言
字幕文件中包含很多段信息,每一段表示了一句话的起始结束时间和内容,因此便涉及到了端点检测技术和语音识别技术。
- 端点检测:pydub.silence.detect_nonsilent
- 语音识别:aip.AipSpeech(百度接口)
pip install pydub
pip install baidu-aip
1. 流程
- 视频提取音频
- 对音频进行端点检测,生成一句一句的音频
- 对各句音频进行语音识别
- 整合成字幕srt格式
2. 代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-from moviepy.editor import *
from pydub import *
from aip import AipSpeechvideo_file = r'C:\Users\Lenovo\Desktop\video_sep\test.mp4'
audio_file = r'C:\Users\Lenovo\Desktop\test.wav'
srt_file = r'C:\Users\Lenovo\Desktop\srt\test.srt'## transform to audio
video = VideoFileClip(video_file)
video.audio.write_audiofile(audio_file, ffmpeg_params=['-ar','16000','-ac','1'])## segment
sound = AudioSegment.from_wav(audio_file)
timestamp_list = silence.detect_nonsilent(sound, 700, sound.dBFS*1.3, 1) # look here
for i in range(len(timestamp_list)):d = timestamp_list[i][1] - timestamp_list[i][0]print("Section is :", timestamp_list[i], "duration is:", d)
print('dBFS: {0}, max_dBFS: {1}, duration: {2}, split: {3}'.format(round(sound.dBFS,2),round(sound.max_dBFS,2),sound.duration_seconds,len(timestamp_list)))def format_time(ms):hours = ms // 3600000ms = ms % 3600000minutes = ms // 60000ms = ms % 60000seconds = ms // 1000mseconds = ms % 1000return '{:0>2d}:{:0>2d}:{:0>2d},{:0>3d}'.format(hours, minutes, seconds, mseconds)## 以下在百度AI开放平台申请获得
## https://ai.baidu.com/tech/speech
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)idx = 0
text = []
for i in range(len(timestamp_list)):d = timestamp_list[i][1] - timestamp_list[i][0]data = sound[timestamp_list[i][0]:timestamp_list[i][1]].raw_data## asrresult = client.asr(data, 'pcm', 16000, {'lan': 'zh',}) ## and look hereif result['err_no'] == 0:text.append('{0}\n{1} --> {2}\n'.format(idx, format_time(timestamp_list[i][0]), format_time(timestamp_list[i][1])))text.append( result['result'][0]) #.replace(",", "")text.append('\n')idx = idx + 1# print(format_time(timestamp_list[i][0]/ 1000), "txt is ", result['result'][0])
with open(srt_file,"w") as f:f.writelines(text)
3. 字幕生成的其他方式
3.1 通过双门限法进行端点检测
双门限法的原理是浊音的能量高于清音,清音的过零率高于无声部分。因此,其核心在于:先利用能量,将浊音部分区分出来,再利用过零率,将清音也提取出来,就完成了端点检测。
3.2 通过 SpeechRcognition 进行语音识别
SpeechRcognition 可以说是一款语音识别集合器,共包含了谷歌、必应、IBM等七个识别器:
- recognize_bing():Microsoft Bing Speech
- recognize_google(): Google Web Speech API
- recognize_google_cloud():Google Cloud Speech - requires installation of the google-cloud-speech package
- recognize_houndify(): Houndify by SoundHound
- recognize_ibm():IBM Speech to Text
- recognize_sphinx():CMU Sphinx - requires installing PocketSphinx
- recognize_wit():Wit.ai
基本使用方法如下:
import speech_recognition as sr
r = sr.Recognizer()
test = sr.AudioFile(r'C:\Users\Lenovo\Desktop\test.wav')
with test as source:audio = r.record(source)
r.recognize_google(audio, language='zh-CN', show_all= True)
但好像需要翻墙才能用…
3.3 通过autosub包直接生成字幕文件
autosub是一个直接可以生成字幕文件的python库。基本用法如下:
autosub -S zh-CN -D zh-CN [你的视频/音频文件名]
不过这种方法也需要翻墙,我尝试了更改proxy也没什么效果…
4. 总结
总体而言,字幕生成需要的两个技术块,各有多种实现方法,而我最终选取的pydub加baidu-aip是相对简单并且有效的一种。不过实测效果并没有达到我的期望,因为一开始端点检测就不是十分准确,导致在错误的句子里上下文关系也不太对,语音识别也会有偏差了。更进一步的端点检测方法还得综合考虑能量和过零率,最好还要自定义地加上各个句子长度不能相差太大的限制等等。
【语音算法】使用端点检测和百度语音识别技术实现视频的字幕生成相关推荐
- 语音控制小车运动APP(基于百度语音识别)
语音控制小车运动APP(基于百度语音识别) 项目背景 由于暑期优秀本科生项目需求,开发了一款控制机器人行走的APP,具体要求如下: 在第一个界面(连接界面)实现Socket连接,连接成功则跳转到下一个 ...
- 百度语音识别技术负责人李先刚:如何利用Deep CNN大幅提升识别准确率?
百度语音识别技术负责人李先刚:如何利用Deep CNN大幅提升识别准确率? 机器之心mp 2016-11-04 14:24:34 技术 百度 阅读(440) 评论(0) 机器之心原创 作者:赵云 ...
- 百度语音识别技术突破 巨头崛起
语音识别行业正面临新一轮的洗牌. 早在两年前,大家的普遍认识是语音识别领域将会催生出巨头公司.所以当苹果.Google.百度.三星和微软提出要收购当时全球语音领域的老大Nuance的时候,Nuance ...
- 苹果CMSv10首款原创支持百度mip技术自适应视频模板
苹果CMSv10首款原创支持百度mip技术自适应视频模板 苹果cms10好看的模板自适应_苹果cmsv10高端模板_苹果cmsv10简洁模板 首款支持DIY的宽屏模板,彰显大气风格,完美自适应支持手机 ...
- 苹果CMSv10首涂第十六套首款原创支持百度mip技术自适应视频模板
苹果CMSv10首涂第十六套首款原创支持百度mip技术自适应视频模板 首涂[第十六套]苹果CMSv10首款原创支持百度mip技术自适应视频模板 首款支持mip加速技术的模板,样式简洁速度快采用最新百度 ...
- 【语音识别】基于matlab语音分帧+端点检测+pitch提取+DTW算法歌曲识别【含Matlab源码 1057期】
⛄一.DTW简介 Dynamic Time Warping(DTW)诞生有一定的历史了(日本学者Itakura提出),它出现的目的也比较单纯,是一种衡量两个长度不同的时间序列的相似度的方法.应用也比较 ...
- vad算法matlab,语音信号的端点检测的matlab代码(子带谱熵法法)
这个是利用子带谱熵法进行语音信号端点检测的代码,给出了参考文献,有兴趣时可以看一下,发博客以作备忘!!! function [voiceseg,vsl]=vad_1(s,fs) %该函数采用子带谱熵法 ...
- 【语音算法】语音的预处理--端点检测
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 引言 方法1 方法2 总结 参考文献 引言 语音的实际应用场景中,经常是给定一段包含多句句子的长语音,这就产生了语音端点检测 ...
- 语音识别端点检测matlab,关于语音识别的端点检测问题
这是我的端点检测程序,语音是6个连续字,执行后却只检测了一个字的端点,求大神指点哪里的错 %读入语音 [x,fs,bits]=wavread('D:\voice\openleft.wav'); %增益 ...
最新文章
- list-style 属性 2015-11-5
- 触发transition的几种方式--转
- 【Android FFMPEG 开发】FFMPEG 方法中指针类型参数说明 ( 一维指针类型参数 | 二维指针类型参数 )
- 你必须知道的28个HTML5特征、窍门和技术
- 蓝桥学院2019算法题1.3
- Sql Server字符串函数
- C语言以字符串的形式读写文件
- iOS一个简单的设置圆角不引起性能问题的分类
- H264 SPS分析
- AUTOCAD——LEN命令
- ffmpeg 10bit 8bit yuv格式转换
- PHP获取以毫秒级为单位获取当前时间
- linux下filezilla使用教程,FTP工具filezilla使用教程
- 美通企业日报 | 广州塔开业至今迎游客近1557万人次;居然之家成功借壳上市
- 查询python答案的app_2020知到APP大数据分析的python基础最新免费答案查询
- 统计一个字符串中大写字母,小写字母,以及数字的个数。
- RSA加密算法学习过程
- 线性代数-MIT 18.06-7(a)
- 《一本书读懂财报》:系统的输入与输出的体现
- 计算机操作系统只有windows对不对,计算机应用基础 第二章 操作系统
热门文章
- 国内网页设计网站网址大全[问题点数:0分,结帖人:beijin2008]
- 2013年各大小IT公司待遇,绝对真实,一线数据!(初版)
- Python_机器学习_常用科学计算库_第6章_ Seaborn+综合案例
- Dynamic Slicing for Deep Neural Networks
- 【5G系列】MICO学习总结(3)
- Java算法之冒泡算法
- 实时语义分割网络 BiSeNet(附代码解读)
- 【web渗透】appscan 免费版下载
- ajax跨域请求(CORS实现)
- Linux 系统Buffers与Cached的区别