python实现提取视频里的语音转换为文字

最近拿到很多教学视频,需要在一周后考核视频里的内容,时间紧,任务重,一个个看时间上不允许,不看吧,考核过不去,我就在想,能不能把视频里的语音转换成文字,看文字效率高一些,而且找到重点之后再去看视频,效果也应该会好,python大法好,这个也是可以用python加百度智能云接口来实现的,百度智能云的语音识别技术识别率已经很高了,就避免了我们自己训练模型了,拿来用就行,而且官方提供的测试语音数量已经够我们用了,不需要购买服务,真是太赞了,人生苦短,我用python

备注:代码是大神分享在g i t h u b上面的,我算是转载他的

接下来上代码,作为一个备份

import os
from ffmpy3 import FFmpeg
from pydub.audio_segment import AudioSegment
from pymediainfo import MediaInfo
from aip import AipSpeech


def vedio_to_pcm(file):
    inputfile = file
    file_type = file.split('.')[-1]
    outputfile = inputfile.replace(file_type, 'pcm')
    ff = FFmpeg(executable='ffmpeg',
                global_options=['-y'],
                inputs={inputfile: None},
                outputs={outputfile: '-acodec pcm_s16le -f s16le -ac 1 -ar 16000'})
    ff.cmd
    ff.run()
    return outputfile

def vedio_to_wav(file):
    inputfile = file
    file_type = file.split('.')[-1]
    outputfile = inputfile.replace(file_type, 'wav')
    ff = FFmpeg(executable='ffmpeg',
                global_options=['-y'],
                inputs={inputfile: None},
                outputs={outputfile: None})
    ff.cmd
    ff.run()
    return outputfile

