当前位置: 首页 > 后端技术 > Python

酷,用Python+Excel做一个视频下载器!

时间:2023-03-26 12:04:12 Python

说起Excel,绝对是数据处理领域的王者。Python作为一门网红语言,在数据领域的应用也很广泛。其中,Python的第三方库——xlwings是Python与Excel的交互工具,可以方便地通过VBA调用Python脚本,实现复杂的数据分析。今天给大家介绍一个Python+Excel的项目【视频下载器】。主要使用了以下Python库。导入osimportsysimportsslimportffmpegimportxlWings作为xwfrompathlibimportpathlibimportpathfromaipimportaipspeechfrompydubimpeeaudiosementfromwordcloudexportwordwordcloudprowscloudpydub.utils.aip库是百度的官方库,用于语音转文字。#安装pipinstallbaidu-aipxlwings这里就不多说了。如果你想了解更多,你可以去官方文档。地址:https://docs.xlwings.org/en/s...给大家介绍一下吧!首先调用xlwings模块生成工程,命令如下。#创建项目xlwingsquickstarttranscriber--standalone这时候我们可以看到有一个名为transcriber的文件夹,作为我们的项目,可以修改成任意名称。注意:1.transcriber.py,这是一个带有Python代码的文件,内容如下。将xlwings导入为xwdefmain():wb=xw.Book.caller()sheet=wb.sheets[0]ifsheet["A1"].value=="Helloxlwings!":sheet["A1"].value=“再见xlwings!”否则:sheet["A1"].value="Helloxlwings!"@xw.funcdefhello(name):returnf"Hello{name}!"如果__name__=="__main__":xw.Book("transcriber.xlsm").set_mock_caller()main()2.transcriber.xlsm,这是一个VBA代码的Excel文件,内容如下。打开Excel文件,提示没有启用宏,设置一下。文件——更多——选项——信任中心——信任中心设置——宏设置——启用所有宏。然后安装xlwings的Excel集成插件。安装前需要关闭所有Excel应用程序,否则会报错。#安装xlwings的Excel集成插件xlwingsaddininstallxlwings插件就安装好了,这时候打开Excel,你会发现工具栏上多了一个xlwings的菜单框,也就是说xlwings插件是安装成功。它充当VBA调用Python脚本的桥梁。我们还需要将“开发人员工具”添加到功能区,因为我们要使用宏。配置运行环境、Python执行器、Conda安装路径、Conda虚拟环境路径。最后点击“开发工具”选项卡,点击VisualBasic——工具——参考——添加xlwings。至此,环境配置成功。让我们使用之前创建的transcriber.xlsm文件进行实验,插入一个按钮,并指定一个宏。点击绿色按钮,可以看到A1单元格中会出现一条信息,提示宏启用成功。在这里我们可以将单元格A1的名称更改为OUTPUTCELL。然后修改transcriber.py文件中的代码。将xlwings导入为xwdefmain():wb=xw.Book.caller()sheet=wb.sheets[0]ifsheet["OUTPUTCELL"].value=="Hello":sheet["OUTPUTCELL"].value="再见"else:sheet["OUTPUTCELL"].value="Hello"@xw.funcdefhello(name):returnf"Hello{name}!"if__name__=="__main__":xw.Book("transcriber.xlsm").set_mock_caller()main()点击按钮,发现信息变了,说明可以给cell取名输出了。了解了xlwings的基本使用后,我们就可以一波布局表格了!音频转文字,生成字幕词云,添加数据校验,其实是一个列表选项,可以选择是或否。将音频转换为文本,生成字幕词云并添加条件格式。选择是或否后,会显示不同的颜色。默认值为否(浅红色)。好了,最后修改每个单元格的名称。编写主程序,代码如下。defmain():wb=xw.Book.caller()sheet=wb.sheets[0]bilibili_url=sheet["BILIBILI_URL"].valuetranscribe=sheet["TRANSCRIBE"].valuewordcloud=sheet["WORDCLOUD"].valuestatus_cell=sheet["STATUS_CELL"]#重置状态栏status_cell.value=""#获取程序运行路径output_path=Path(__file__).parentoutput_path=str(output_path)#下载cellif:bilibili_url开始下载音视频files..."audio_file=download_bilibili(bilibili_url,status_cell,output_path)else:status_cell.value="未输入B站视频地址"sys.exit()#voice-to-textiftranscribe:=='Yes'transcription_text=transcribe_audio_file(status_cell,audio_file,output_path)#Generatewordcloudiftranscript=='yes'andwordcloud=='yes':generate_wordcloud(transcription_text,output_path,status_cell)使用第一个sheet不断更新状态栏信息,,到判断是否运行下载、语音转文本、词云生成三个功能化。you-get库用于下载音视频,几乎所有网站的音视频都可以一键下载。有很多网站支持它。这次我们只用B站的视频来测试。defdownload_bilibili(bilibili_url,status_cell,output_path):"""下载音视频"""filename=bilibili_url.split('/')[-1].split('?')[0]cmd='you-get{}-o{}-O{}'.format(bilibili_url,output_path,filename)os.system(cmd)#导入视频my_audio_clip=AudioFileClip(output_path+"\{}.flv".format(filename))#提取audio并保存audio_file=output_path+"\{}.wav".format(filename)my_audio_clip.write_audiofile(audio_file)status_cell.value=f"下载B站视频成功,并提取音频:{audio_file}"返回使用moviepy提取的audio_file库视频中的音频,用于语音识别。\当audiototext选项的内容为[Yes]时,下面的代码就派上用场了。使用百度的短语音识别技术需要申请。如果你不想使用它,你可以在两个选项中选择[否],并将其用作下载器。不幸的是,最大识别时间只能是60秒,所以需要剪切之前获取的音频。另外,音频的采样率也需要匹配。deftranscript_audio_file(status_cell,audio_file,output_path):"""Speechtotext"""status_cell.value="开始处理音频文件..."old_name=audio_filenew_name=audio_file.split('.')[0]+'_16000.wav'split_name=audio_file.split('.')[0]#下转换音频ffmpeg.input(old_name).output(new_name,ar=16000).run(cmd=FFMPEG_PATH)#剪切音频audio=AudioSegment.from_file(new_name,"wav")#切割的毫秒数size=30000#将文件切割成30schunks=make_chunks(audio,size)fori,chunkinenumerate(chunks):,iis#EnumerationIndex,chunk为切分文件chunk_name=split_name+"_{0}.wav".format(i)#保存文件chunk.export(chunk_name,format="wav")status_cell.value="使用百度语音接口识别Audio..."#使用百度语音接口"""你的APPIDAKSK"""APP_ID=''API_KEY=''SECRET_KEY=''client=AipSpeech(APP_ID,API_KEY,SECRET_KEY)#读取文件defget_file_content(file_path):withopen(file_path,'rb')asfp:returnfp.read()transcription_txt=output_path+"\transcription.txt"#识别本地文件fori,chunkinclient:=chunkinre=chunkinclient.asr(get_file_content(split_name+"_{0}.wav".format(i)),'wav',16000,{'dev_pid':1537#默认1537(国语输入法模式),dev_pid参数见开头这部分})print(result['result'])withopen(transcription_txt,"a")asfile:file.write(result['result'][0])file.close()status_cell.value=f"音频转文字成功,文件保存到{transcription_txt}"returntranscription_txt可以识别普通话、英语、粤语、四川话。通过在请求时配置不同的dev_pid参数,选择对应的模型。最后,将音频转换为文本并保存在文本文件中。生成词云需要注意添加中文字体路径,否则词云图无法显示中文。defgenerate_wordcloud(textfile,output_path,status_cell):"""生成词云"""textfile=Path(textfile)content=textfile.read_text()wordcloud=WordCloud(font_path=output_path+'\simhei.ttf').generate(content)wordcloud.to_file(Path(output_path)/f"{textfile.stem}.png")status_cell.value="GenerateWordCloudMap"项目整体如上所述。此时,我们只需要打开Excel文件,选择是或否选项,修改B站视频地址,点击开始下载即可下载视频并生成词云图。不再需要运行Python文件。视频下载成功,对音视频进行处理,得到文本信息。查看词云。我发现百度的语音识别有点差。不知道问题出在哪里……好了,本期的分享到此结束。有兴趣的朋友可以自己实践学习。比如制作弹幕分析词云图,或者从其他网站下载视频等。使用的代码和文件已经上传,有兴趣的读者可以自行下载学习。以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发送“J”还能收到海量学习资料,涵盖Python电子书和教程,数据库编程、Django、爬虫、云计算等。或者去编程学习网了解更多编程技术知识。