文 | 派森酱
来源:Python 技术「ID: pythonall」
最近在懂车帝收藏了一些感兴趣的视频,希望能整理出文字稿
观看视频,做笔记时遇到一个问题,需要反复一段一段的去看视频,再手敲整理笔记。想着有没有可以免费的转换工具或者软件,结果很多在线网站都需要登录注册,甚至收费。这些网站或免费工具都没听过,如果是病毒或不靠谱,就显得浪费时间。
借助api的方式可以尝试,我们画图,先讲一讲该方法的实现思路吧!
流程图
从视频中提取音频可以使用moviepy模块。
由于百度API最多只支持60秒长度的音频,所以还需要使用pydub对音频文件进行切割,然后分段进行文字转换。
所以从视频到文字的大概流程应该是这样的:
❝在音频提取过程中还要对音频的采样率、声道数、码率进行设置,同时指定输出音频格式。语法格式:ffmpeg -y -i voice.mp3 -acodec pcm_s16le -f s16le -ac 1 -ar 16000 voice.pcm
关于语音转文字
在一段视频中真正包含文字信息的其实不是视频文件而是音频文件,这样就需要先把视频转换成音频,再从音频提取文字也就是语音识别。
关于语音转换文字,腾讯/百度/讯飞都提供有自己的API。前几天分享过一篇用python做一个漂亮女生词云舞蹈视频 用到百度的“人体分析”,这次继续沿用百度。
❝百度API的普通话语音识别,有15万次免费赠送,够用了
接下来就要去查百度的语音识别API文档,看看它对待提取的音频文件有什么要求,下图就是百度的python SDK文档页面
在这些文档中,对百度语音识别API所支持的音频格式进行了明确,概括起来主要有三点要求:
参数:16k 采样率、16bit 位深、单声道;
格式:pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式);
其他:完整语音文件,时长不超过60s。
下载视频
收藏的视频数据都在这里面
you-get下载它,或者用爬虫批量下载
视频转音频
视频剪辑软件可以做这些事情,例如剪映、必剪、Pr等等。
但是当任务量增加的时候,操作就显得非常浪费时间,而用Python的话3行代码就可以提取出来,就算任务量增加使用循环即可
代码如下
from moviepy.editor import AudioFileClip
my=AudioFileClip("艾瑞泽8.mp4") # 你的视频文件
my.write_audiofile("my.mp3") # 设置生成的音频
音频比较长的话,百度短语音识别接口支持1分钟以内的音频,这时候需要对音频进行分割处理,安装pydub模块
pip install pydub
pydub支持音频的各种格式之间进行相互转换,缺点是依赖ffmpeg等文件比较严重,我在这里被坑到了,所以接下来认真安装一遍ffmpeg
Window系统安装FFmpeg
官网下载
https://ffmpeg.org/download.html
找到windows版本
下载这个
无需安装,只需解压后将ffmpeg下的bin目录路径添加到path的环境变量中即可。如下图所示:
注意:修改环境变量后需要重启Python IDE ,如未配置ffmpeg,即便是正确的MP3路径,也会在读取Mp3文件时,错误显示无法找到MP3文件。如下所示:FileNotFoundError: [Errno 2] No such file or directory: 'C:\Lobby.mp3'
使用python分割音频
from pydub import AudioSegment
from pydub.utils import make_chunks
#blues文件30s
audio = AudioSegment.from_mp3('my.mp3')
size = 30000 #切割的毫秒数
chunks = make_chunks(audio, size) ##将文件切割为59s一块
for i, chunk in enumerate(chunks):
##枚举,i是索引,chunk是切割好的文件
chunk_name = "voice{0}.mp3".format(i)
print(chunk_name)
##保存文件
chunk.export(chunk_name, format="mp3")
4分钟的音频,被分割成8个30秒的文件:
百度接口使用
1.领取免费资源
登录进去后,进入“语音技术”页面,领取免费资源
总量15万次赠送,够用了
2.安装百度AI
pip install baidu-aip
3.创建应用
创建一个语音分析的应用,记住你的AppID、API Key、Secret Key,后面会用到。
4.脚本
我们试一下,对前面分割好的其中一个音频文件,调用百度API接口就可以完成语音转文字了~
from aip import AipSpeech
import os
""" 你的 APPID AK SK """
APP_ID = 'xx'
API_KEY = 'xx'
SECRET_KEY = 'xx'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 读取文件
def get_file_content(file_path):
# ffmpeg 用于将语音文件转换为pcm格式
os.system(f"ffmpeg -y -i %s -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s.pcm" % (file_path,file_path))
with open(f"%s.pcm" % file_path, 'rb') as fp:
return fp.read()
# 识别本地文件
result = client.asr(get_file_content('voice1.mp3'), 'pcm', 16000, {
'dev_pid': 1537 # 默认1537(普通话 输入法模型),dev_pid参数见本节开头的表格
})
print(result['result'][0])
输出如下
哈哈,我是合肥小熊说的小熊啊,这个视频开始之前呢,简单的两句……
从输出结果来看,提取的内容不只有文字还有标点符号,应该是语音识别API根据说话的语气和停顿时间自己判断的。总体来说效果还不错。
本文是由 Python技术 公众号粉丝 ssw 投稿,欢迎大家继续踊跃投稿!
PS:Python技术交流群(技术交流、摸鱼、白嫖课程为主)又不定时开放了,感兴趣的朋友,可以在下方公号内回复:666,即可进入,一起 100 天计划!
老规矩,酱友们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!
【获取神秘礼包】文章来源:https://www.toymoban.com/news/detail-425104.html
识别二维码,回复:1024文章来源地址https://www.toymoban.com/news/detail-425104.html
到了这里,关于用 Python 轻松将懂车帝视频转换为文本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!