文章目录

  • 前言
  • 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是相对简单并且有效的一种。不过实测效果并没有达到我的期望,因为一开始端点检测就不是十分准确,导致在错误的句子里上下文关系也不太对,语音识别也会有偏差了。更进一步的端点检测方法还得综合考虑能量和过零率,最好还要自定义地加上各个句子长度不能相差太大的限制等等。

【语音算法】使用端点检测和百度语音识别技术实现视频的字幕生成相关推荐

  1. 语音控制小车运动APP(基于百度语音识别)

    语音控制小车运动APP(基于百度语音识别) 项目背景 由于暑期优秀本科生项目需求,开发了一款控制机器人行走的APP,具体要求如下: 在第一个界面(连接界面)实现Socket连接,连接成功则跳转到下一个 ...

  2. 百度语音识别技术负责人李先刚:如何利用Deep CNN大幅提升识别准确率?

     百度语音识别技术负责人李先刚:如何利用Deep CNN大幅提升识别准确率? 机器之心mp 2016-11-04 14:24:34 技术 百度 阅读(440) 评论(0) 机器之心原创 作者:赵云 ...

  3. 百度语音识别技术突破 巨头崛起

    语音识别行业正面临新一轮的洗牌. 早在两年前,大家的普遍认识是语音识别领域将会催生出巨头公司.所以当苹果.Google.百度.三星和微软提出要收购当时全球语音领域的老大Nuance的时候,Nuance ...

  4. 苹果CMSv10首款原创支持百度mip技术自适应视频模板

    苹果CMSv10首款原创支持百度mip技术自适应视频模板 苹果cms10好看的模板自适应_苹果cmsv10高端模板_苹果cmsv10简洁模板 首款支持DIY的宽屏模板,彰显大气风格,完美自适应支持手机 ...

  5. 苹果CMSv10首涂第十六套首款原创支持百度mip技术自适应视频模板

    苹果CMSv10首涂第十六套首款原创支持百度mip技术自适应视频模板 首涂[第十六套]苹果CMSv10首款原创支持百度mip技术自适应视频模板 首款支持mip加速技术的模板,样式简洁速度快采用最新百度 ...

  6. 【语音识别】基于matlab语音分帧+端点检测+pitch提取+DTW算法歌曲识别【含Matlab源码 1057期】

    ⛄一.DTW简介 Dynamic Time Warping(DTW)诞生有一定的历史了(日本学者Itakura提出),它出现的目的也比较单纯,是一种衡量两个长度不同的时间序列的相似度的方法.应用也比较 ...

  7. vad算法matlab,语音信号的端点检测的matlab代码(子带谱熵法法)

    这个是利用子带谱熵法进行语音信号端点检测的代码,给出了参考文献,有兴趣时可以看一下,发博客以作备忘!!! function [voiceseg,vsl]=vad_1(s,fs) %该函数采用子带谱熵法 ...

  8. 【语音算法】语音的预处理--端点检测

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 引言 方法1 方法2 总结 参考文献 引言 语音的实际应用场景中,经常是给定一段包含多句句子的长语音,这就产生了语音端点检测 ...

  9. 语音识别端点检测matlab,关于语音识别的端点检测问题

    这是我的端点检测程序,语音是6个连续字,执行后却只检测了一个字的端点,求大神指点哪里的错 %读入语音 [x,fs,bits]=wavread('D:\voice\openleft.wav'); %增益 ...

最新文章

  1. list-style 属性 2015-11-5
  2. 触发transition的几种方式--转
  3. 【Android FFMPEG 开发】FFMPEG 方法中指针类型参数说明 ( 一维指针类型参数 | 二维指针类型参数 )
  4. 你必须知道的28个HTML5特征、窍门和技术
  5. 蓝桥学院2019算法题1.3
  6. Sql Server字符串函数
  7. C语言以字符串的形式读写文件
  8. iOS一个简单的设置圆角不引起性能问题的分类
  9. H264 SPS分析
  10. AUTOCAD——LEN命令
  11. ffmpeg 10bit 8bit yuv格式转换
  12. PHP获取以毫秒级为单位获取当前时间
  13. linux下filezilla使用教程,FTP工具filezilla使用教程
  14. 美通企业日报 | 广州塔开业至今迎游客近1557万人次;居然之家成功借壳上市
  15. 查询python答案的app_2020知到APP大数据分析的python基础最新免费答案查询
  16. 统计一个字符串中大写字母,小写字母,以及数字的个数。
  17. RSA加密算法学习过程
  18. 线性代数-MIT 18.06-7(a)
  19. 《一本书读懂财报》:系统的输入与输出的体现
  20. 计算机操作系统只有windows对不对,计算机应用基础 第二章 操作系统

热门文章

  1. 国内网页设计网站网址大全[问题点数:0分,结帖人:beijin2008]
  2. 2013年各大小IT公司待遇,绝对真实,一线数据!(初版)
  3. Python_机器学习_常用科学计算库_第6章_ Seaborn+综合案例
  4. Dynamic Slicing for Deep Neural Networks
  5. 【5G系列】MICO学习总结(3)
  6. Java算法之冒泡算法
  7. 实时语义分割网络 BiSeNet(附代码解读)
  8. 【web渗透】appscan 免费版下载
  9. ajax跨域请求(CORS实现)
  10. Linux 系统Buffers与Cached的区别