美文网首页
2020-02-25 python使用ffmpeg、speech

2020-02-25 python使用ffmpeg、speech

作者: 菜菜笛 | 来源:发表于2020-02-25 16:58 被阅读0次

    应用场景:

    最近在看田连元老先生的《水浒传》,总感觉篇篇锦锈字字珠玑,遇上精彩之处,总想要搞成文字资料保存下来,奈何没有字幕。作为一只懒得冒泡的程序猿,一边听一边打字,是不可能的,这辈子都不可能。那怎么办呢?当然是写代码喽。

    简单说明:

    任务一:ffmpeg进行音频分离、分割
    参考和感谢:https://blog.csdn.net/weixin_33890499/article/details/88708622
    任务二:ssh登录Cygwin;speech-vad-demo-master
    参考和感谢:https://www.jianshu.com/p/a6add655d873
    参考和感谢:https://blog.csdn.net/qq_39112101/article/details/94175083
    参考和感谢:https://www.jianshu.com/p/0bf4b2d2bf89
    任务三:百度AI语音识别接口
    参考和感谢:https://www.jianshu.com/p/7b738a469033

    python代码:

    代码获取254.flv,自12分13秒开始,时长为37秒的音频,将这段音频转换成文字

    # -*- coding: GBK -*-
    import os
    import paramiko
    from aip import AipSpeech
    # 任务一:以pcm的格式,获取视频文件的音轨,并截取指定的时间段。最后将文件复制到speech-vad-demo-master中
    vad_home=r'D:\cygwin64\cygwin64_Root\home\caicaidi\speech-vad-demo-master'
    video_name = '254.flv'
    #开始时间
    start_time = '00:12:13'
    #截取的时间长度
    time_span = '00:00:37'
    def get_pcm(video_name,start_time,time_span):
        # 分离视频的音频为pcm格式
        command_video_to_wav = 'ffmpeg -y -i %s -f s16le -ac 1 -ar 16000 output.pcm'%(video_name)
        os.system(command_video_to_wav)
        #分割pcm
        command_cut_wav = 'ffmpeg -y -f s16be -ac 1 -ar 16000 -acodec pcm_s16le -i output.pcm -ss %s -t %s -f s16be -ac 1 -ar 16000 -acodec pcm_s16le output_cut.pcm'%(start_time,time_span)
        os.system(command_cut_wav)
        command_copy = r'copy output_cut.pcm %s\pcm\16k_1.pcm /y'%(vad_home)
        os.system(command_copy)
    
    # 任务二:使用speech-vad-demo-master处理任务一获得的文件,得到多个长度在10s到60s的文件
    def ssh_connect(hostname,username,password,port=22):
        #创建一个ssh的客户端,用来连接服务器
        ssh = paramiko.SSHClient()
        #创建一个ssh的白名单
        know_host = paramiko.AutoAddPolicy()
        #加载创建的白名单
        ssh.set_missing_host_key_policy(know_host)
        #连接服务器
        ssh.connect(hostname,port,username,password)
        return ssh
    def eve_vad_demo():
        ssh = ssh_connect('127.0.0.1','caicaidi','123465')
        #清空output_pcm
        stdin,stdout,stderr = ssh.exec_command("cd /home/caicaidi/speech-vad-demo-master/output_pcm;rm *")
        #执行vad-demo.exe。注意:"./home/caicaidi/speech-vad-demo-master/vad-demo.exe"是无法正常执行的
        stdin,stdout,stderr = ssh.exec_command("cd /home/caicaidi/speech-vad-demo-master;./vad-demo.exe")
        #stdout 标准格式的输出,是一个读权限的文件对象
        print(stdout.read().decode())
    
    # 任务三:调用百度AI的语音识别接口,识别任务二获得的文件
    def get_client():
        APP_ID = '百度应用APP_ID '
        API_KEY = '百度应用API_KEY '
        SECRET_KEY = '百度应用SECRET_KEY '
        client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
        return client
    # 读取文件
    def get_file_content(filePath):
        with open(filePath, 'rb') as fp:
            return fp.read()
    
    if __name__ == '__main__':
        get_pcm(video_name,start_time,time_span)
        eve_vad_demo()
        client = get_client()
        output_pcm_path = r"D:/cygwin64/cygwin64_Root/home/caicaidi/speech-vad-demo-master/output_pcm/"
        dirs = os.listdir(output_pcm_path)
        for file in dirs:
            fileName = str(file)
            if fileName.endswith('A.pcm'):
                pcm_path = output_pcm_path+fileName
                data = client.asr(get_file_content(pcm_path), 'pcm', 16000, {'dev_pid': 1537})
                print(data['result'])
    
    

    结果:

    image.png

    虽然会多几个字少几个字的,还将“眨么眨么眼”整成了”咱们咱们演“。不过啊,已经很好啦。

    其他:

    工作目录: image.png

    speech-vad-demo-master所在的目录:
    D:/cygwin64/cygwin64_Root/home/caicaidi/speech-vad-demo-master/

    相关文章

      网友评论

          本文标题:2020-02-25 python使用ffmpeg、speech

          本文链接:https://www.haomeiwen.com/subject/qqwtchtx.html