2023年3月30日 星期四

Toots : yt-dlp 下載 Youtube 或是其它網站的影音

2023年3月30日 星期四

每次別人問我如何下載 Youtube 影片,或是如何將 YouTube 影片下為 MP3,我唯一推薦使用的就是 youtube-dl,原因無他,它實在太強大了,不只可以下載 Youtube 的影片,很多知名網站的影音都可以下載。不過,它的小缺點是,原生的 youtube-dl 必須在命令列中自己打指令,如果想把影片轉為 mp3,還必須安裝 ffmpeg;哈!一般人光看到「打指令」、「安裝」就倒退 N 步了;所以有一些披著圖形界面,然後在背後使用 youtube-dl 的工具就應運而生。不過,如果要將 youtube-dl 的強大發揮到極至,打命令還是最有效率的。

一、兩個月前,突然發現原生的 youtube-dl 無法下載 YouTube 的影片了,到 github 中陸續看到有人在回報問題,因為原專案 (ytdl-org 的 youtube-dl) 最近一次更新一直維持在 2021.12.17,只好改用比較活躍的另一個分支 yt-dlp

填寫表單自動安裝並下載影音

哈!當然,yt-dlp 當然還是以下指令的方式來使用。好啦!我在 Google Colab 中建了一個筆記本(畫面參考底下的 [圖1]),將 yt-dlp 稍微包裝了一下,就可以利用表單來填寫要下載的影片網址、勾選要下載 mp4 影片,還是 mp3 音檔,不用自己面對指令了。

[圖1] 中的「url」的輸入欄位,是用來輸入想下載的影音網址,以 YouTube 來說,可以輸入單一影片的網址,或是播放清單的網址;選取完想要下載的是 mp4 (影片),或是 mp3 (純聲音),再按一下「播放」的圖示,就會自動安裝並依設定執行程式,剩下的就是等待 Colab 幫我們將影音處理好,然後下載囉!這個 yt-dlp 的 Colab 筆記本可以在桌機、筆電、手機或是平板中執行,不過行動裝置因為有自動鎖定螢幕的機置,可能會中斷程式的執行,影片比較大的時候,要注意鎖定螢幕的問題。

[圖1] Colab 上的 yt-dlp

yt-dlp 影音下載工具的網址

下面這個是針對 yt-dlp 建立的 Google Colab 筆記本:

使用的方法很簡單,打開網址以後,進入 Colab 的頁面,先按一下上方的「複製到雲端硬碟」,即可在自己的雲端硬碟建立副本,並自動開啟;以後要下載影音時,就到自己雲端硬碟的「Colab Notebooks」資料夾中開啟自己建立好的副本即可;如果我的功能有更新,刪掉原有的副本,再開啟上面的網址,重新建立副本使用即可。

yt-dlp 合併為 mp4 的指令使用與除錯筆記

以下純屬個人的筆記,如果只是要用前述的工具,這部份建議略過不看,以免頭暈 ^_^ 。

在使用 yt-dlp 時,發現它和原生的 youtube-dl 顯著不同的地方。以預設值,直接下載 YouTube 的影片,它會將影片及聲音合併為 .mkv 格式的檔案;查了一下參數,照說使用「--merge-output-format mp4」可以將影音合併為 .mp4 的,但是一切並沒有如預期那麼容易,在我的電腦上,或是在 Google Colab 的環境中,都會出現類似這樣的錯誤訊息:

[youtube] wSBXfzgqHtE: Downloading android player API JSON
[info] wSBXfzgqHtE: Downloading 1 format(s): 248+251
[dashsegments] Total fragments: 6
[download] Destination: test3.f248.webm
[download] 100% of   55.29MiB in 00:00:25 at 2.14MiB/s
[dashsegments] Total fragments: 1
[download] Destination: test3.f251.webm
[download] 100% of    4.83MiB in 00:00:02 at 2.20MiB/s
[Merger] Merging formats into "test3.mp4"
ERROR: Postprocessing:   Stream #1:0 -> #0:1 (copy)

從訊來看,影片有下載回來 (248.webm),聲音有下載回來(251.webm),問題出在最後合併為 .mp4 的階段。

如果我們在 yt-dlp 的指令中再加上「-v」,可以更清楚問題點。摘錄最關鍵的錯誤訊息:

Input #0, matroska,webm, from 'file:test3.f248.webm':
  Metadata:
    encoder         : google/video-file
  Duration: 00:04:48.66, start: 0.000000, bitrate: 1606 kb/s
    Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv, bt709), 1920x1080, SAR
 1:1 DAR 16:9, 29.97 fps, 29.97 tbr, 1k tbn, 1k tbc (default)
Input #1, matroska,webm, from 'file:test3.f251.webm':
  Metadata:
    encoder         : google/video-file
  Duration: 00:04:48.68, start: -0.007000, bitrate: 140 kb/s
    Stream #1:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
[mp4 @ 0000000000146400] track 1: codec frame size is not set
[mp4 @ 0000000000146400] opus in MP4 support is experimental, add '-strict -2' i
f you want to use it.

Could not write header for output file #0 (incorrect codec parameters ?): Experi
mental feature