def wav_split(path):
    file = vedio_to_wav(path)
    main_wav_path=file
    path=os.path.dirname(file)+'/'
    sound_len=int(MediaInfo.parse(main_wav_path).to_data()['tracks'][0]['duration'])
    sound=AudioSegment.from_mp3(main_wav_path)
    part_file_list=list()
    min_ = sound_len/1000
    if min_ > 60:
        n=int(min_//60)
        print(type(n))
        if n*60<min_:
            n+=1
    for i in range(n):
        start_time=i*60*1000+1
        end_time=(i+1)*60*1000
        if end_time>sound_len*1000:
            end_time=sound_len*1000
        word=sound[start_time:end_time]
        part_file_name='part_sound_{}.wav'.format(i)
        word.export(part_file_name,format="wav")
        part_file_list.append(part_file_name)
    return part_file_list

def BAIDU_ASR(wavfile):
   
    pcm_file = vedio_to_pcm(wavfile)
    def get_file_content(file):
        with open(file,'rb') as fp:
            return fp.read()

    """ 你的 APPID AK SK """
    APP_ID = ''
    API_KEY = ''
    SECRET_KEY = ''
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    result = client.asr(get_file_content(pcm_file),'wav',16000,{'dev_pid':1537})
    return result

def perfect_path(path,list_):
    tmp_path = []
    for i in list_:
        tt = path+'\\'+ i
        tmp_path.append(tt)
    return tmp_path

if __name__ == "__main__":
    tmp = []
    #要提取文稿的视频路径
    path = 'C:\\Users\\25801路西\\Desktop\\video'
    name_list = os.listdir(path)
    tmp_path = perfect_path(path,name_list)
    print(tmp_path)
    for i in tmp_path:
        print(i)
        waiting_list = wav_split(i)
        output = open(i+'.txt','w',encoding='gbk')
        for i in waiting_list:
            tmp = BAIDU_ASR(i)['result'][0]
            output.write(tmp)
        output.close()
        remove_pcm = []
        for i in waiting_list:
            remove_pcm.append(i.split('.')[0]+'.pcm')
            os.remove(i)
        for i in remove_pcm:
            os.remove(i)

这个是需要一个软件配合的,源文件我发在百度云上了,拿来就能用,传送门

链接:https://pan.baidu.com/s/1BeZptdds0PNfUfQ6dh1CMg
提取码:wob8
文件里包含这些东西
在这里插入图片描述
识别效果也很不错,我就不上测试图了,祝大家用的愉快,希望能够帮到有需要的朋友,也能给我备份一下

  • 9
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
### 回答1: 要用Python实现视频字幕提取,需要用到一些第三方库。以下是一种使用PythonFFmpeg和pytesseract的方法: 1.安装FFmpeg和pytesseract 首先需要安装FFmpeg和pytesseract。在Windows上,可以从官方网站下载FFmpeg二进制文件并将其添加到PATH环境变量中。要安装pytesseract,可以使用pip: ``` pip install pytesseract ``` 2.导入所需库 在Python中,需要导入一些库以便进行视频字幕提取。这些库包括cv2、pytesseract、numpy和subprocess。您可以使用以下代码导入这些库: ```python import cv2 import pytesseract import numpy as np import subprocess ``` 3.提取视频帧 使用OpenCV(cv2库)加载视频文件并读取每个帧。可以使用以下代码: ```python vidcap = cv2.VideoCapture('video.mp4') success,image = vidcap.read() count = 0 while success: cv2.imwrite("frame%d.jpg" % count, image) # save frame as JPEG file success,image = vidcap.read() count += 1 ``` 上面的代码将读取名为“video.mp4”的视频文件,并将其帧保存为图像文件。将其保存到当前目录下,以图像序列的形式命名为“frame0.jpg”、“frame1.jpg”等。 4.使用pytesseract提取字幕 使用pytesseract库从每个帧中提取字幕。可以使用以下代码: ```python for i in range(count): img = cv2.imread('frame%d.jpg' % i) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret,thresh1 = cv2.threshold(gray,200,255,cv2.THRESH_BINARY) kernel = np.ones((1,1),np.uint8) img = cv2.dilate(thresh1,kernel,iterations = 1) img = cv2.erode(img,kernel,iterations = 1) out_below = pytesseract.image_to_string(img) print("frame ", i, " : \n") print(out_below) ``` 上面的代码将循环每个帧,将其加载为图像,将其转换为灰度图像,二值化处理,扩张和腐蚀处理以增强文本。然后,它使用pytesseract将文本从帧中提取出来,并将其打印到控制台中。 5.删除生成的图像文件 最后,需要删除生成的图像文件。可以使用以下代码: ```python for i in range(count): file = "frame%d.jpg" % i subprocess.run(['rm', file]) ``` 上面的代码将循环每个帧文件,并使用subprocess库中的rm命令删除它们。 总结 通过上述步骤,我们可以使用Python和第三方库实现视频字幕提取。您可以使用其他方法来进一步优化提取文本的过程,例如改变字幕区域的大小和位置,使用不同的图像处理技术等。 ### 回答2: 要实现视频字幕提取,可以使用Python中的一些库和工具来完成。以下是一种实现方法: 1. 安装所需库:使用Python的pip命令安装所需库,包括OpenCV、pytesseract和Pillow。 2. 导入所需库:在Python脚本中导入所需的库和模块。 3. 读取视频文件:使用OpenCV库的VideoCapture函数读取视频文件。可以使用视频的文件路径作为参数,返回一个视频对象。 4. 视频处理:在循环中,逐帧读取视频,对每一帧进行处理。 5. 图像处理:将每一帧转换为灰度图像,以便于后续的文字提取和识别。 6. 提取字幕:使用pytesseract库的image_to_string函数将图像转换文字。可以设置适当的参数,例如语言和字符集,以获取更好的结果。 7. 文字处理:对提取文字进行必要的处理,例如去除空格、标点和其他噪音。可以使用Python的字符串操作和正则表达式来完成。 8. 字幕保存:将处理后的字幕保存到文件中,以便后续使用或分析。 9. 释放资源:在处理完成后,记得释放所有资源,包括关闭视频对象和清理内存。 10. 运行脚本:使用Python解释器运行脚本,并观察输出和保存的字幕文件。 请注意,实际实现中可能会遇到一些挑战和问题,例如视频压缩格式、字幕样式和位置的变化等。因此,根据具体情况和需求进行适当的调整和优化。 ### 回答3: 要使用Python实现视频字幕提取,可以按照以下步骤进行操作: 1. 导入所需的库:安装并导入`moviepy`库,这是一个处理视频的强大库。 2. 加载视频文件:使用`VideoFileClip`函数加载视频文件,例如`video = VideoFileClip("video.mp4")`。 3. 提取视频中的音频:使用`audio = video.audio`提取视频的音频部分。 4. 将音频转换文字:使用语音转文本的API,如百度云、腾讯云或Google Cloud API,将音频转换文字。调用相应的API,并传入音频文件,获得文字结果。例如,使用百度云API:`result = baidu_api.audio_to_text(audio)`。 5. 处理文字结果:根据API返回的结果,可以对文字进行处理和清洗。例如删除标点符号、过滤无关的字幕等。 6. 输出字幕:将处理后的文字结果保存为字幕文件,如SRT格式或VTT格式。可以使用库如`pysrt`或`webvtt-py`来生成字幕文件。 7. 完整代码示例: ```python from moviepy.editor import VideoFileClip import baidu_api # 假设有一个baidu_api.py文件,包含了百度云API的调用函数 # 加载视频文件 video = VideoFileClip("video.mp4") # 提取音频 audio = video.audio # 将音频转换文字 result = baidu_api.audio_to_text(audio) # 处理文字结果 processed_text = text_processing(result) # 输出字幕文件 output_subtitles(processed_text) ``` 请注意,在实际操作中,你需要有一个有效的语音转文本的API,并将其与Python代码结合使用,以完成音频到文字转换
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值