如何利用python下载视频,python下载excel文件

  如何利用python下载视频,python下载excel文件

  说起Excel,绝对是数据处理之王。Python作为网络名人的语言,也广泛应用于数据领域。本文将使用Python和Excel制作一个视频下载器,大家可以参考一下。

  说起Excel,绝对是数据处理之王。

  Python作为网络名人的语言,也广泛应用于数据领域。

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

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

  主要使用以下Python库。

  导入操作系统

  导入系统

  导入ssl

  导入ffmpeg

  将xlwings导入为xw

  从pathlib导入路径

  从aip导入AipSpeech

  从pydub导入音频段

  从wordcloud导入WordCloud

  从pydub.utils导入make_chunks

  从moviepy.editor导入音频文件剪辑

  Ffmpeg、pydub和moviepy用于处理音频和视频,如剪切和格式转换。

  Aip库是百度的官方库,用来把语音转换成文字。

  #安装

  pip安装百度-aip

  这里就不多说xlwings了。想了解的朋友,可以去官方文档。

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

  下面给大家介绍一下吧!

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

  #创建项目

  xlwings快速启动转录器-独立

  这时候我们可以看到有一个文件夹的名字叫转录者,作为我们的项目,可以改成任何名字。

  请注意:

  1 . transcriptor . py,这是一个带有Python代码的文件,内容如下。

  将xlwings导入为xw

  定义主():

  wb=xw。Book.caller()

  sheet=wb.sheets[0]

  如果工作表[A1]。value==你好xlwings!:

  工作表[A1]。value=再见xlwings!

  else:

  工作表[A1]。value=你好xlwings!

  @xw.func

  你好(姓名):

  返回fHello {name}!

  if __name__==__main__:

  xw。书( transcriber.xlsm )。set_mock_caller()

  主()

  2 . transcriptor . xlsm,这是一个带有vba代码的Excel文件。内容如下。

  打开Excel文件,提示宏未启用,所以设置。

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

  然后安装xlwings的Excel集成插件。安装之前,您需要关闭所有Excel应用程序,否则将会报告错误。

  #为xlwings安装Excel集成插件

  xlwings加载项安装

  xlwings和插件安装完成后,打开Excel时,你会在工具栏中发现一个xlwings的菜单框,表示xlwings插件安装成功。

  它充当了VBA调用Python脚本的桥梁。

  此外,我们需要在功能区中添加“开发工具”,因为我们将使用宏。

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

  最后点ld。

  quo;开发工具选项卡,点击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视频下载器的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: