最近在做视频转文本的工作,遇到了不少问题,记录一下。
本博客包括以下内容:
1.如何将视频转换成音频
2.如何调用科大讯飞API实现音频转文字
首先,视频转文本,如果调用科大讯飞API的话,那么是需要先将视频提取成音频,这里很简单,python几行代码就可以搞定。

from moviepy.editor import AudioFileClipmy=AudioFileClip("myvideo.mp4") # 你的视频地址
my.write_audiofile("my.mp3") # 设置生成的音频

安装moviepy即可,建议使用conda。运行没问题那么恭喜你!

如果出现和我类似的问题,请看下文:

网上这个问题似乎很少,出现这个问题,建议先检查自己的anaconda是否曾多次安装,但之前的环境变量没有更改。
其次,检查自己的环境变量是否如下,少了就添加
如果还是有问题,打开anaconda prompt,将numpy重新卸载安装,可能是numpy版本冲突了。

conda uninstall numpy
conda install numpy

再去运行一下,会发现之前no module named "numpy.typing"没有了。如果你运气好,到这一步就会成功生成音频文件。不得不说,有时候改bug就是玄学。
另外,如果是刚入坑的同学,切记环境变量不要写中文,否则很多包调用的时候都会出问题。
成功以后:

接着我们可以看到已经生成了完整的音频文件
完成视频转音频,那就可以继续转文字。记得去注册一个科大讯飞的账号,可以免费使用一小段时间。
科大讯飞:科大讯飞
![请添加图片描述](https://img-blog.csdnimg.cn/80ae785ad73d44a6a3c796de286e6154.png
申请成功以后复制自己的id和secret即可。

# -*- coding: utf-8 -*-import base64
import hashlib
import hmac
import json
import os
import time
import re
import requests
from moviepy.editor import AudioFileClipmy=AudioFileClip("myvideo.mp4")
my.write_audiofile("my.mp3")lfasr_host = 'http://raasr.xfyun.cn/api'api_prepare = '/prepare'
api_upload = '/upload'
api_merge = '/merge'
api_get_progress = '/getProgress'
api_get_result = '/getResult'
file_piece_sice = 10485760lfasr_type = 0
has_participle = 'false'
has_seperate = 'true'
max_alternatives = 0
suid = ''class SliceIdGenerator:"""slice id生成器"""def __init__(self):self.__ch = 'aaaaaaaaa`'def getNextSliceId(self):ch = self.__chj = len(ch) - 1while j >= 0:cj = ch[j]if cj != 'z':ch = ch[:j] + chr(ord(cj) + 1) + ch[j + 1:]breakelse:ch = ch[:j] + 'a' + ch[j + 1:]j = j - 1self.__ch = chreturn self.__chclass RequestApi(object):def __init__(self, appid, secret_key, upload_file_path):self.appid = appidself.secret_key = secret_keyself.upload_file_path = upload_file_pathdef gene_params(self, apiname, taskid=None, slice_id=None):appid = self.appidsecret_key = self.secret_keyupload_file_path = self.upload_file_pathts = str(int(time.time()))m2 = hashlib.md5()m2.update((appid + ts).encode('utf-8'))md5 = m2.hexdigest()md5 = bytes(md5, encoding='utf-8')signa = hmac.new(secret_key.encode('utf-8'), md5, hashlib.sha1).digest()signa = base64.b64encode(signa)signa = str(signa, 'utf-8')file_len = os.path.getsize(upload_file_path)file_name = os.path.basename(upload_file_path)param_dict = {}if apiname == api_prepare:slice_num = int(file_len / file_piece_sice) + (0 if (file_len % file_piece_sice == 0) else 1)param_dict['app_id'] = appidparam_dict['signa'] = signaparam_dict['ts'] = tsparam_dict['file_len'] = str(file_len)param_dict['file_name'] = file_nameparam_dict['slice_num'] = str(slice_num)elif apiname == api_upload:param_dict['app_id'] = appidparam_dict['signa'] = signaparam_dict['ts'] = tsparam_dict['task_id'] = taskidparam_dict['slice_id'] = slice_idelif apiname == api_merge:param_dict['app_id'] = appidparam_dict['signa'] = signaparam_dict['ts'] = tsparam_dict['task_id'] = taskidparam_dict['file_name'] = file_nameelif apiname == api_get_progress or apiname == api_get_result:param_dict['app_id'] = appidparam_dict['signa'] = signaparam_dict['ts'] = tsparam_dict['task_id'] = taskidreturn param_dictdef gene_request(self, apiname, data, files=None, headers=None):response = requests.post(lfasr_host + apiname, data=data, files=files, headers=headers)result = json.loads(response.text)if result["ok"] == 0:if apiname=='/getResult':results=re.findall(r"\"onebest\":\"(.+?)\",",result['data'])print(results)upload_file_path = self.upload_file_pathwith open(str(upload_file_path)+".txt", "a", encoding='utf-8') as f:for i in results:f.write(i)print("{} success:".format(apiname) + str(result))return resultelse:print("{} error:".format(apiname) + str(result))exit(0)return resultdef prepare_request(self):return self.gene_request(apiname=api_prepare,data=self.gene_params(api_prepare))def upload_request(self, taskid, upload_file_path):file_object = open(upload_file_path, 'rb')try:index = 1sig = SliceIdGenerator()while True:content = file_object.read(file_piece_sice)if not content or len(content) == 0:breakfiles = {"filename": self.gene_params(api_upload).get("slice_id"),"content": content}response = self.gene_request(api_upload,data=self.gene_params(api_upload, taskid=taskid,slice_id=sig.getNextSliceId()),files=files)if response.get('ok') != 0:print('upload slice fail, response: ' + str(response))return Falseprint('upload slice ' + str(index) + ' success')index += 1finally:'file index:' + str(file_object.tell())file_object.close()return Truedef merge_request(self, taskid):return self.gene_request(api_merge, data=self.gene_params(api_merge, taskid=taskid))def get_progress_request(self, taskid):return self.gene_request(api_get_progress, data=self.gene_params(api_get_progress, taskid=taskid))def get_result_request(self, taskid):return self.gene_request(api_get_result, data=self.gene_params(api_get_result, taskid=taskid))def all_api_request(self):pre_result = self.prepare_request()taskid = pre_result["data"]self.upload_request(taskid=taskid, upload_file_path=self.upload_file_path)self.merge_request(taskid=taskid)while True:progress = self.get_progress_request(taskid)progress_dic = progressif progress_dic['err_no'] != 0 and progress_dic['err_no'] != 26605:print('task error: ' + progress_dic['failed'])returnelse:data = progress_dic['data']task_status = json.loads(data)if task_status['status'] == 9:print('task ' + taskid + ' finished')breakprint('The task ' + taskid + ' is in processing, task status: ' + str(data))time.sleep(20)self.get_result_request(taskid=taskid)if __name__ == '__main__':# 这里记得输入自己的id和keyapi = RequestApi(appid="***", secret_key="***", upload_file_path=r"my.mp3")api.all_api_request()

成功后:
生成的txt文件

python实现视频转文字相关推荐

  1. python 替换array中的值_利用Python提取视频中的字幕(文字识别)

    我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...

  2. 基于图像识别和文字识别用 Python 提取视频字幕

    基于图像识别和文字识别用 Python 提取视频字幕 本文介绍使用 Python 基于图像识别提取视频中的字幕,并使用文字识别将字幕转为纯文本.本文以权力的游戏第一季第一集作为示例. 本文主要使用 O ...

  3. python提取视频字幕_利用Python提取视频中的字幕(文字识别)

    我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...

  4. access数据放到list中_利用Python提取视频中的字幕(文字识别)

    我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...

  5. ffmpeg m4a 转pcm_FFmpeg提取视频音频python将音频转文字

    ffmpeg提取视频中的音频-pcm ffmpeg -y -i input.mp4 -vn -codec copy out.m4a ffmpeg -i out.m4a -f segment -segm ...

  6. python免费视频百度网盘-Python入门视频百度网盘看这些就够

    有不少人选择Python入门,因为它简单易学,因为它对新手的友善度很高.Python 基础语法内容较为简单,可以较快地了解编程的思维习惯,并能够较快接触到 Python GUI 库(比如Tkinter ...

  7. python视频-python剪切视频与合并视频的实现

    windows10/python3.6环境需安装imageio,ffmpeg(视频中有教下载)文字中不体现太麻烦,看起来也不方便! 剪切代码python代码: import imageio image ...

  8. 利用Python将视频文件转成语音文件

    import moviepy from moviepy.video.io.VideoFileClip import VideoFileClip # 将mp4文件转为mp3音频文件,生成路径仍在原路径中 ...

  9. 免费视频转文字-音频转文字软件:网易见外工作台, Speechnotes, autosub, Speech to Text, 百度语音识别

    文章目录 网易见外工作台(推荐) Chrome插件 Speechnotes autosub 百度语音识别API IBM的Speech to Text(不推荐) 此文首发于我的Jekyll博客:zhan ...

  10. 利用python提取视频中的字幕

    利用python提取视频中的字幕 `` 一.导包 import base64 import os import cv2 import requests import aip from aip impo ...

最新文章

  1. Android 开源框架 ( 十六 ) 视频播放器 --- JiaoZiVideoPlayer(JieCaoVideoPlayer)
  2. asp.net页面中hmtl注释的问题
  3. Linux下安装G++
  4. 我认真写下9段如翔一般的代码,只为等你来品鉴
  5. animate动画案例_animate动画案例——小小购物狂
  6. jsp mysql事务锁_学生会事务管理系统的设计与实现(JSP,MySQL)(含录像)
  7. 基于Python3 神经网络的实现
  8. breakall lisp文件_CAD导入草图大师后自动成面
  9. 春雷视频添加投屏功能解惑
  10. Implementing Infinite Scroll Into a React Component
  11. 计算机系统变慢的原因,重装系统后电脑变得很慢原因分析及解决办法
  12. python+websocket匿名聊天室实现
  13. Ubuntu linux下运行xv6
  14. matlab摩托车刹车问题,安全骑行篇,摩托车刹车的基本知识与技巧!
  15. mysql concat 长度限制_mysql中group_concat()长度限制
  16. Reactive简介
  17. Cufllinks的安装与使用
  18. TYPEC无协议芯片最高可输出5V3A
  19. 6 Processes 下
  20. python 语言基础 - 你不得不知道的字符串常用函数之isdigit

热门文章

  1. js函数传参传入对象
  2. ARM-LINUX平台下的文本文件打印机打印
  3. 角度单位中角分、角秒的进制转换
  4. oracle detele,Oracle中,一个Delete操作的流程
  5. 【持续更新】2000-2022年英伟达历代桌面Quadro显卡列表,Quadro显卡发布日期
  6. 原生开发什么意思_原生app开发是什么意思?
  7. python中import与input_Python import与from import使用及区别介绍
  8. html 内使用复制功能
  9. “大健康”VS“小产品”,倍轻松、SKG的“年轻”生意经
  10. 网页无法复制文字,一个插件解决问题!!!!