如果照上面紅色訊息中的指示,將「-strict -2」加在 ffmpeg 的參數中,的確就可以解決問題了。再去搜尋一下「opus in MP4 support is experimental, add '-strict -2' i f you want to use it.」,原來問題在 ffmpeg 的版本,我電腦中的 ffmpeg 和 Google Colab 環境中使用的 ffmpeg,都不是最新版,不加「「-strict -2」」,它就無法將「.webm」的聲音檔合併到 .mp4 中。如果將 ffmpeg 更新為最新的版本,ffmpeg 會自動幫忙處理好,yt-dlp 就不會因無法合併 .webm 產生錯誤而中斷了。

如果不更新 ffmpeg 也可以解決被 .webm 聲音檔打斷合併為 .mp4 影片的問題嗎?

既然知道是 .webm 聲音檔在作祟,那我們就限定聲音使用 mp4 可接受的聲音檔就好了,例如指定使用「m4a」格式,例如:

yt-dlp  -f "bv+ba[ext=m4a]/b" --merge-output-format mp4 https://www.youtube.com/watch?v=dQomed4X80U

上面的關鍵在「-f "bv+ba[ext=m4a]/b"」裡的「ba[ext=m4a]」,它指定使用音質最好的聲音檔,而且指定要使用「m4a」格式的,這樣一來,影片和聲音合併為 .mp4 時就不會有問題了。

有沒有更簡單的?

當然有,像這樣:

yt-dlp  -S "ext" --merge-output-format mp4 https://www.youtube.com/watch?v=dQomed4X80U

加上「-S "ext" 」的話,根據 yt-dlp 參數範例的說明,它就會用附檔名來決定選用的優先順序:

  • 影片的優先順序: mp4 > mov > webm > flv 
  • 聲音的優先順序: m4a > aac > mp3 ...

「m4a」是會被優先選用的,完全符合我們合併為 .mp4 時的需求。

在 Colab 中將除錯的歷程記錄在下列筆記本中:

可以實際觀察到 Colab 目前的 ffmpeg (ver. 4.2.7) 和 yt-dlp (ver. 2023.03.04) 的錯誤訊息及可行的參數運用方法。

相關連結


2023年3月23日 星期四

在 Chrome 中使用 New Bing Chat

2023年3月23日 星期四

 想要使用微軟的 New Bing Chat 一定要用 Edge 嗎?哈!可是我的老電腦是 Windows 7 ,根本無法安裝 Edge 啊!

沒關係,只要讓 Chrome 或是 Firefox ...... 「宣稱」自己是 Edge 就可以使用 New Bing Chat 了。 

以 Chrome 來說,最簡單也最安全的方式是安裝 Goolge 自家的擴充功能「User-Agent Switcher for Chrome」,在「chrome 線上應用程式商店」中的網址如下:

這個擴充功能可以讓我們自訂在哪一個網站時,要「宣稱」使用的是哪一種瀏覽器(其實就是送資料給該網站前,先更改了「User-Agent」)。

安裝擴充功能

先在 Chrome 中打開前述的網址,然後參考 [圖1] 及 [圖2] 來安裝擴充功能「User-Agent Switcher for Chrome」:

[圖1] 按「加到 Chrome」鈕

[圖2] 按「新增擴充功能」


設定擴充功能

安裝好「User-Agent Switcher for Chrome」,因為它內建的資料中,並沒有 Edge 瀏覽器的,所以我們必須自己新增 Edge 瀏覽器的相關資料;而且我們也只想應用在 New Bing 網站而已,所以也要告訴擴充功能,什麼時候才要啟用。

因為 New Bing Chat 目前只會檢查我們送出的「User-Agent」是不是 Edge 的,所以我們設定的目標就是:

  • 只有在 New Bing 的網站時才「宣稱」是 Edge,New Bing 的網址是:
    • www.bing.com
  • Edge 的 User-Agent 假設是:
    • Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1474.0

設定好目標以後,我們就可以來進行擴充功能的設定了。

先開啟「User-Agent Switcher for Chrome」的「選項」:

[圖3] 在擴充功能中按「詳細資料」

[圖4] 在「擴充功能選項」按開啟選項的圖示

進入「User-Agent Switcher for Chrome」的設定畫面後,先在「Custom User-Agents」的 Custom User-Agent List 下方新增 Edge 的資料,填入以下資料:

  • New User-agent name : 
    • Edge
  • New User-Agent String :
    • Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1474.0
  • Group :
    • Edge
  • Append? :
    • 選取「Replace」
  • Indicator Flag : 
    • Edge

輸入完畢,類似 [圖5],就按「Add」鈕:

[圖5] 在「Custom User-Agent List 」新增 Edge 的資料

最後,要指定在 www.bing.com 時,「宣稱」是 Edge。按一下左側選單中的「Permanent Spoof List」,然後先在「Domain」的欄位中,輸入 bing 的網域名稱「 www.bing.com」;接著在「User-Agent String」清單中選取前一步驟新增好的「Edge」;都好了就如 [圖6] 按 [Add] 鈕:

[圖6] 在 「Permanent Spoof List」設定套用的網域

新增完,在「Permanent Spoof List」的清單中,應該會像 [圖7] 多一筆出來:

[圖7] 「Permanent Spoof List」多了一筆資料

開始在 Chrome 中使用 New Bing Chat

如果前面「User-Agent Switcher for Chrome」的安裝與設定都完成了,只要在 Chrome 中開啟 New Bing Chat,就能像 Edge 一樣使用了。

[圖8] 在 Chrome 中使用 New Bing Chat

在 Firefox 使用 New Bing Chat

在 Chrome 中可以,在 Firefox 也可以嗎?

如果在 Firefox 中,可以這樣:

  • 在網址列中輸入以下內容,並按 Enter 鍵:
    •  about:config
  • 看到一個警告的訊息,按:
    • 「我承諾我會小心」
  • 在搜尋欄中輸入這項設定:
    •  general.useragent.override
  • 應該看到一個名為 general.useragent.override 的設定項目。
    • 按一下「字串」,再按一下「加號」,即可輸入 Edge 的 User-Agent 字串。

經過這樣的設定,也是一樣可以使用 New Bing Chat,只是,試過後才發現一個大問題,在 New Bing Chat 的畫面中,無法捲動畫面,這樣子,前面的對話就看不到了。

所以記得要在 about:config 中順便找到這項目:

  • layout.css.overflow-overlay.enabled

預設值是「false」,按一下最右側的「切換圖示」,就可以變成「true」。

網過前述的兩項設定,就可以在 Friefox 中使用 New Bing Chat。






2023年3月22日 星期三

oTranscribe 線上聽打逐字稿改良版

2023年3月22日 星期三

「輕鬆聽寫逐字稿的免費網路應用程式。」是 oTranscribe 首頁中的中譯自述,去年底玩了一下,覺得滿好用的。如果有錄音檔或是影片檔,想變成逐字稿或是字幕檔,可以將影音檔案,先利用 OpenAI 的 Whisper 以語音辨識,輸出為「SRT 字幕檔」(請參考「雄:使用 OpenAI Whisper 製作影音的字幕或逐字稿」),然後再使用 oTranscibe 來進行聽打、編修、校正。

之前由於原始的 oTranscribe 無法匯入、匯出 SRT 字幕檔,還寫了兩個小工具,可以將 SRT 字幕檔轉為 oTrnascribe 自己的 .OTR 格式,或是將 oTranscribe 編輯過的內容匯出為 SRT 字幕檔,不過,多了道「轉檔」的程序,還是覺得有一點麻煩。

因為 oTranscribe 是開源的,由 Github 將原始碼下載回來以後,看著、想著好幾天,決定動手將它改良一下,於是在 Github fork了一份,並將自己改過的原始碼也分享上去。

體驗改良版 oTranscribe

如果想試試看改良過的 oTranscribe,就按一下底下的這個網址:

以使用者角度來看,改良版幾個主要加強的功能如下:

  • 會依瀏覽器的語言設定,自動選擇語言;有需要再自行更換別的。
  • 匯入的功能可以直接匯入 .srt 的字幕檔。所以建議可以先使用 OpenAI Whisper,將影片或是音檔,先進行語音辨識成為「.srt 字幕檔」,就可以直接匯入 oTranscribe 中 [圖1]。
  • 匯出的功能中新增了兩個選項 [圖2]:
    • SRT 字幕格式 (.srt)
    • 去掉時間的文字稿(.txt)
  • 將時間戳記改統一放在每一段文字的開頭,讓段落更清楚。
  • 影片播放時,會自動標示正在播放哪一個時間點的逐字稿 [圖3]。

改良版的截圖如下:

[圖1] 改良版可直接匯入 .srt 字幕檔
[圖2] 改良版可匯出 .srt 字幕檔或是無時間的文字檔
[圖3] 改良版播放時會標示正在播放哪一個時間戳記的內容

2023.03.16 有錄了一小段改良版的操作,雖然畫面不是此時最新版本的畫面,但還是可以參考看看:



改良版 oTranscribe 的原始碼

改良版的原始碼在這裡:

這個版本的原始碼中,目前幾個增強的重點:

  • 修正各網頁中「font-awesome.css」的連結錯誤,這個錯誤會讓本機中執行時,卡很久。
  • 修改了 webL10n 在本機執行的載入流程,讓它匯入特製的語系檔「data.ini.js」,這樣可以直接在本機中正常使用。
  • 修正匯出的面板中,因為面板是動態產生,無法正常被處理文字翻譯的問題。
  • 新增了可以在 Windows 中編譯的批次檔「make-in-windows.bat」。
  • 其它新增的功能可參考前面「體驗改良版 oTranscribe」中的說明。

有興趣打造自己的 oTranscibe 的話,我利用 Colab 建立了一個 oTranscibe 編譯程序的筆記本,網址如下:

因為 Colab 中,開發的環境基本上都建立好了,應該會相對單純;有需要的話,只要將自己的檔案再加進去,編譯完還可以將成品打包,下載回來測試。

相關連結

更新記錄

  • 2023.03.19 加入可顯示播放到哪一段的功能;微調匯出面板的位置,解決因為新增的兩個選項,位置變得太低,沒對準匯出圖示的問題;暫時將匯出到 Google Drive 的功能關閉(得申請 Google 的金鑰才能用,反正沒差,大家自己手動上載到 Google Drive 也是可以的)。
  • 2023.03.18 修正 font-awesome.css 連結有誤的問題;匯出的檔名中,時間字串改為全用數字表示;解決匯出面板未正常填入語系字串的問題;讓本機執行時,也可以正常切換語言(主因是本機無法載入 .ini 檔案);專案中新增可在 Windows 中編譯用的批次檔。
  • 2023.03.16 fork 並加入匯入、匯出字幕檔,自動偵測語言的功能。


2023年3月13日 星期一

Tools: 字幕檔格式簡單修復與去掉時間戳記變純文字

2023年3月13日 星期一

寫在前面

有鑑於用原版的 oTanscribe 編輯字幕檔,需要將檔案轉換來又轉換去的,實在太複雜了;經過三天的研究,將開源的 oTranscibe 改了一個我自己想要的版本,直接放在 Gihub 中。請參考較新的這一篇文章:

改過的版本,最重要的是加了以下的功能:

  • 可直接匯入 .srt 的字幕檔。
  • 可直接匯出 .srt 的字幕檔,或是去掉時間戳記的純文字檔。

哈!所以如果使用上面這個改過的 oTranscibe,本篇文章就可以忽略不看了。(補記於 2023.03.16)

改良版的 oTranscribe


原始貼文開始

在「雄:字幕檔轉為 oTranscribe 線上聽打逐字稿工具的格式」中提到,我們可以將 .srt、.vtt 格式的字幕檔轉為 oTranscribe 的格式以後,將 .otr 檔案「匯入」oTranscibe 中去和音檔,邊聽邊校正,校正完,可以再利用 oTranscribe 的「匯出」功能,下載校正完的結果;不過,oTranscibe 的匯出格式只有「Markdown (.md)」、「Plain text (.txt)」和「oTranscribe format (.otr)」三種,如果沒有繼續修改的需求,看來應該就是選擇用「Plain text (.txt)」來「匯出」囉!

不過,問題來了,如果是字幕檔,因為被 oTranscibe 轉換過,換行字元都亂了,應該無法直接給 Youtube 或影片播放器使用;如果是逐字稿,多了「時間戳記」,看起來應該很礙眼。怎麼辦?如何有效率地處理格式,或是去掉「時間截記」?

格式的轉換向來是電腦的強項,當然是用程式去分析、處理就好了。下面提供兩項 oTranscibe 匯出的「Plain text (.txt)」檔案後續處理的功能:

  • 字幕檔格式修復:去掉多餘的換行符號、重新排號碼。
  • 逐字稿去掉時間戳記:將字幕格式才需要的編號及時間戳記刪除。

使用的方法很簡單,可以先看一下示範的影片,再看重點整理:

示範影片


使用方法及工具

1.匯出文字檔:

在 oTranscribe 畫面中的右側,找到「匯出」(export) 的圖示,

[圖1] oTranscribe 匯出鈕

按 [匯出] 後,跳出「登入 Google 帳號」的小視窗可以關閉。

[圖2] 關閉登入 Google 的視窗

在「Download trascript as ...」選單中按「Plain text (.txt)」,即可下載文字檔。

[圖3] 下載格式 Plain text (.txt)

2.執行任務:

將匯出的文字檔拉到底下的圓圈中,並選擇要執行的功能;預覽沒問題,就可以按圓圈下方的下載按鈕。

字幕格式   去掉時間   oTranscribe

相關連結


2023年3月6日 星期一

OpenAI : ChatGPT 應用 : 製作雙語電子書

2023年3月6日 星期一

 最近有個開源的專案「bilingual_book_maker」,將 EPUB 格式的電子書的內容,一段段抓出來後,利用 OpenAI ChatGPT 翻譯以後,再重組輸出成雙語的電子書,專案的網址如下:

我將程式碼移植到 Google Colab 上玩,只要準備好 EPUB 電子檔及 OpenAI 的 API Key,就能在 Colab 中體驗「bilingual_book_maker」的功能。

製作工具網址及使用方法

Colab 筆記本的網址如下:

請建立自己的副本後再使用,如何利用前述工具來製作雙語的電子書,以下影片中有簡單的介紹:

如何取得 OpenAI 的 API Key

OpenAI 的 API Key 可以由底下的網址直接進入管理介面後取得:

簡單的操作介紹影片:

如何製作 EPUB 檔案

製作 EPUB 格式電子書的工具不少,最簡單的方式,可以利用 Google 文件、LibreOffice、Sigil ...... 等工具輸出 .epub。

要注意的是,目前「bilingual_book_maker」是一段段的方式(以 HTML 的 <p> 分段),所以分段的好壞,應該會影響到效率與效果。

