基于openai做的语音识别

背景

开会通过录屏的方式把会议的视频和语音录下来了,会后想对会议内容进行一个提取,或者是通过录音的方式记录了一段对话,需要对对话过程做个提取
钉钉会议提供了会议记录的一些功能,但是也有可能忘了开启,或者是其它场景下的录音

需求

就是对语音进行文字的转换的操作,这个在国内的一些云厂商都提供了这个,但是费用和开通过程都有点贵,最近正好使用了openai,通过这个处理的费用还好,本篇就是记录这个处理过程的

实现

mp4提取mp3

1
ffmpeg -i video.mp4 -f mp3 -vn myoutput.mp3

这一步就是通过使用ffmpeg对视频内的音频进行提取的操作

对mp3进行分段

1
ffmpeg -i myoutput.mp3 -f segment -segment_time 600 -c copy newoutput%3d.mp3

这一步是把语音文件拆分成多个文件,因为做语音转换的时候,单个文件过大的话,需要特殊处理,单个文件官方是推荐25MB以下

对文件进行处理

安装python的gpt

1
2
yum install python3.9 -y
pip3.9 install openai

处理的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#! /bint/python
# -*- coding: UTF-8 -*-
import os
import openai
import sys

openai.organization = "org-xxxxxxxxxxxxxxxxE"
openai.api_key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxx"

mp3file=sys.argv[1]

audio_file= open("%s" %(mp3file), "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)

#print(transcript)

mystr=str(transcript["text"])

print(mystr)

执行

1
python3.9 translate.py jixiao000.mp3 > jixiao000.txt

更多控制的方法

1
transcript = openai.Audio.transcribe("whisper-1", audio_file,prompt="简体中文",response_format="text")

这个地方通过可变参数的方式接受请求的

/usr/local/lib/python3.9/site-packages/openai/api_resources/audio.py

1
2
3
4
5
6
7
8
9
10
11
def transcribe(
cls,
model,
file,
api_key=None,
api_base=None,
api_type=None,
api_version=None,
organization=None,
**params,
):

上面可以控制返回的是json还是text的,也可以其它格式,以及告诉openai,我们需要的是简体中文的,这个地方不指定的话,有时候会返回的繁体字

curl方式

1
2
curl --request POST --url https://api.openai.com/v1/audio/transcriptions --header 'Authorization: Bearer sk-xxxxxxxxxxxx' --header 'Content-Type: multipart/form-data' --
form file=@jixiaoxxxx.mp3 --form model=whisper-1 --form prompt="简体中文" --form response_format="text"

通过上面的命令行可以直接返回文本

后续

python方式的已经弄清楚控制参数,通过curl方式的目前语法也都清楚,比如希望返回的都是简体中文,这个需要给一个prompt过去,命令行的可以给