说起Excel,那绝对是数据处理领域王者般的存在。

而作为网红语言Python,在数据领域也是被广泛使用。

其中Python的第三方库-xlwings,一个Python和Excel的交互工具,可以轻松地通过VBA来调用Python脚本,实现复杂的数据分析。

今天,小F就给大家介绍一个Python Excel的项目【视频下载器】。

主要使用到下面这些Python库。

import os
import sys
import ssl
import ffmpeg
import xlwings as xw
from pathlib import Path
from aip import AipSpeech
from pydub import AudioSegment
from wordcloud import WordCloud
from pydub.utils import make_chunks
from moviepy.editor import AudioFileClip

其中ffmpeg、pydub、moviepy是用来处理音视频的,比如裁剪、格式转换等。

aip库则是百度官方库,用来做语音转文字的。

# 安装
pip install baidu-aip

对于xlwings这里就不多说了,想了解的小伙伴,可以去看官方文档。

地址:https://docs.xlwings.org/en/stable/

下面就给大家来介绍一下吧!

首先调用xlwings模块生成一个项目,命令如下。

# 创建项目
xlwings quickstart transcriber --standalone

这时候我们就能看到有一个项目名称为transcriber的文件夹,这个就是作为我们项目使用的,并且可以修改为任何名字。

其中注意: 

1. transcriber.py,这是带Python代码的文件,内容如下。

import xlwings as xw

def main():
    wb = xw.Book.caller()
    sheet = wb.sheets[0]
    if sheet["A1"].value == "Hello xlwings!":
        sheet["A1"].value = "Bye xlwings!"
    else:
        sheet["A1"].value = "Hello xlwings!"

@xw.func
def hello(name):
    return f"Hello {name}!"

if __name__ == "__main__":
    xw.Book("transcriber.xlsm").set_mock_caller()
    main()

2. transcriber.xlsm,这是带vba代码的Excel文件,内容如下。

打开Excel文件,提示没有启用宏,所以设置一下。

文件 - 更多 - 选项 - 信任中心 - 信任中心设置 - 宏设置 - 启用所有宏。

然后安装xlwings的Excel集成插件,安装之前需要关闭所有Excel应用,不然会报错。

# 安装xlwings的Excel集成插件
xlwings addin install

xlwings和插件都安装好后,这时候打开Excel,会发现工具栏出现一个xlwings的菜单框,代表xlwings插件安装成功。

它起到一个桥梁的作用,为VBA调用Python脚本牵线搭桥。

此外还需要把“开发工具”添加到功能区,因为我们要用到宏。

配置运行环境,Python执行器,Conda安装路径,Conda虚拟环境路径。

最后点击“开发工具”选项卡,点击Visual Basic - 工具 - 引用 - 添加xlwings。

到此,环境就配置成功了。

我们先用之前创建的transcriber.xlsm文件来实验一下,插入一个按钮,指定宏。

点击绿色的按钮,可以看见A1单元格会有信息出现,说明启用宏成功。

这里我们可以把A1单元格名称修改为OUTPUTCELL。

再去修改transcriber.py文件中的代码。

import xlwings as xw

def main():
    wb = xw.Book.caller()
    sheet = wb.sheets[0]
    if sheet["OUTPUTCELL"].value == "Hello":
        sheet["OUTPUTCELL"].value = "Bye"
    else:
        sheet["OUTPUTCELL"].value = "Hello"

@xw.func
def hello(name):
    return f"Hello {name}!"

if __name__ == "__main__":
    xw.Book("transcriber.xlsm").set_mock_caller()
    main()

点击按钮,发现信息有所变,说明可以给单元格指定名称和输出。

了解了xlwings的基本使用,我们就可以对表格进行排版布局一波啦!

给音频转文本,生成字幕词云添加数据验证,其实就是一个列表选项,可选择是或否。

给音频转文本,生成字幕词云添加条件格式,选择是或否后,展示不同的颜色,默认否(淡红色)。

好了,最后修改一下各个单元格的名称。

编写主程序,代码如下。