更新記錄

  • 2023.03.21  bbook_maker 中的 Google 翻譯會有因為電子書內容太多,而未完全翻譯的情形,另外也限定翻為簡體中文,所以改用 googletrans 4.0.0-rc1 來進行翻譯,順便解決設定輸出語言的問題。
  • 2023.03.17 改用安裝 bbook_maker 的方式,安裝最新版本;參數加入 resume_enable 及 translate_tags。
  • 2023.03.07 有時會出現簡體字的問題解決。參見 :
    https://github.com/yihong0618/bilingual_book_maker/commit/2d5972e76d022cda94a9cc9b9d2d011aa9a614f4
  • 2023.03.05 初稿


2023年2月27日 星期一

TPET-生生用平板-師師有法寶-筆順練習QRCode產生器

2023年2月27日 星期一

這是一個響應南投縣江明勳老師發起的「生生用平板-師師有法寶-TPET共編」活動而開發的小工具,共編活動可以參考江老師這篇文章:

「TPET-生生用平板-師師有法寶-筆順練習QRCode產生器」是使用 Google 簡報的擴充功能,將我們輸入的生字資料,解析後,套用簡報中特別設定的樣板後,以批次的方式,產生筆順練習的 QR Code 投影片,投影片可以直接播放,按下QR Code 圖片,即可前往筆順練習的頁面;或是將簡報列印成紙本,讓學生用載具掃瞄QR Code 的方式,應用於課堂中。

[圖1] TPET-生生用平板-師師有法寶-筆順練習QRCode產生器截圖

工具網址

「TPET-生生用平板-師師有法寶-筆順QRCode產生器」工具網址如下:

請建立自己的「副本」後使用。

示範影片

底下的影片有 QR Code 產生器的簡單介紹與使用示範:

使用說明

底下以截圖簡單的介操作步驟。

首次使用:建立副本、進行授權

第一次使用「TPET-生生用平板-師師有法寶-筆順練習QRCode產生器」,得先建立自己的「副本」,並進行「授權」的程序,才能執行 Google 簡報擴充功能中的程序。

開啟工具網址:

按上方主選單 [檔案] 中的「建立副本」「整份簡報」

[圖2] 按「建立副本」「整份簡報」的選單

出現「複製文件」的對話框,按「建立副本」的按鈕

[圖3] 按「建立副本」的按鈕複製到自己的雲端硬碟中

如果成功的話,自己的雲端硬碟中會多一份 QR Code 產生器簡報的副本。等一會兒,在自己的副本主選單的右側,應該會多一個「TPET-生生用平板-師師有法寶」。

[圖4] 「TPET-生生用平板-師師有法寶」的選單

按一下主選單中的「TPET-生生用平板-師師有法寶」,再按裡面的「QRCode產生器-輸入生字並製作筆順QRCode」。

因為是第一次使用, Google 會要求針對擴充功能的程式進行授權,所以會出現授權的畫面,按一下「授權」的按鈕:

[圖5] 授權的程序

按完「授權」的按鈕,接著依底下 [圖6] ~[圖9] 的步驟完成授權的程序:

[圖6] 選擇和副本所在的帳號

[圖7] 按「進階」
[圖8] 按「前往...」
[圖9] 按「允許」

批次製作筆順練習 QR Code

自己建立的 QRCode產生器經過授權以後,就可以準備開始批次製作筆順練習 QRCode 了。首先開啟一個試算表,類似 [圖10] ,在第一欄輸入 QR Code 上方要出現的標題字,在第二欄則輸入要練習的生字;按照這樣的格式,一行行完成輸入。

[圖10] 在試算表中輸入生字的資料

將試算表生字資料的兩個欄位選取,並複製。

回到 QRCode 產生器,按主選單中的「TPET-生生用平板-師師有法寶」「QRCode產生器-輸入生字並製作筆順QRCode」:

[圖11] 開啟輸入生字的側欄

在簡報編輯區的右邊,應該會出現側欄,可供輸入資料。

[圖12] 輸入生字的資料

