<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          太酷了,用Python+Excel制作一個視頻下載器!

          共 5991字,需瀏覽 12分鐘

           ·

          2022-06-07 18:00


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


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


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


          今天,小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是用來處理音視頻的,比如裁剪、格式轉(zhuǎn)換等。


          aip庫則是百度官方庫,用來做語音轉(zhuǎn)文字的。


          #?安裝
          pip?install?baidu-aip


          對于xlwings這里就不多說了,想了解的小伙伴,可以去看官方文檔。


          地址:

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


          下面就給大家來介紹一下吧!


          首先調(diào)用xlwings模塊生成一個項目,命令如下。


          #?創(chuàng)建項目
          xlwings?quickstart?transcriber?--standalone


          這時候我們就能看到有一個項目名稱為transcriber的文件夾,這個就是作為我們項目使用的,并且可以修改為任何名字。



          其中注意:?


          1.?transcriber.py,這是帶Python代碼的文件,內(nèi)容如下。


          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文件,內(nèi)容如下。



          打開Excel文件,提示沒有啟用宏,所以設(shè)置一下。



          文件 - 更多 - 選項 - 信任中心 - 信任中心設(shè)置 - 宏設(shè)置 - 啟用所有宏。


          然后安裝xlwings的Excel集成插件,安裝之前需要關(guān)閉所有Excel應(yīng)用,不然會報錯。


          #?安裝xlwings的Excel集成插件
          xlwings?addin?install


          xlwings和插件都安裝好后,這時候打開Excel,會發(fā)現(xiàn)工具欄出現(xiàn)一個xlwings的菜單框,代表xlwings插件安裝成功。


          它起到一個橋梁的作用,為VBA調(diào)用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的基本使用,我們就可以對表格進(jìn)行排版布局一波啦!



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



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



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


          編寫主程序,代碼如下。


          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()

          ????#?語音轉(zhuǎn)文字
          ????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)欄信息,判斷是否要運行下載、語音轉(zhuǎn)文字、生成詞云這三個函數(shù)。


          下載音視頻使用到了you-get庫,一鍵下載幾乎所有網(wǎng)站上的音視頻。



          支持的網(wǎng)站還不少呢,本次就只用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)

          ????#?導(dǎo)入視頻
          ????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庫提取視頻中的音頻,用于語音識別。


          當(dāng)音頻轉(zhuǎn)文本選項的內(nèi)容是【是】的時候,下面代碼就派上用場了。


          使用百度的短語音識別技術(shù),需要申請使用,不想用的小伙伴直接兩個可選項選擇【】,當(dāng)做一個下載器即可。



          可惜識別最長時間只能是60秒,所以需要將之前獲取的音頻進(jìn)行切割。


          此外還需要對音頻的采樣率進(jìn)行匹配。


          def?transcribe_audio_file(status_cell,?audio_file,?output_path):
          ????"""語音轉(zhuǎn)文字"""
          ????status_cell.value?=?"開始處理音頻文件..."
          ????old_name?=?audio_file
          ????new_name?=?audio_file.split('.')[0]?+?'_16000.wav'
          ????split_name?=?audio_file.split('.')[0]
          ????#?對音頻進(jìn)行降頻處理
          ????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??#?默認(rèn)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"音頻轉(zhuǎn)文本成功,?文件保存到?{transcription_txt}"
          ????return?transcription_txt


          可識別普通話、英語、粵語、四川話識別。通過在請求時配置不同的dev_pid參數(shù),選擇對應(yīng)模型。


          最終將音頻轉(zhuǎn)為文本,保存在一個文本文件中。


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


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


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



          查看一下詞云圖吧。



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


          好了,本期的分享就到此結(jié)束了,有興趣的小伙伴可以自行去實踐學(xué)習(xí)。


          比如制作一個彈幕分析詞云圖,或者下載其他網(wǎng)站的視頻等等。


          使用到的代碼及文件都已上傳,掃碼添加老表微信,回復(fù)「視頻下載」即可獲取。


          掃碼即可加我微信

          學(xué)習(xí)交流

          老表朋友圈經(jīng)常有贈書/紅包福利活動


          萬水千山總是情,點個????行不行

          瀏覽 43
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜免费无码 | 免费观看性感美女被操逼视频网站 | 日本三级跳转视频 | 青草网址 | 国产精品乱码一区二区三区视频 |