利⽤python将长视频、长语⾳转换成⽂字教程,⾮常好⽤原本⾃⼰想弄⼀个语⾳转⽂本的,但是发现很多博客都说的不是⾃⼰想要的,原因有以下⼏点:1、因为百度接⼝⽀持的语⾳是pcm格式,⽽⾃⼰的是.mp3格式的⽂件。
2、百度只⽀持60s内的⽂件格式,⽽⾃⼰想要的是长⽂件,并且希望能切割成60s内,满⾜百度语⾳识别的要求。
3、该⽂件能够⽣成.srt⽂件格式,这个也正是⾃⼰所想要的。所以花了好⼏天终于到了⼀篇⾮常完美的博客,然后和⼤家⼀起分享,博客地址如下:
该博客针对的是mp3⽂件转成.srt⽂件的⽂本,⾸先放图给⼤家查看
如果你想通过视频⽂件来进⾏转换,可以将视频⽂件转成mp3⽂件,地址可以看我的上⼀篇博客
对于百度的APPID以及KEY_ID等获取,可以参考下⾯地址页⾯的控制台进⾏注册
注册完毕,可以点击下⾯页⾯的语⾳技术。然后进⾏创建任务,然后填写相关信息。最终会得到第⼆章图的页⾯。然后⼤家可以使⽤代码进⾏语⾳识别啦,
注意:这个百度接⼝不是免费的哦,后期是要钱的。。
主要代码如下:
import base64
import json
import os
import time
import shutil
import requests
class BaiduVoiceToTxt():
# 初始化函数
def __init__(self):
# 定义要进⾏切割的pcm⽂件的位置。speech-vad-demo固定好的,没的选
self.pcm_path = ".\\speech-vad-demo\\pcm\\16k_1.pcm"
# 定义pcm⽂件被切割后,分割成的⽂件输出到的⽬录。speech-vad-demo固定好的,没的选
self.output_pcm_path = ".\\speech-vad-demo\\output_pcm\\"
# 百度AI接⼝只接受pcm格式,所以需要转换格式
# 此函数⽤于将要识别的mp3⽂件转换成pcm格式,并输出为.\speech-vad-demo\pcm\16k_1.pcm
def change_file_format(self,filepath):
file_name = filepath
# 如果.\speech-vad-demo\pcm\16k_1.pcm⽂件已存在,则先将其删除
if os.path.isfile(f"{self.pcm_path}"):
# 调⽤系统命令,将⽂件转换成pcm格式,并输出为.\speech-vad-demo\pcm\16k_1.pcm
change_file_format_command = f".\\ffmpeg\\bin\\ -y -i {file_name} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {self.pcm_path}" os.system(change_file_format_command)
# 百度AI接⼝最长只接受60秒的⾳视,所以需要切割
# 此函数⽤于将.\speech-vad-demo\pcm\16k_1.pcm切割
def devide_video(self):
# 如果切割输出⽬录.\speech-vad-demo\output_pcm\已存在,那其中很可能已有⽂件,先将其清空
# 清空⽬录的⽂件是先删除,再创建
if os.path.isdir(f"{self.output_pcm_path}"):
<(f"{self.output_pcm_path}")
time.sleep(1)
os.mkdir(f"{self.output_pcm_path}")
# 使⽤相对路径.\pcm和.\output_pcm,所以先要将当前⼯作⽬录切换到.\speech-vad-demo下不然不到⽂件
os.chdir(".\\speech-vad-demo\\")
# 直接执⾏.\,其默认会将.\pcm\16k_1.pcm⽂件切割并输出到.\output_pcm⽬录下
devide_video_command = ".\\"
os.system(devide_video_command)
# 切换回⼯作⽬录
os.chdir("..\\")
# 此函数⽤于将.\speech-vad-demo\output_pcm\下的⽂件的⽂件名的时间格式化成0:00:00,000形式
def format_time(self, msecs):
# ⼀个⼩时毫秒数
verilog case语句用法hour_msecs = 60 * 60 * 1000
# ⼀分钟对应毫秒数
minute_msecs = 60 * 1000
# ⼀秒钟对应毫秒数
second_msecs = 1000
# ⽂件名的时间是毫秒需要先转成秒。+500是为了四舍五⼊,//是整除
# msecs = (msecs + 500) // 1000
# msecs = (msecs + 500) // 1000
# ⼩时
sql sever2012hour = msecs // hour_msecs
csocket编程详解网站源码出售想页湖南岚鸿联系if hour < 10:
hour = f"0{hour}"
# 扣除⼩时后剩余毫秒数
hour_left_msecs = msecs % hour_msecs
# 分钟
minute = hour_left_msecs // minute_msecs
# 如果不⾜10分钟那在其前补0凑成两位数格式
if minute < 10:
python入门教程视屏minute = f"0{minute}"
# 扣除分钟后剩余毫秒数
minute_left_msecs = hour_left_msecs % minute_msecs
# 秒
second = minute_left_msecs // second_msecs
# 如果秒数不⾜10秒,⼀样在其前补0凑⾜两位数格式
if second < 10:
second = f"0{second}"
# 扣除秒后剩余毫秒数
second_left_msecs = minute_left_msecs % second_msecs
# 如果不⾜10毫秒或100毫秒,在其前补0凑⾜三位数格式
if second_left_msecs < 10:
second_left_msecs = f"00{second_left_msecs}"
elif second_left_msecs < 100:
second_left_msecs = f"0{second_left_msecs}"
# 格式化成00:00:00,000形式,并返回
time_format = f"{hour}:{minute}:{second},{second_left_msecs}"
return time_format
# 此函数⽤于申请访问ai接⼝的access_token
def get_access_token(self):
# 此变量赋值成⾃⼰API Key的值
client_id = 'f3wT23Otc8jXlDZ4HGtS4jfT'
# 此变量赋值成⾃⼰Secret Key的值
client_secret = 'YPPjW3E0VGPUOfZwhjNGVn7LTu3hwssj'
auth_url = 'aip.baidubce/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret
response_at = (auth_url)
# 以json格式读取响应结果
json_result = json.loads()
# 获取access_token
access_token = json_result['access_token']
return access_token
易语言脚本编程助手# 此函数⽤于将.\speech-vad-demo\output_pcm\下的单个⽂件由语⾳转成⽂件
def transfer_voice_to_srt(self,access_token,filepath):
# 百度语⾳识别接⼝
url_voice_ident = "vop.baidu/server_api"
# 接⼝规范,以json格式post数据
headers = {
'Content-Type': 'application/json'
}
# 打开pcm⽂件并读取⽂件内容
pcm_obj = open(filepath,'rb')
pcm_content_base64 = base64.b64encode(ad())
pcm_obj.close()
# 获取pcm⽂件⼤⼩
pcm_content_len = size(filepath)
# 接⼝规范,则体函义见官⽅⽂件,值得注意的是cuid和speech两个参数的写法
post_data = {
"format": "pcm",
"rate": 16000,
"dev_pid": 1737,
"channel": 1,
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论