在側欄的「生字清單」輸入區中,貼上在試算表中複製的兩欄生字資料(手動輸入的話,標題字跟生字之間用兩個井字號 ## 分隔)。都好了,就按「送出並開始新增QRCode投影片」鈕。就會出現 [圖13] 的等候畫面。

[圖13] 製作 QRCode 投影片中的畫面

如果輸入的資料格式沒問題,一頁頁帶有筆順練習的簡單就完成了。

[圖14] 完成的筆順練習投影片

Q & A

  • Q : 生字清單可以不加標題嗎?
    A : 可以的,生字清單的輸入區中,可以只輸入生字就好;沒有標題欄位時,會用「筆順練習」當預設的標題。
  • Q : 生字清單中,一行可以放多少個生字?
    A : 每一行的生字字數並沒有限制,字數對筆順練習的程式沒有影響,只有投影片右側的內容預覽,因為格子只有21格,只會暫時顯示前21個字,筆順練習時沒有影響。
  • A : 可以自己改輸出的樣板嗎?
    Q : 可以自訂的,想修改樣版,就按主選單 [投影片] 的「編輯主題」,找到筆順的那個版面來修改。要注意的是,程式會使用到有標上「{{QRCode}}」、「{{title}}」及填入預覽生字用的那 7x3 的表格,不要更改兩組大括號標註的文字,不然,程式會找不到要處理的物件。

相關連結

更新記錄

  • 2023.02.27 在 Google Apps Script 中加入「@OnlyCurrentDoc」的註解,限縮授權範圍僅止於產生器的簡報而已。
  • 2023.02.26 改用「自訂版面」當樣本;幫 QRCode 圖片加上連結,方便在電腦中操作使用;生字清單改採兩個欄位的格式,並能接受試算表用跳格(TAB)符號當欄位分隔。
  • 2023.02.24 初稿。








2023年2月22日 星期三

使用 OpenAI Whisper 製作影音的字幕或逐字稿

2023年2月22日 星期三

前言(廢話一堆,可忽略不看)

 試了不少影音編輯工具(平台)的自動語音辨識產生字幕的功能以後,發現很多看起來都差不多;後來看到了這個 auto-subtitle 的專案:

它是使用 OpenAI 的 Whisper 來進行語音辨識,哈!只能說自己實在太孤陋寡聞了,現在才注意到有 OpenAI Whisper。Whisper 有開源,它的專案連結在底下:

如果已經準備好 Python 的環境,可以將它安裝在本機上,在專案中有簡單的說明。如果想快速測試,那當然是直接使用 Google 的 Colab 來建置最方便。Colab 已經有基本的 Python 環境,Whisper 需要的 ffmpeg 及一些可能需要用到的套件都內建好了。

好康A~跟您分享

好東西,只給自己用太可惜了,所以我將自己在本機上實驗的程序,移植到 Google Colab 中,還加上了一些功能,大家可以直接使用,不用管安裝的過程。

這個 OpenAI Whisper@Colab 有以下的功能:

  • 可輸入 Youtube 影片的網址,產出影片的字幕檔後下載。
  • 可輸入 Youtube 播放清單的網址,產出清單中所有影片的字幕檔,並置入壓縮檔中後下載。
  • 可輸入 Vocaroo 線上錄音的網址,解析出音檔的文字內容。
  • 可讀取上載到 Colab 暫存空間的影音檔案,產出字幕內容後下載。
v.2 版增強的功能:
  • 可輸入已設定為「公開分享的」Google Drive 影音網址(v.2 版才支援)
  • 可輸入檔名為「.txt」的轉換清單檔案,裡面一行一個要辨識的網址或是檔名,執行時就可以批次進行辨識(v.2 版才支援)
  • 可自訂輸出的資料夾名稱(v.2 版才支援)
  • 可自訂是否要覆蓋已經辨識過的文字檔。(v.2 版才支援)

工具網址

這個「OpenAI-Whisper-語音辨識-製作字幕檔」的工具存放在 Google Colab 的筆記本,網址如下:

影片說明

底下的影片,簡單地介紹一下如何使用這個工具製作字幕檔:

重點整理

關鍵程序截圖並說明如下:

建立自己的副本,才能執行裡面的程式。之後都開副本就好。

[圖1] 建立自己的 Colab 筆記副本

幫工具加上星號,在雲端硬碟比較好找。按一下 [圖2] 箭頭 1 所指的星星,即可將自己的副本列入 Google 雲端硬碟的左側欄的「已加星號」的分區中。

[圖2] 在自己的副本中操作

進行設定:如 [圖2] 的箭頭 2 ,輸入影音的路徑、選擇語言代碼、輸出的格式、使用的辨識模型...等設定。

執行程式:如 [圖2] 的箭頭 3,按一下「播放」鈕,即可以開始執行 Whisper 的安裝與語音辨識程序。

等候辨識結果:等候的時間需視影片或聲音檔的聲音長度及是否使用 GPU 運算,當然囉,選用 Whisper 的哪一種辨識 Model 也有差異,small 的 model 一定花的時間比 medium 的 model 要少很多,當然,辨識的正確率也會有差別。以前面的介紹影片為例,影片的片長是 5分22秒,選用 whisper  medium 的 model 來辨識,花了快二十分鐘。(註:後來開啟了 GPU,並使用 large 的 model,只花了一分多鐘,建議開啟 GPU 使用;Goolge 讓免費版的  Colab 一天可使用 12 小時左右的 GPU。)

[圖3] 等候時間隨選用的 model 而有差異

如何上載電腦的檔案到 Colab 並進行語音辨識

如果想辨識的影音不在網路上,可以立即上載到 Colab 的「暫存」空間,注意!它是「暫存的」,當我們下回重新開啟 Colab 的筆記本時,上載的檔案會不見哦!下面看一下如何使用這個暫存空間(它的額度和 Google 雲端硬碟是分開算的)。

展開「暫存空間」:按一下左側欄中的「資料夾」圖示,即可展開暫存空間來上載或管理檔案。

[圖4] 展開暫存空間

上載檔案:當「暫存空間」展開後,只要將想上載的檔案,以拖曳的方式,拉進「暫存空間」即可。

[圖5] 以拖曳的方式上載檔案

溫馨提醒,暫存區是會被清空的

[圖6] 暫存區是會被清空的警告訊息

設定檔案名稱:等影音檔案上載完畢,就可以設定要辨識的檔案名稱,如 [圖7] 箭頭1 ,在「url」的欄位中,輸入檔案的「完整名稱」。

[圖7] 設定檔案名稱並執行程式

執行程式:都設定參數了,就可以按 [圖7] 箭頭 2 所指的「播放」鈕來執行語音辨識的程序。

Q & A

  • Q : 可不可以辨識自己雲端硬碟中的影音檔案?
    A : 當然可以。看一下 Colab 「暫存區」上方的圖示,其中有一個是「連接雲端硬碟」的圖示,按下去以後,照指示,就可以將雲端硬碟變成暂存區中的一個資料夾來存取檔案了。找到要使用的檔案後,按一下檔案,檔案的右邊會有「三個點點」,按一下「三個點點」即可出現檔案管理的選單,按選單中的「複製路徑」,就可以取得「url」要填入的檔名。
  • Q : 如何加快辨識的速度?
    A : AI 需要大量的運算,如果能打開「GPU」的選項,速度會快很多倍,所以一定要在自己的 Colab 中,選用 GPU 的選項,設定的方法:
    1.在 Colab 上方主選單中,按一下「編輯」。
    2.按一下「筆記本設定」。
    3.在「筆記本設定」的「硬體加速器」中,選「GPU」。

相關連結

自己的雜記(還是廢話,請忽視)

順便筆記一下,免得忘記又重新掉坑的。

Windows 7 安裝最近版的 Anaconda ,出現「Failed to create menus」的錯誤訊息而無法安裝。因為系統太舊,無法安裝 Python 3.9,所以卡住。只好改用舊版的 Anaconda,像 2021.05 是使用 Python 3.8 的。舊版的可以在這裡找到:

最後改安裝「Anaconda3-2021.05-Windows-x86_64.exe」。

照說安裝完 openai-whisper 後,除了 python 的套件,應該也會有 .exe 的執行檔,但是我在一台沒有安裝過 Python ,全新安裝 Anaconda 的 Windows 10 上,直接執行 whisper 的命令卻出現找不到指令的錯誤訊息。查了一下,原來 whisper.exe 被安裝到使用者目錄(ex. userA) ,類似底下的路徑中:

Users\userA\AppData\Roaming\Python\Python39\Script 

為了方便使用,可以將該路徑加入環境變數中。

Windows 7 的舊版 Anaconda 則是將 whisper.exe 放到 ananconda 目錄中的 scripts 中,該路徑已經在環境變數的 PATH 裡了。版本不同,安裝方法不同,路徑就得特別注意一下。


2023年2月16日 星期四

Chrome:剪映字幕下載擴充功能 CapCut Captions Download

2023年2月16日 星期四

 在「雄:利用剪映線上版產出影音的字幕」這篇中,使用了 JavaScript 來下載剪映線上版 ( https://www.capcut.com/editor ) 製作的字幕,為了讓大家也能玩一下,今天乾脆寫了一個 Chrome 的擴充功能,並上架到 chrome 線上應用商店中了,方便大家安裝。上架的工具名稱為「CapCut Captions Download」,網址如下:

安裝的方法很簡單,進入套件的頁面後,如 [圖1] 按「加到 Chrome」 

[圖1] 將擴充功能加到 chrome

出現如 [圖2] 新增的對話框,再按「新增擴充功能」的按鈕

[圖2] 新增擴充功能

兩個步驟即完成 CapCut Captions Download 擴充功能的安裝。

之後再開啟剪映的線上編輯器:

在剪映編輯器畫面的左上角,就會如 [圖3] 多出一個「下載字幕」的按鈕了。

[圖3] 有安裝字幕下載擴充功能,多了一個按鈕

如何製作剪映的字幕,詳細步驟可以參考上一篇「雄:利用剪映線上版產出影音的字幕」。

製作好字幕的話,就可以準備使用「下載字幕」的按鈕來下載字幕了。

CapCut Captions Download 這個擴充功能,提供兩種不同格式的字幕檔下載,一種是純文字的檔案(.txt),也就是檔案中,只有文字而已;另一種則是帶有時間戳記跟文字的字幕檔「.srt」,可供應用在 Youtube 的字幕中。

「下載字幕」的按鈕會依「字幕軌」有沒有被按一下選取,來決定下載的是純文字的字幕檔,或是帶有時間戳記的「.srt」字幕檔。

如果想下載「.srt」的字幕檔,請參考 [圖4] ,下載前,先按一下「字幕軌」的任何一個地方

[圖4] 下載 .srt 字幕的步驟

確定「字幕軌」有被選取了,就可以按左上方的「下載字幕」了。

成功的話,應該會出現「.srt」檔案被下載並儲存。

由於剪映的中文字幕是簡體字,可能需要再轉為繁體字,這部份其實用 Chrome 內建的 Google 翻譯就可以進行轉換了。方法如下:

首先,在 Chrome  中開一個新的「分頁」,然後將字幕檔拖曳進該「分頁」,文字是簡體字;按一下滑鼠的「右鍵」,應該會看到類似 [圖5] 的畫面:

[圖5] 按滑鼠右鍵有「翻譯成中文(繁體)」的功能選單

按一下「翻譯成中文(繁體)」。

就會類似 [圖6] ,簡體字變繁體字了:

[圖6] 變成繁體字

變成繁體以後,就可以將畫面的文字全部選取 (按鍵盤的 Ctrl + A),然後複製到要貼的地方了。

相關文章





2023年2月10日 星期五

利用剪映線上版產出影音的字幕

2023年2月10日 星期五

剪映(CapCut)有個「智能字幕」「識別字幕」的功能滿好用的,可以由編輯軌中的音源中,利用語音辨識來產出字幕,與之前 pyTranscriber 使用 Google 辨識的結果比較,略勝一籌。哈~好用,不過因為有舊陰影,將這工具安裝在電腦中,心裡還是覺得毛毛的。

其實剪映也有線上版,因為是在瀏覽器中操作,「感覺」安心一點點(哈!這什麼心態啦!)。缺點大概就是它似乎沒有中文介面,素材上載到網站要等它一下(尤其是需要轉檔的),最重要的,想匯出字幕檔,得登入(不就又要奉送個資)。

哈!線上版的最大好處是有機會可以將資料「撈出來」,這樣一來,就不用登入了啦!試了一下,還真撈得到。底下記錄一下流程。

CapCut 的線上編輯網址:

進入後,要先選個模板,因為只是借用它來產出字幕,選擇空白的模板即可。

選擇空白模板並按 Create 鈕

選完按「Create」鈕,即可進入編輯畫面

將影音素材上載

點左側選單「Media」圖示,再點裡面的「Project」,就可以將要產出的影片或是MP3 語音檔拉進素材上載區中了。

將影音素材新增至編輯軌中

將要上載完的素材新增至編輯軌中,就可以準備製作字幕了。

語音辨識字幕的設定程序

由語音自動辨識字幕的功能在「文字」的功能中,所以先按左側有「T」字樣的圖示,再按「Auto captions」,因為我們要用語音辨識,所以接著在「Recognize voice」中的「Language」選擇語言為中文「Chinese」(是的,當然沒有繁體中文可選)。都設定好,就可以按「Create」鈕,開始進行語音辨識,製作字幕了。

語亯辨識中

接著就等語音辨識結果出爐。

點一下字幕軌

試了幾個不同的檔案,語音辨識等候的時間比在本機操作時快很多。

字幕軌出現後,按一下字幕軌,右邊就會出現「Captions」的區塊,可以查看並修改字幕內容。

基本上,在頁面上看得,當然就可以擷取下來,一句句複製嗎?這種簡單又重覆的事,當然是要交給程式來做。

2023.02.16 註:

底下的程式可以跳過,我寫了一個 Chrome 的擴充功能,用來下載字幕,已在 Google 線上應用程式上架了,網址如下:

利用底下的 JavaScript 可以解析頁面的內容,找出字幕,並將它轉為「.srt」字幕檔的格式,最後將內容複製到剪貼簿中。

var items, item, timeStart, timeEnd;
var output = '';
items = document.getElementsByClassName('attribute-subtitle-item');
for (var i = 0; i < items.length; i++) {
  item = items[i];
  timeStart = item.querySelector('.start').innerHTML;
  timeEnd = item.querySelector('.end').innerHTML;
  subtitle = item.querySelector('.textarea').value;
  //to .srt format:
  //1
  //00:00:01,166 --> 00:00:03,133
  //字幕文字
  //
  output += (i + 1) + '\n';
  output += '00:' + timeStart + ',0' + ' --> ' + '00:' + timeEnd + ',0' + '\n';
  output += subtitle + '\n';
  output += '\n';
};
console.log(output);

copyAndSelectToClipboard = function (id) {
  var target;
  if (typeof(id) == 'string') {
    target = document.getElementById(id);
  } else if (typeof(id) == 'object') {
    target = id;
  }
  target.select();
  document.execCommand("copy");
  window.getSelection().removeAllRanges(); // to deselect
};
var elm = document.createElement("textarea");
elm.value = output;
document.body.appendChild(elm);
copyAndSelectToClipboard(elm);
document.body.removeChild(elm);

只要點過「字幕軌」讓字幕編輯區出現後,將上面的程式程貼到瀏覽器「開發人員工具」的「Console」中執行,剪貼簿中應該就會有 CapCut 產出的字幕了。

瀏覽器中執行字幕擷取程序

不過字幕還是簡體字,再進行一下簡轉繁的程序就好(個人在 Windows 中是習慣用 ConverZZ)。

哈!貼程式碼令人害怕,應該要來寫個 Chrome 的擴充功能,按一下就自動下載字幕檔才對。

註:看起來,有中文界面的線上版 https://www.capcut.cn/editor (網址的網域是 .cn)和前面使用的 https://www.capcut.com/editor (網址的網域是 .com)最大的差異,其它不講,後者雖然沒中文界面,但卻有語音辨識可以自動產出字幕,而且素材的部份可以直接上載 .mkv 的影片檔案(.cn 那個則要事先將副檔名改為 .mp4 才能上載,這又是什麼跟什麼,檔案的名稱有那麼重要嗎!)。

相關文章



 
雄::gsyan © 2009. Design by Pocket