利用Python+Excel制作一个视频下载器

说起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视频下载器的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python下载手机小视频的操作方法

    目录 启动 mitmproxy 手机网络配置 下载页 编写下载脚本 今天为大家介绍使用 mitmproxy 这个抓包工具如何监控手机上网,并且通过抓包,把我们想要的数据下载下来. 启动 mitmproxy 首先我们通过执行命令 mitmweb 启动mitmproxy,让它处理监听状态,服务会监听本机 8080 端口,启动后如下: $ mitmweb Web server listening at http://127.0.0.1:8081/ Proxy server listening at h

  • 基于Python制作B站视频下载小工具

    目录 1. 原理简介 2. 网页分析 3. 视频爬取 4. 存入本地 5. GUI工具制作 1. 原理简介 原理很简单,就是获取视频资源的源地址,然后爬取视频的二进制内容,再写入到本地即可. 2. 网页分析 打开该网页,然后F12进入开发者模式,接着点开网络—>全部,因为视频资源一般比较大,我这里根据大小进行了从大到小的排序,找到了第一条这些可能和视频源地址有关. 然后,我们复制找到的这条里的url部分不变的部分,回到元素中ctrl+F搜索,找到了可能和视频源地址有关的节点. 果然,我们复制这部

  • Python实现视频下载与合成的示例代码

    目录 模块使用 开发环境 案例实现 1.明确需求 2.代码实现步骤 实现代码 模块使用 requests >>> pip install requests (数据请求 第三方模块) re # 正则表达式 去匹配提取数据 json 开发环境 Python 3.8 解释器 Pycharm 2021.2 版本 建议 win + R 输入cmd 输入安装命令 pip install 模块名 如果出现爆红 可能是因为 网络连接超时 切换国内镜像源 案例实现 1.明确需求 采集内容, 先分析一个视频

  • python批量下载抖音视频

    本文实例为大家分享了python批量下载抖音视频的具体代码,供大家参考,具体内容如下 知识储备:博主是在Pycharm下进行的 文件夹:dou_ying 1:在文件夹doy_ying下新建第一个文件:dou_ying_video_download.py 代码: # coding=utf-8 """ @author: jiajiknag 程序功能:批量下载抖音视频 """ import requests import bs4 import os i

  • 用python制作个视频下载器

    前言 某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~ 当我打开文件夹以回顾往事之余,惊现许多看似杂乱的无聊代码.我拍腿正坐,一个想法油然而生:"生活已然很无聊,不如再无聊些叭". 于是,我决定开一个专题,便称之为kimol君的无聊小发明. 妙-啊~~~ 众所周知,视频是一个学习新姿势知识的良好媒介.那么,如何利用爬虫更加方便快捷地下载视频呢?本文将从数据包分析到代码实现来进行一个相对完整的讲解. 一.爬虫分析 本次选取的目标视频网站为某度旗下的好看视频: https://haok

  • 利用Python+Excel制作一个视频下载器

    说起Excel,那绝对是数据处理领域王者般的存在. 而作为网红语言Python,在数据领域也是被广泛使用. 其中Python的第三方库-xlwings,一个Python和Excel的交互工具,可以轻松地通过VBA来调用Python脚本,实现复杂的数据分析. 今天,小F就给大家介绍一个Python+Excel的项目[视频下载器]. 主要使用到下面这些Python库. import os import sys import ssl import ffmpeg import xlwings as xw

  • 十行Python代码制作一个视频倒放神器

    目录 导语 正文 源码如下 效果展示 总结 补充 导语 大家好,我是栗子同学! 今天给大家分享一个好玩的东西 让时光倒流——当当当,其实就是让视频倒放而已 正常的视频如下 倒放视频如下 效果很赞吧,等你学会了这个,你才会发现,抖音上那些杯子里的水倒流,倒着跑步等看似很炫酷很神秘的视频,其实就是一键倒放而已! 那么,今天小编就来探索Python代码如何实现这个倒放的功能叭~ 正文 这些搞笑的gif跟小视频都是将正常的流畅通过倒放产生的效果啦 其实制作起来却非常简单,原理就是将gif图片拆分出来每一

  • Python+PyQt5制作一个图片查看器

    目录 前言 实现方式 测试 前言 在 PyQt 中可以使用很多方式实现照片查看器,最朴素的做法就是重写 QWidget 的 paintEvent().mouseMoveEvent 等事件,但是如果要在图像上多添加一些形状,那么在对图像进行缩放旋转等仿射变换时需要对这些形状也这些变换,虽然不难,但是从头实现这些变换还有形状还是挺讨厌的.好在 Qt 提供了图形视图框架,关于这个框架的基本使用可以参见 深入了解PyQt5中的图形视图框架,下面进入正题. 实现方式 一个最基本的照片查看器应该具有以下功能

  • 利用Python制作百度图片下载器

    前段时间写了一个百度图片下载器,结果发现有很多人需要使用.说实话之前写的那一款百度图片下载器比较LOW,今天刚好有时间就做了一下升级. 更新了两个BUG,一个是图片下载达到几千张的时候就没有图片可以下载了.另一个是下载进度不能实时的展示出来不知道下载到什么程度了. 同样的,我们先把需要的第三方库导入进来. '''UI界面相关的库''' from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import

  • python基于tkinter制作m3u8视频下载工具

    这是我为了学习tkinter用python 写的一个下载m3u8视频的小程序,程序使用了多线程下载,下载后自动合并成一个视频文件,方便播放. 目前的众多视频都是m3u8的播放类型,只要知道视频的m3u8地址,就可以完美下载整个视频. m3u8地址获取 打开浏览器,点开你要获取地址的视频 重要的来了,右键>>审查元素或者按F12也可以 根据开发或测试的实际环境选择相应的设备,选择iphone6 plus 选择好了以后,刷新页面,点击漏斗,选择media,一定刷新之后再点击,没出来的话切换几下选项

  • Python实现一个论文下载器的过程

    在科研学习的过程中,我们难免需要查询相关的文献资料,而想必很多小伙伴都知道SCI-HUB,此乃一大神器,它可以帮助我们搜索相关论文并下载其原文.可以说,SCI-HUB造福了众多科研人员,用起来也是"美滋滋". 然而,当师姐告诉我:"xx,可以帮我下载几篇文献嘛?".乐心助人的我自当是满口答应了,心想:"这种小事就交给我叭~" 于是乎,我收到了一个excel文档,66篇论文的列表安静地趟在里面(此刻心中碎碎念:"这尼玛,是几篇嘛...&q

  • 用python制作个音乐下载器

    前言 某个夜深人静的夜晚,我打开了自己的文件夹,发现了自己写了许多似乎很无聊的代码.于是乎,一个想法油然而生:"生活已经很无聊了,不如再无聊一点叭". 说干就干,那就开一个专题,我们称之为kimol君的无聊小发明. 妙-啊~~~ 直奔主题!本文主题是用python做一个音乐下载器(MusicLover),直接上图: 想必看到这里,各位看官的脑海中已经脑补出各种JS解密,参数分析等等让初学者很头疼的东东了. 然而,我并不打算这么干~(小声嘀咕:"没想到吧") 本文很友

  • 用python制作个论文下载器(图形化界面)

    在科研学习的过程中,我们难免需要查询相关的文献资料,而想必很多小伙伴都知道SCI-HUB,此乃一大神器,它可以帮助我们搜索相关论文并下载其原文.可以说,SCI-HUB造福了众多科研人员,用起来也是"美滋滋". 在上一篇文章中介绍了分析过程以及相应的函数代码.根据小伙伴们的反映发现了一些问题,毕竟命令框的形式用起来难免没那么"丝滑".为了让大家更方便地使用,可以"纵享丝滑",kimol君决定写一个图形界面(GUI): PS.由于近期实属忙到晕厥,这

  • 基于Python制作一个相册播放器

    大家好,我是小F. 对于相册播放器,大家应该都不陌生(用于浏览多张图片的一个应用). 当然还有视频.音乐播放器,同样是用来播放多个视频.音乐文件的. 在Win10系统下,用[照片]这个应用打开一张图片,就可以浏览该图片所在文件夹中其它图片了. 从上面的图中发现,还有不少其它方面的功能,比如图片裁剪.编辑.打印等. 今天小F就带大家学习一个Python制作相册播放器的实战项目. 功能嘛,当然没有系统自带的好,仅做学习哈. 默认5秒切换一张图片,点击向前按钮,可以快速切换到下一张图片. 主要使用到P

随机推荐