def main():
    wb = xw.Book.caller()
    sheet = wb.sheets[0]

    bilibili_url = sheet["BILIBILI_URL"].value
    transcribe = sheet["TRANSCRIBE"].value
    wordcloud = sheet["WORDCLOUD"].value
    status_cell = sheet["STATUS_CELL"]

    # 重置状态栏
    status_cell.value = ""

    # 获取程序运行路径
    output_path = Path(__file__).parent
    output_path = str(output_path)

    # 下载
    if bilibili_url:
        status_cell.value = "开始下载音视频文件 ..."
        audio_file = download_bilibili(bilibili_url, status_cell, output_path)
    else:
        status_cell.value = "未输入B站视频地址"
        sys.exit()

    # 语音转文字
    if transcribe == '是':
        transcription_text = transcribe_audio_file(status_cell, audio_file, output_path)

    # 生成词云
    if transcribe == '是' and wordcloud == '是':
        generate_wordcloud(transcription_text, output_path, status_cell)

使用第一个sheet表,不断的更新状态栏信息,判断是否要运行下载、语音转文字、生成词云这三个函数。

下载音视频使用到了you-get库,一键下载几乎所有网站上的音视频。

支持的网站还不少呢,本次就只用B站的视频来测试。

def download_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_file = output_path   "\\{}.wav".format(filename)
    my_audio_clip.write_audiofile(audio_file)

    status_cell.value = f"成功下载B站视频, 并且提取音频: {audio_file}"
    return audio_file

使用moviepy库提取视频中的音频,用于语音识别。

当音频转文本选项的内容是【是】的时候,下面代码就派上用场了。

使用百度的短语音识别技术,需要申请使用,不想用的小伙伴直接两个可选项选择【否】,当做一个下载器即可。

可惜识别最长时间只能是60秒,所以需要将之前获取的音频进行切割。

此外还需要对音频的采样率进行匹配。

def transcribe_audio_file(status_cell, audio_file, output_path):
    """语音转文字"""
    status_cell.value = "开始处理音频文件..."
    old_name = audio_file
    new_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
    # 将文件切割为30s一块
    chunks = make_chunks(audio, size)
    for i, chunk in enumerate(chunks):
        # 枚举,i是索引,chunk是切割好的文件
        chunk_name = split_name   "_{0}.wav".format(i)
        # 保存文件
        chunk.export(chunk_name, format="wav")

    status_cell.value = "使用百度语音接口识别音频..."
    # 使用百度语音接口
    """ 你的 APPID AK SK """
    APP_ID = ''
    API_KEY = ''
    SECRET_KEY = ''

    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

    # 读取文件
    def get_file_content(file_path):
        with open(file_path, 'rb') as fp:
            return fp.read()

    transcription_txt = output_path   "\\transcription.txt"

    # 识别本地文件
    for i, chunk in enumerate(chunks):
        result = client.asr(get_file_content(split_name   "_{0}.wav".format(i)), 'wav', 16000, {
            'dev_pid': 1537  # 默认1537(普通话 输入法模型),dev_pid参数见本节开头的表格
        })

        print(result['result'])
        with open(transcription_txt, "a") as file:
            file.write(result['result'][0])
        file.close()

    status_cell.value = f"音频转文本成功, 文件保存到 {transcription_txt}"
    return transcription_txt

可识别普通话、英语、粤语、四川话识别。通过在请求时配置不同的dev_pid参数,选择对应模型。

最终将音频转为文本,保存在一个文本文件中。

生成词云,这里需要注意添加中文字体路径,要不然词云图显示不了中文。

def generate_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 = "生成词云图"

项目整体就如上面描述的一样。

此时我们只需打开Excel文件,选择是或否选项,修改B站视频地址,点击开始下载,即可下载视频,以及生成词云图。

无需再去运行Python文件

成功下载到视频,并且对音视频进行处理,得到文本信息。

查看一下词云图吧。

发现百度的语音识别有点差啊,不知道是哪里出现了问题...

以上就是利用Python Excel制作一个视频下载器的详细内容,更多关于Python Excel视频下载器的资料请关注Devmax其它相关文章!

利用Python+Excel制作一个视频下载器的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  3. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  4. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  7. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  8. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  9. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

  10. 在android studio中使用python代码构建android应用程序

    我有一些python代码和它的机器人,我正在寻找一种方法来使用android项目中的那些python代码.有没有办法做到这一点!?解决方法有两种主要工具可供使用,它们彼此不同:>QPython>Kivy使用Kivy,大致相同的代码也可以部署到IOS.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部