专栏首页Python数据科学惊呆了,还能这么玩!用Python提取视频课程中的文稿

惊呆了,还能这么玩!用Python提取视频课程中的文稿

前段时间办公室出现一奇葩需求,要把一段授课视频转换为文字,为了实现这个目标我四处搜罗找了几款APP进行了多步操作,总体感觉比较麻烦。想想怎么说我们也是玩Python ,为啥不用Python呢~~说干就干,经过一番分析和搜索,还真被我搞定了,下面跟大家分享一下。

01

思路

直接写实现过程可能会有点混乱,就先讲一讲该功能的设计思路吧!

1).提取文字

这次我们的最终目的是要拿到文字稿,在一段视频中真正包含文字信息的其实不是视频文件而是音频文件,这下问题就变成从音频提取文字也就是语音识别。

关于语音转换文字,腾讯/百度/讯飞都提供有自己的API,大家可以根据自己的习惯选用,我用的是百度API,就以此为例进行演示。

接下来就要去查百度的语音识别API文档,看看它对待提取的音频文件有什么要求,下图就是百度的python SDK文档页面:

在这个文档中,对百度语音识别API所支持的音频格式进行了明确,概况起来主要有三点要求:

  • 参数:16k 采样率、16bit 位深、单声道;
  • 格式:pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式);
  • 其他:完整语音文件,时长不超过60s。

2).提取音频

音频转文字的技术解决了,接着要解决的就是把目标视频文件转换为百度API所支持的音频(对应的格式、参数)。

从视频中提取音频可以使用FFmpeg,在音频提取过程中还要对音频的采样率、声道数、码率进行设置,同时指定输出音频格式。除此之外,由于百度API最多只支持60秒长度的音频,而我们需要转换的视频长度通常要远高于这个时长,所以还需要使用pydub对音频文件进行切割,然后分段进行文字转换。所以从视频到音频的大概流程应该是这样的:

这下方法就明确了,下面就来看看是如何一步步具体实现视频转文字这个功能的。

02

动手写代码实现

1).视频转音频

前面我们说过,对于一个视频文件需要使用fmpeg转换成音频,fmpeg是一个非常快速的视频和音频转换器,语法格式是这样的:

ffmpeg -y  -i 16k.wav  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 16k.pcm

上面这条语句的作用是把wav文件转换为16k、16bits位深的单声道pcm文件,其中16k.wav是输入文件、16k.pcm是输出文件,两者之间的内容是输出文件的参数设置。

在python中使用ffmpeg需要借助于ffmpy3这个库,语法格式也要做稍许调整。来看下面这段代码,他的作用是把一段视频转换为wav文件:

  • 其中inputfile是待转换的视频文件,其参数为空;
  • outputfile是输出文件路径,其参数中对采样率、声道数以及文件格式等进行了指定;
  • global_options是全局参数,-y的作用是允许覆盖已有文件;

通过上面这段代码,可以实现整段视频到音频的转换。

2).音频切割

获取完一整段长音频还要进行切割操作。音频切割的关键是找准每一段的起始和结束的时间节点,所以首先我们要获取整个音频文件的总长度,然后以60秒为间隔进行切分,并计算每一段音频开始秒数和结束秒数,然后切割提取。实现这个功能的代码如下:

注:通过以上方法进行切割,可能会存在某一个读音被切分在相邻两段音频中的情况,从而在音频到文字的转换阶段造成误差。

3).音频转文字

现在进入本文的核心环节——文字提取,如果要自己写这个功能的话估计费尽心思也写不出来,但是如果使用各种语音识别API就简单多了,使用百度语音识别API对一段音频(小于60秒)进行文字提取的代码如下,其中的APP_ID、API_KEY和SECRET_KEY需要到百度AI开放平台中注册后才能获取。

上面这段代码中,首先建立一个语音识别对象client,然后调用asr方法完成文字的提取,'dev_pid'参数用来指定音频中的语言类型,1537对应的是纯中文普通话。目前支持的语言类型有以下几种:

