最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Python+Excel制作一個視頻下載器

 更新時間:2022年05月30日 08:35:26   作者:小F  
說起Excel,那絕對是數(shù)據處理領域王者般的存在。而作為網紅語言Python,在數(shù)據領域也是被廣泛使用。本文將利用Python和Excel制作一個視頻下載器,需要的可以參考一下

說起Excel,那絕對是數(shù)據處理領域王者般的存在。

而作為網紅語言Python,在數(shù)據領域也是被廣泛使用。

其中Python的第三方庫-xlwings,一個Python和Excel的交互工具,可以輕松地通過VBA來調用Python腳本,實現(xiàn)復雜的數(shù)據分析。

今天,小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模塊生成一個項目,命令如下。

# 創(chuàng)建項目
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,會發(fā)現(xiàn)工具欄出現(xiàn)一個xlwings的菜單框,代表xlwings插件安裝成功。

它起到一個橋梁的作用,為VBA調用Python腳本牽線搭橋。

此外還需要把“開發(fā)工具”添加到功能區(qū),因為我們要用到宏。

配置運行環(huán)境,Python執(zhí)行器,Conda安裝路徑,Conda虛擬環(huán)境路徑。

最后點擊“開發(fā)工具”選項卡,點擊Visual Basic - 工具 - 引用 - 添加xlwings。

到此,環(huán)境就配置成功了。

我們先用之前創(chuàng)建的transcriber.xlsm文件來實驗一下,插入一個按鈕,指定宏。

點擊綠色的按鈕,可以看見A1單元格會有信息出現(xiàn),說明啟用宏成功。

這里我們可以把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()

點擊按鈕,發(fā)現(xiàn)信息有所變,說明可以給單元格指定名稱和輸出。

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

給音頻轉文本,生成字幕詞云添加數(shù)據驗證,其實就是一個列表選項,可選擇是或否。

給音頻轉文本,生成字幕詞云添加條件格式,選擇是或否后,展示不同的顏色,默認否(淡紅色)。

好了,最后修改一下各個單元格的名稱。

編寫主程序,代碼如下。

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"]

    # 重置狀態(tài)欄
    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表,不斷的更新狀態(tài)欄信息,判斷是否要運行下載、語音轉文字、生成詞云這三個函數(shù)。

下載音視頻使用到了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")
    # 切割的毫秒數(shù)
    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參數(shù)見本節(jié)開頭的表格
        })

        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參數(shù),選擇對應模型。

最終將音頻轉為文本,保存在一個文本文件中。

生成詞云,這里需要注意添加中文字體路徑,要不然詞云圖顯示不了中文。

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文件。

成功下載到視頻,并且對音視頻進行處理,得到文本信息。

查看一下詞云圖吧。

發(fā)現(xiàn)百度的語音識別有點差啊,不知道是哪里出現(xiàn)了問題...

以上就是利用Python+Excel制作一個視頻下載器的詳細內容,更多關于Python Excel視頻下載器的資料請關注腳本之家其它相關文章!

相關文章

  • Python進程崩潰AttributeError異常問題解決

    Python進程崩潰AttributeError異常問題解決

    這篇文章主要介紹了Python進程崩潰(AttributeError異常)問題解決,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下方法
    2023-06-06
  • python數(shù)字圖像處理實現(xiàn)直方圖與均衡化

    python數(shù)字圖像處理實現(xiàn)直方圖與均衡化

    在圖像處理中,直方圖是非常重要,也是非常有用的一個處理要素。這篇文章主要介紹了python數(shù)字圖像處理實現(xiàn)直方圖與均衡化,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Python的爬蟲包Beautiful Soup中用正則表達式來搜索

    Python的爬蟲包Beautiful Soup中用正則表達式來搜索

    這篇文章主要介紹了Python的爬蟲包Beautiful Soup中用正則表達式來搜索的技巧,包括使用正則表達式去搜索多種可能的關鍵字以及查找屬性值未知的標簽等,需要的朋友可以參考下
    2016-01-01
  • Django零基礎入門之模板變量詳解

    Django零基礎入門之模板變量詳解

    這篇文章主要介紹了Django零基礎入門之模板變量詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Python中Class類用法實例分析

    Python中Class類用法實例分析

    這篇文章主要介紹了Python中Class類用法,以實例形式較為詳細的分析了Python中類的定義及相關使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • OpenCV霍夫圓變換cv2.HoughCircles()

    OpenCV霍夫圓變換cv2.HoughCircles()

    這篇博客將學習如何使用霍夫圓變換在圖像中找到圓圈,OpenCV使用cv2.HoughCircles()實現(xiàn)霍夫圓變換,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 詳談python中冒號與逗號的區(qū)別

    詳談python中冒號與逗號的區(qū)別

    下面小編就為大家分享一篇詳談python中冒號與逗號的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python3.6生成器yield用法實例分析

    python3.6生成器yield用法實例分析

    這篇文章主要介紹了python3.6生成器yield用法,結合實例形式分析了Python3.6中生成器yield的功能、用法及相關操作注意事項,需要的朋友可以參考下
    2019-08-08
  • 一篇文章帶你了解python字典基礎

    一篇文章帶你了解python字典基礎

    這篇文章主要介紹了Python字典及字典基本操作方法,結合實例形式詳細分析了Python字典的概念、創(chuàng)建、格式化及常用操作方法與相關注意事項,需要的朋友可以參考下
    2021-08-08
  • Python操作SQLite/MySQL/LMDB數(shù)據庫的方法

    Python操作SQLite/MySQL/LMDB數(shù)據庫的方法

    這篇文章主要介紹了Python操作SQLite/MySQL/LMDB數(shù)據庫的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11

最新評論

马山县| 唐山市| 固阳县| 青河县| 南部县| 南投县| 北票市| 新泰市| 内黄县| 台前县| 连州市| 麻江县| 梁平县| 南安市| 乐陵市| 连城县| 庄河市| 邮箱| 台北县| 临夏县| 峨山| 崇左市| 海口市| 吉林省| 东光县| 略阳县| 闸北区| 永登县| 蓬安县| 浮山县| 蒙山县| 青冈县| 奎屯市| 大冶市| 冀州市| 永康市| 航空| 界首市| 昌宁县| 民丰县| 万荣县|