4).操作界面

通过上面三个步骤,从视频到文字的转换流程就基本实现了,之后只需要把从每段音频中提取的文字合并到一起输出就可以。

当然,在实现基本功能的基础上,还可以进行一些完善工作,例如每次转换之前我们都需要指定目标视频文件和文本的输出目录,对此可以设计一个简单的UI界面。下图就是用tkinter做的界面,虽然简陋但还算实用。

添加操作界面还有一个好处就是可以用pyinstaller打包成可执行文件,以便分享给办公室的其他同事使用。

03

试一下最终的效果

东西做好了当然要试一试效果,运行程序后在本地选择要提取文字的目标视频,如下图所示:

(选择这个视频,进行文字解析)

选择文本输出目录后点击“转换”就会自动对视频中的内容进行文本提取,下图是提取出的文字内容,结果会以txt文本文件的格式存储到指定的输出目录。

从输出结果来看,提取的内容不止有文字还有标点符号,这个应该是语音识别API根据说话的语气和停顿时间自己判断的。下面这个就是刚才提取文字用的视频文件,大家可以比对一下,总体来说效果还不错。

本文分享自微信公众号 - Python数据科学(PyDataScience),作者:奔跑的鳄鱼

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 1000行 MySQL 学习笔记,不怕你不会,就怕你不学!

    原文链接:https://shockerli.net/post/1000-line-mysql-note/

    用户2769421
  • 抖音上好看的小姐姐,Python给你都下载了

    如果一条条去刷确实很耗时间,如果 Python 能帮忙筛选出颜值高的小姐姐那就省了很多事。

    用户2769421
  • 一款非常棒的特征选择工具:feature-selector

    本篇主要介绍一个基础的特征选择工具feature-selector,feature-selector是由Feature Labs的一名数据科学家williamk...

    用户2769421
  • 逆天!MIT新“像素发声”系统,完美分离声与画(附视频)

    新智元报道 来源:MIT CSAIL 编辑:小潘、克雷格 【新智元导读】麻省理工学院(MIT)的计算机科学与人工智能实验室(CSAIL)最近研发出一种名...

    朱晓霞
  • 逆天!MIT新“像素发声”系统,完美分离声与画(附视频)

    ?---- 【新智元导读】麻省理工学院(MIT)的计算机科学与人工智能实验室(CSAIL)最近研发出一种名为Pixel Player系统,能够通过大量无标签的视...

    新智元
  • Elasticsearch Java API 搜索之简介(三)

    搜索查询,返回查询匹配的结果,搜索一个index / type 或者多个index / type,可以使用 queryJavaAPI(https://www.e...

    全科
  • 在视频app开发过程中,用到的音视频编解码技术有哪些?

    如果想要开发一款视频app用于直播,作为一名开发者,首先要了解它的技术架构是什么。一个完整的直播技术架构包含:音视频采集、前处理、编解码、多媒体处理、流媒体协议...

    就爱吃小笼包
  • 单身究竟有多好?这 4 款小程序,让你再也不想谈恋爱

    单身生活,当然可以过得漂漂亮亮。除了追剧、淘宝、刷朋友圈外,知晓程序(微信号 zxcx0101)认为不如再试试这 4 款小程序,让你的生活更有趣,更丰富,做个优...

    知晓君
  • 备战CKA,每日一题 | 第2天

    从昨天开始,正式开始备战CKA考试。看了看昨天考题留言,答题的有十多个,只有2个答对了。

    我的小碗汤
  • 云计算平台数据保全获得司法认可 电子证据时代迈进一大步

    “你可以保持沉默,但你说的每一句话都将成为呈堂证供”——这句港片台词早已广为人知。但问题是,当你身边不是警察,而是一个不能保证诚信的人时,谁能证明你们之间的交流...

    静一

扫码关注云+社区

领取腾讯云代金券