顯示具有 資訊_應用 標籤的文章。 顯示所有文章
顯示具有 資訊_應用 標籤的文章。 顯示所有文章

2023年11月9日 星期四

以 Faster Whisper 將影音辨識為文字檔案(字幕或逐字稿)

2023年11月9日 星期四

前言

為了方便製作影片或是音檔的字幕檔、逐字稿文字檔, 2023年2月底,我在 Google Colab 筆記本中,結合了 OpneAI Whisper 及 yt-dlp,搭配 Colab 簡單的網頁界面,可輸入像是影音網址(或是檔案路徑)、Whisper 的語音辨識模型大小、輸出格式......等自訂的參數;設定完參數,按個「執行」鈕,就可以不用管程式的安裝及享用 Colab 提供的 GPU 運算力,輕鬆坐等接收語音辨識的結果 (詳見「雄:使用 OpenAI Whisper 製作影音的字幕或逐字稿」)。

好一陣沒錄教學影片,前幾天為了幫新錄的影片加上字幕,才發現在 Colab 中安裝 OpenAI Whisper 似乎要多花很多倍的時間,以我片長不到五分鐘的影片來說,語音辨識只要幾秒鐘,等待安裝卻要幾分鐘,實在不成比例(註:2023.11.22 再次使用 OpenAI Whisper,安裝時間要很久的問題已不存在,看起來應該是相關套件的版本已跟上,不用樣樣都需要重新編譯,回復到可以順順地使用 OpenAI Whisper的狀態。)。於是開始找是否有更好的方案,找到了 guillaumekln (Guillaume Klein) 的 Faster Whisper 專案:

Faster Whisper 是使用 CTranslate2 的界面加上 OpenAI Whisper 開放出來的模型,可以大幅減少記憶體及其它資源的耗用,又能有與原 OpenAI Whisper 差不多的輸出結果,這樣是不是很讚!

經過這幾天的實測,至少安裝程序等候的時間是少很多、耗的資源小很多~~,輸出的內容和 OpenAI Whisper 的結果差不多,真的是小而美。要說缺點的話,大概是因為它目前沒有提供直接輸出成字幕格式的檔案,不過,這算是小事,只要用其它的套件,多寫幾行程式碼來補足功能,轉換一下輸出格式就好了,哈!相關程序我都在底下放在 Colab 中的工具處理好了。

工具網址

整合在 Colab 中的「Faster-Whisper-語音辨識-輸出文字檔」工具,放在這個短網址中,開啟後就能使用:

使用方法

先開啟工具的網址,進入頁面,往下捲,在說的的下方,應該會有如 [圖一] 的輸入區:

[圖1] Faster Whisper 的操作程序

1.上載檔案:如果想上載電腦中的影片或是音檔,就按 [圖1] 箭頭1所指的 [檔案] 圖示,就可以將要進行語音辨識的影音檔案上載。上載完的檔案或是使用 Google 雲端硬碟的檔案,如何複製檔案的路徑,請自行參考「操作示範影片」中的示範。

2.在「url」中填入影音的來源:

  • 存放在網路的「公開」影音,就貼入網址,YouTube(影片或是播放清單)、FB、雲端硬碟、Vocaroo......等的「公開分享」網址。
  • 在放在電腦中的檔案則需要先上載到 Colab 中,然後再「複製路徑」,將檔案的路徑貼到「url」的欄位中。
  • 如果想批次進行語音辨識,則是將前述的網址,通通先貼到一個文字檔(檔名 xxx.txt),一行一個網址或是路徑,儲存後,再將文字檔上載到 Colab 中,最後再「複製路徑」,將檔案的路徑貼到「url」的欄位中;這樣子,程式會依照文字檔的內容,一行行的進行語音辨識。
3.執行程式:填完「url」的欄位後,可以再看看底下的一些選項有沒有要更改的,確定沒問題,要開始執行語音辨了,就按 [圖1] 綠色箭頭所指的執行圖示。接著就等程式自動安裝及執行語音辨識的程序完成。

詳細的過程請參考底下的操作示範影片。

操作示範影片

底下的影片中介紹如何將影音檔案上載到 Colab 或是利用雲端硬碟中的影片來辨識為文字檔:

Q & A

  • Q : 未付費版的 Colab,Fast Whisper / OpenAI Whisper 能執行多久?
    • A : 因為 Whisper 使用到 GPU ,所以目前一個帳號每天只能使用大概 4小時 (以前是12小時)。
  • Q : 給它播放清單或是清單檔案,為什麼執行到一半,中斷了?
    • A : 如果輸出區有出現錯誤訊息,找一下最後幾行,有沒有類似「private video ...」的關鍵字,如果有,表示某一個影音並不是公開分享的,因為抓不到檔案而中斷程式了;將它從清單中移除再試試看。
  • Q: 出現「403: Forbidden」或是「Sign in to confirm you’re not a bot」的錯誤訊息,如何處理?

相關連結


    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> 分段),所以分段的好壞,應該會影響到效率與效果。

    更新記錄

    • 2024.03.18 openai 使用較新版本的 httpx ,導致 googletrans 4.0.0-rc1 無法正常運作,除了修改安裝程序,讓  googletrans 4.0.0-rc1 可以工作,也新增「install_googletrans」的參數,有勾選才會使用  googletrans 4.0.0-rc 來進行 google 翻譯,不然就是使用 bilingual_book_maker 內建的功能。
    • 2023.04.11 安裝改由 Github 更新;加入 single_translate 的參數,只輸出譯文,不輸出原文。
    • 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月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 版才支援)

    工具網址 (2024.10.07 更新過程式)

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

    註:另一個選擇是使用 Faster Whisper,詳見這一篇:

    影片說明

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

    重點整理

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

    [圖1] Google Colab 中操作

    ✅ 進行設定:

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

    ✅ 執行程式:

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

    ✅ 等候辨識結果:

    使用 OpenAI Whisper 等候的時間,需視影片或聲音檔的聲音長度,及是否使用 GPU 運算(本文中的工具預設使用 GPU);選用 Whisper 的哪一種辨識 Model 也有差異,small 的 model 一定花的時間比 medium 的 model 要少很多,當然,辨識的正確率也會有差別。以前面的介紹影片為例,影片的片長是 5分22秒,未使用 GPU 的情形下,以 OpenAI Whisper  medium 的 model 來辨識,花了快二十分鐘;開啟了 GPU,並使用 large 的 model,才花了一分多鐘。所以建議開啟 GPU 使用(本文中的工具預設使用 GPU,Goolge 讓免費版的  Colab 一天可使用 4 小時左右的 GPU)。

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

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

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

    ✅ 展開「暫存空間」:

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

    [圖3] 展開暫存空間

    ✅ 上載檔案:

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

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

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

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

    ✅ 設定檔案名稱:

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

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

    ✅ 執行程式:

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

    Q & A

    • Q : 可不可以辨識自己雲端硬碟中的影音檔案?
      A : 當然可以。看一下 Colab 「暫存區」上方的圖示,其中有一個是「連接雲端硬碟」的圖示,按下去以後,照指示,就可以將雲端硬碟變成暂存區中的一個資料夾來存取檔案了。找到要使用的檔案後,按一下檔案,檔案的右邊會有「三個點點」,按一下「三個點點」即可出現檔案管理的選單,按選單中的「複製路徑」,就可以取得「url」要填入的檔名。
    • Q : 如何加快辨識的速度?
      A : AI 需要大量的運算,如果能打開「GPU」的選項,速度會快很多倍,所以一定要在自己的 Colab 中,選用 GPU 的選項,設定的方法:
      1.在 Colab 上方主選單中,按一下「編輯」。
      2.按一下「筆記本設定」。
      3.在「筆記本設定」的「硬體加速器」中,選「GPU」。
    • Q : 可以使用多久?
      A : 免費版的 Colab ,GPU 一天只能使用4小時,而我放 Colab 的 OpenAI Whisper 或是 Fast Whisper 預設都有使用 GPU 的選項,所以一天只能使用 4 小時;強烈建議不使用時,務必「中斷連線並刪除執行階務」,或是關閉瀏覽器,讓它關掉虛擬機,停止計時。
    • Q: 出現「403: Forbidden」或是「Sign in to confirm you’re not a bot」的錯誤訊息,如何處理?
      A: 請參考這一則「雄:yt-dlp下載錯誤導致 Whisper 無法使用的處理

    相關連結


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

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

    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 裡了。版本不同,安裝方法不同,路徑就得特別注意一下。


    2022年3月27日 星期日

    FFmpeg : 下載 .m3u8 播放清單的串流影片

    2022年3月27日 星期日

     之前下載網路的影片大多是用 youtube-dl,不過,這幾天在某個以前能輕鬆下載的網站中,卻一直吃閉門羹。研究了幾天,稍有一點眉目。

    該網站原來是由播放器載入 .m3u8 的串流播放清單,以前播放清單中放的是影片片段的網址,檔名是用 .ts 來當結尾。這次看到的 .m3u8 有兩個特別之處:一個是裡面又放別的 .m3u8 播放清單;另一種則是裡面不是放 .ts 的網址,居然是 .png 或是 .jpg。

    .m3u8 檔案中放 .m3u8 這沒什麼,頂多是程序上多卡一道。但是放 .png 或是 .jpg 就妙了!而且如果將網所指的下載回來,開啟後,還真的是圖片,只差呈現的是一片白而已。利用網站的影片播放器可以播放影片,但是利用 youtube-dl 或是 ffmpeg 試著下載影片,就會出現下載到的是圖片,不是影片的警告訊息,當然影片也就下載不了。

    好奇心驅使下,利用 HxD Hex Editor 開啟下載回來的 .png :

    .png 影片片段檔案的內容

    看到檔案的文件內容,有兩處令人覺得有趣:

    • FFmpeg Service01
    • IDAT

    查了一下「IDAT」是 PNG 檔案中會用到的,而 FFmpeg 則是我用來處理影片的工具。於是將這個檔案的前 41 bytes (上圖反白的部份)刪除後,另存檔名為 xxx.png.ts。再用 VLC Player 來播播放,哇!看得到影片了吔!

    依樣畫葫蘆,將另外四個小片段都刪掉前 41 bytes,並另存為 xxx.ts,仿原來的 .m3u8 製作了一個有新路徑的播放清單,可以用 ffplay 來播放,也可以利用 ffmpeg 將五個小片段合成一個 mp4 影片檔。

    另一部影片的 .m3u8 播放清單中則都是 .jpg ,用 HxD Hex Editor 開啟下載回來的 .jpg 檔案:

    .jpg 影片片段檔的內容

    這個 .jpg 檔案的內容跟前面的 .png 長得滿像的,來比較一下:

    .png 影片片段檔的內容

    如果將上圖 .png 檔反白的部份刪除,它的檔頭跟 .jpg 就幾乎一樣了。所以我將下載回來的 .jpg 影片片段檔的檔名字尾加上了「.ts」,用 VLC Player 就可以直接播放了。哈!看起來,這支影片片段檔案的格式、編碼沒有問題,只要讓 FFmpeg 能接受叫「.jpg」的檔名就可以,所以要幫它加上底下的參數:


    -allowed_extensions ALL 


    完整的指令如下:


    ffmpeg -allowed_extensions ALL -i https://xx.xx.xx.xx/index.m3u8 -c copy test.mp4


    而串流播放清單中使用 .png 的影片處理起來就比較麻煩,我先解決如何用 FFmpeg 來直接下載串流檔案、去掉會誤導為 PNG 圖片的前 41 bytes。假設串流檔案叫 sample.png,使用底下的指令:


    ffmpeg -f data  -protocol_whitelist "subfile,file,http,https,tcp,tls" -start 41 -i subfile:https://xx.xx.xx.xx/sample.png -map 0 -c copy -f data  sample.png.ts


    輸入旳參數,去掉前 41 bytes 的關鍵:

    • -start 41 -i subfile:

    如果出現 protocol whitelist 關鍵字的錯誤訊息,就再加上:

    • -protocol_whitelist "subfile,file,http,https,tcp,tls"

    為了保持原來的編碼,輸入和輸出都加上:

    • -f data

    輸出的編碼用 copy 的:

    • -c copy

    下載並處理串流檔案的指令搞定了,剩下就是利用 PHP 去分析 index.m3u8 ,產生每一個串流檔案的處理指令,並通通放到一個批次檔裡,這樣就可以一口氣將有檔案下載回來。順便也製作一個帶有 .ts 新檔名的播放清單,方便串流檔案下載回來後,再以 FFmpeg 來合併成 .mp4 影片檔。

    目前利用上述的方法,以 FFmpeg 來下載被動過手腳的影片是可行,有空再來研究一下,是不是還有更簡便的方式或工具。

    相關文章


    2019年6月10日 星期一

    HTML5 : English 1200

    2019年6月10日 星期一
    English 1200 的靈感是得自於由桃園縣青溪國中所製作的「國民中小學一千兩百個英文單字」免費教育光碟。關於這個光碟的詳細介紹,可以參考「桃園縣政府教育局電子報」中的這一篇:

    該光碟位於青溪國中的的線上操作版及下載的連結均已失效了

    原網站的截圖如下:

    [圖1] English 1200 原來的下載頁面
    [圖2] 桃園縣 English 1200 光碟首頁

    2011年時,試著用 LimeJS 寫 HTML5 的程式,就以青溪國中 English 1200 的資源,寫了一個聽音選英文或中文的小工具,然後在噗浪中和朋友分享。


    試玩與下載

    放了那麼多年,幾乎把它給忘記了。最近好友江明勳老師(嘰哩呱啦ACE的格主)提起了它,於是又將 html5_english1200 重新修改一下,並且加入 HTML5 FUN 中。在HTML5 FUN網站找到 English1200 的圖示(圖3)後,即可試玩一玩已建立好的題庫,或是將打包好的壓縮檔下載回來:

    試玩:

    [圖3] English1200 的圖示

    遊戲畫面

    重新裝修過的 html5_english1200 把功能由原來的「聽音找英文」和「聽音找中文」,再擴充「看中文找英文」和「看英文找中文」兩項選單(圖4)。此外,也增加了題庫選單功能及一些題庫設定的選項,讓使用者可以下載程式後,加入自己的題庫或自訂一些功能。

    [圖4] 四大功能選單
    [圖5] 聽音找英文
    [圖6] 聽音找中文
    [圖7] 看中文找英文

    輕鬆打造自己的遊戲

    如果想要在 English1200 中放自己的題庫,並快速地製作自己的 English1200 遊戲,建議可以試試看 HTML5 FUN 烘焙機 (可製作遊戲或是下載題庫設定檔):

    以修改設定檔的方式自訂遊戲

    如果想知道更多有關 HTML5 English 如何自訂選單,及題庫設定檔的詳細參數說明,可以參考以下的資料。

    自訂選單及題庫

    HTML5 FUN 下載的 html5_english1200.zip 解壓縮以後,裡面有幾個檔名叫 ?????set.js 的檔案,它們都是可以自訂的設定檔。

    • 「english1200_menu_set.js」是選單的設定檔。
    • 「english1200-all-set.js」是 english1200 的單字設定範例,題庫及聲音檔的來源都是青溪國中製作的光碟。
    • 「english1200-all-set-sentence.js」是 english1200 的句子設定範例,題庫及聲音檔的來源都是青溪國中製作的光碟。
    • questions_set_tts.js」則是使用 TTS 來發音的題庫設定範例。
    關於選單設定及題庫設定的方法,和我其它 HTML5 程式的都差不多,可以參考這一篇中的說明來修改:

    題庫參數說明

    關於 html5_english 的題庫有底下的參數可供自訂:
    • optionsFontSize : 設定選項文字字型的大小。
    • numberOfOptions : 每題有幾個選項。選項會利用題庫自動產生。
    • numberOfOptionsPerRow : 每列最多可以有幾個選項。
    •  auto_show_options 的參數,如果設為 false,按先按 [開始作答] 才會出現選項;預設值是 true。(2021.12.11新增的功能)
    • numberOfQuestionsPerRound : 每回合抽幾題題目。如果題庫的數量很多,可以利用此選項,讓程式將所有題目切成多個回合,每回合的分數與時間都會單獨計算。如果此數字大於題庫總題數,會自動修正為題庫的數量。
    • select_questions_in_random : 出題時,程式選擇題目的方式,設定值可以是 true 或 false ; true 是採亂數選題,false 則是按題庫順序出題。
    • soundBaseURL : 聲音檔路徑的前置網址,如果此設定值不是空字串,而且語音不是使用 TTS (tts_enabled=false) ,出題時,程式會為 questionLines 的左欄前面自動加上這裡指定的字串。例如想用 English 1200 網站的聲音檔來發音,可以使用預設值的
      https://gsyan888.github.io/english1200/
      2022.06.05 起,支援以陣列來設定多個來源,這樣可以用亂數隨選不同的聲音。
      例如:
      soundBaseURL = ['./mp3/a/', './mp3/b/', './mp3/c/'];
      如果 mp3/a , mp3/b, mp3/b 三個資料夾中的結構與檔案都一樣,就可以由程式隨選播放不同的聲音。
    • audioPlaybackRate : 用來控制語音播放的速度。(2022.06.05 新增)
    • audioAutoPlayLoop : 語音自動播放的次數。
    • audioAutoPlayDelay : 隔多久重播(單位秒)。
    • tts_enabled : 是否使用 TTS 的語音,如果設為 true,就會使用 google 的 TTS 來發音,而不會使用 soundBaseURL 中指定的,或是自訂的 mp3 語音檔案。
    • seperator : 題庫欄位分隔符號。在題庫(questionLines)中,每一行為一題,而一行可以用 seperator 來將它分為不同的欄位。預設值為兩個井字號(##)
    • questionLines : 題庫,每一行一個題目,以 seperator 所指定的符號來分隔為不同的欄位,可以分為「兩欄式題庫」和「三欄式題庫」;

      「兩欄式題庫」左欄為聲音檔路徑也是英文,右欄為中文。
      兩欄式題庫適用於英文單字本身就是聲音檔路徑中的檔名部份,程式可以解析出 mp3檔名,並去掉字尾的 .mp3 成為題庫英文的部份。例如:青溪國中所製作的 English 1200單字題庫。

      「三欄式題庫」左欄為聲音檔路徑,中間欄為中文,右欄為英文。
      三欄式題庫適用於聲音檔檔名較不規則,無法解析出英文的部份的題庫,例如:青溪國中所製作的 English 1200句子的題庫,

    [圖8] 兩欄式題庫(english1200-all-set.js)
    [圖9] 三欄式題庫(english1200-all-set-sentence.js)

    以下 2019.06.12 版新增的自訂參數,可以更改界面中要顯示的文字:
    • caption : 上方標題欄的標題
    • item_button1_caption : 遊戲模式選單第1個按鈕上的文字
    • item_button2_caption : 遊戲模式選單第2個按鈕上的文字
    • item_button3_caption : 遊戲模式選單第3個按鈕上的文字
    • item_button4_caption : 遊戲模式選單第4個按鈕上的文字
    • credit_caption : 下方資料出處的文字
    • numberOfSecondToLoadQuestionLines : 載入題庫等候的最大秒數

    相關文章

    更新記錄

    • 2024.04.03 v.0.5j 如果 item_button1_caption, item_button2_caption, item_button3_caption, item_button4_caption 為空字串,該選單按鈕就不出現。
    • 2023.07.16 v.0.5h 開始作答後,按左上角叉叉後的 Error Log,出現的對話框中,新增一個[加強]的按鈕,按下以後,可以複習所有錯的題目;題庫第一欄如果不是聲音的路徑,會自動以 TTS 來合成語音。
    • 2023.07.16 v.0.5g 在模式選項的畫面中,加入「接續舊進度」的功能選項,如果設為 On,可從上次最後完成的題目之後開始新的進度,如果沒有接續,則會重頭玩起,並在第一合回完成時,覆蓋舊進度。
    • 2023.07.14 加入錯誤複習的功能,在每一回題目都做完後,如果有錯的,要將錯的複習完(挑戰加分題),才能結束該回合或是遊戲。
    • 2022.08.25 題庫範例檔案中,題庫的解析會因為不同平台的換行字元數(Mac OS X 用一個字元,Windows 用兩個字元)而產生解析錯誤,修正了題庫的格式;解決題庫中如果有空白行,未正確去除的問題。
    • 2022.06.05 新增 audioPlaybackRate 的參數,自訂語音播放的速度;soundBaseURL 可以用陣列來設定多個來源,語音就可以由多個聲音中隨選;新增 audioAutoPlayLoop 和 audioAutoPlayDelay 可以控制語音播放幾次。
    • 2022.05.08 在 iOS 使用 Gooogle TTS 時,按播放鈕沒有聲音的問題,重新執行 .load() 載入語音解決問題。
    • 2021.12.12 在作答畫面左下角加一個設定鈕,可以臨時更改 auto_show_options 的設定;答案選項的文字加上陰影,解決遇到字數較多、超出按鈕下緣時,看不清楚的問題。
    • 2021.12.11 設定檔多一個 auto_show_options 的參數,如果設為 false,按先按 [開始作答] 才會出現選項。
    • 2021.06.03 tts 網址的部份無法念中文,改用 encodeURIComponent(english_str)。
    • 2021.05.11 文字可以自動調整大小; 上方的題目文字改用陰影字, 讓字可以更清楚; 加入答錯記錄, 答錯時, 會記錄答錯及選錯的兩條題庫, 按作答畫面右上方的叉叉圖示, 即可顯示所有記錄, 或是刪除記錄。
    • 2020.08.04 加入 optiosFontSize 的選項, 可以自訂選項文字的大小, 以免因為預設字形太大而讓字數較多的選項無法完整呈現內容。
    • 2020.08.03 支援行動裝置直拿的模式, 調整版面解析度為 768x1024 的比例, 將字稍微放大(原為 35, 調整為 45), 按鈕間距稍微拉開(江明勳老師建議)。
    • 2019.06.13 修正遊戲頁面上方的標題字字數如果過多時,會和分數及題數重疊的問題。在 english1200_menu_set.js 中如果設定了 memu_title ,程式會將網頁的標題自動更換為該字串。
    • 2019.06.12 新增一些自訂參數,讓界面可以自訂訊息,並更改按鈕上的文字。此外新增 numberOfSecondToLoadQuestionLines 參數,可以控制程式等候題庫變數 questionLines 的載入,應用於動態題庫。
    • 2019.06.11 解決按鈕中的字串如果很長會換行的問題。
    • 2019.05.31 題庫設定檔中加入判斷 CR/LF 的程式判斷,以解決不同系統間換行字元不同,導致題庫第一題會解析錯誤的問題。加入每列最多可以有幾個選項的參數「numberOfOptionsPerRow」。
    • 2019.05.30 加入自訂一回合多少題的功能。
    • 2019.05.29 改版、除蟲,加入 TTS 的功能。
    • 2011.04.17 初版




    2016年12月10日 星期六

    FFmpeg : 影片剪接與加馬賽克

    2016年12月10日 星期六
    影片的剪輯不一定要使用圖形界面來操作的,如果只是想進行簡單的剪接而已,利用 ffmpeg 這個自由軟體,下指令即可進行剪接,甚至加上特效。

    以底下的某化妝品廣告影片為例:



    分析原廣告片,在 00:02:28.500 和 00:02:46.001 以後各有 1.5 秒 和 2 秒長的時間會出現商品的名稱,另外在 00:03:13 以後會有全版的廣告。片尾的廣告只要截掉不取即可,不過中間會有兩段要為商品名稱加上馬賽克。

    本篇中會使用到兩個工具,都可以在網路中找到:

    影片下載

    在 YouTube 中的影片,可以利用 youtube-dl 下載。假設我們將下載回來的 FullHD 的影片儲存為 source.mp4。

    切割影片

    利用 ffmpeg 將原始影片(本例中的 source.mp4)切割為五分段,並輸出為 s1.mp4、s1.mp4、s1.mp4、s1.mp4、s1.mp4,五個影片檔。指令如下:

    ffmpeg -i source.mp4 -ss 00:00:00.00 -t 00:02:28.500 -y -c copy s1.mp4 
    ffmpeg -i source.mp4 -ss 00:02:28.501 -t 00:00:01.500  -y -c copy s2.mp4 
    ffmpeg -i source.mp4 -ss 00:02:30.001 -t 00:00:16.000  -y -c copy s3.mp4 
    ffmpeg -i source.mp4 -ss 00:02:46.001 -t 00:00:02.00 -y -c copy s4.mp4 
    ffmpeg -i source.mp4 -ss 00:02:48.001 -t 00:00:25.00 -y -c copy s5.mp4

    上述指令中,「-ss」設定了分段影片的開始時間,而「-t」設定了分段影片的長度。

    加馬賽克

    我們可以利用 ffmpeg 的濾鏡功能來為 s2.mp4 和 s4.mp4 這兩段有 mark 的地方加上馬賽克。

    下載回來的影片,解析度是 1920 x 1080 ,而

    •  s2.mp4 中需要加馬賽克的大小假設為 960x540,放置的座標為 (380,270)
    •  s4.mp4 中需要加馬賽克的大小假設為 1160x540,放置的座標為 (380,270)

    最後再用原來的檔名覆蓋儲存即可。執行底下的兩行指令:

    ffmpeg -i s2.mp4  -filter_complex  "[0:v]crop=960:540:380:270,boxblur=10[fg];  [0:v][fg]overlay=380:270[v]" -map "[v]" -map 0:a -c:a copy -movflags +faststart  -y s2.mp4 
    ffmpeg -i s4.mp4  -filter_complex  "[0:v]crop=1160:540:380:270,boxblur=10[fg];  [0:v][fg]overlay=380:270[v]" -map "[v]" -map 0:a -c:a copy -movflags +faststart  -y s4.mp4
    上面的濾鏡參數:

    • [0:v] : 指出是針對第一個影片設定。
    • crop=960:540:380:270 在座標 (380, 27) 處取 960x540 大的畫面
    • boxblur : 馬賽克

    連接影片

    分段影片都處理好了,最後我們利用 ffmpeg 將 s1.mp4、s2.mp4、s3.mp4、s4.mp4、s5.mp4 五個檔案連接起來,並儲存為 new_movie.mp4,執行底下的這行指令:

    ffmpeg -i s.mp4 -i out2.mp4  -i out3.mp4  -i out4.mp4  -i out5.mp4 -filter_complex concat=n=5:v=1:a=1 -y new_movie.mp4

    concat 參數的部份:

    • n=5 : 有 5 個影片
    • v=1 : 有影片
    • a=1 : 有聲音


    透過前面的操作以後,最後輸出的影片裡,看不到商品的名稱了。ffmpeg 實在好強,有空再來研究一下別的玩法。

    後記

    學而後知不足,2017年五月底再看這篇文章以後,才了解在整理這篇時有多麼土。其實 FFmpeg 如果用 version 2.0 以後的版本,有更簡單的方法。強烈的建議如果想幫影片加上多個不同的馬賽克,可以參考底下這篇中的方法:



    相關文章



    2016年10月31日 星期一

    Tools : youtube-dl 下載影片的利器 part 4

    2016年10月31日 星期一
    關於 youtube-dl 這個強大的工具,之前寫過三篇介紹(詳見文末的相關文章),再追加一篇,如何連字幕一起下載。

    youtube-dl 關於字幕的參數有:

    • --write-sub
    • --write-auto-sub
    • --all-subs
    • --list-subs
    • --sub-format FORMAT
    • --sub-lang LANGS
    • --embed-subs
    • --convert-subs FORMAT

    以 YouTube 的影片來說,它的字幕 format 目前提供 vtt 和 ttml 兩種格式,我們可以利用底下指令來查詢:

    youtube-dl --list-subs 影片網址

    不過,我常用的影片播放程式 VLC 好像沒有支援 vtt 格式,沒關係,youtube-dl 的好朋友 ffmpeg 可以幫我們轉換為 VLC 支援的 srt 格式字幕檔。

    所以,如果想在 YouTube 影片下載以後,順便:
    • 下載字幕檔。(使用 --write-sub --all-subs 參數)
    • 轉為 srt  格式的字幕檔。(使用 --convert-subs srt 參數)
    • 將字幕嵌入影片檔中。(使用 --embed-subs 參數)
    就需要先下載底下兩支程式:
    並將兩支程式放在同一個目錄中來搭配使用。

    最後執行以下指令:

    youtube-dl --write-sub  --all-subs --embed-subs --sub-format srt  影片網址

    即可下載帶有字幕的 YouTube 影片。

    什麼!下指令很麻煩!

    好吧!我將之前的「Youtube-影片下載.vbs」改了一下,將下載所有字幕的參數加進去了,只要將這個有下載字幕的版本和 youtube-dl 及 ffmpeg 放在一起,就能變成有字幕的 YouTube mp4 影片囉!

    檔案下載



    相關文章



    2016年4月21日 星期四

    3DP : 斷爪的快速接頭延壽

    2016年4月21日 星期四
    說來好笑,3D printer 在我手上,好像什麼狀況都碰得到。整理完機器,上電加熱後,居然無法進料,馬達推不動,手動也推不了。拆開 E3D 端的快速接頭,這條很久沒解開的鐵氟龍管上有明顯的一圈。重新再試著進料,直接由快速接頭這端送料,仍然推不動,以1.5mm的六角扳手測試,依然下不去,抽回扳手後,居然在扳手的圓頭上吸附了金屬片,這下不妙了!




    拆開 E3D 的散熱片後,喉管頂端可以看到快速接頭夾住管子用的金屬爪子。又挖又吸的,深怕碎屑掉入加熱塊,導致噴嘴塞住就全毀了。清理半天,總算將金屬爪子的碎片清完。不過,這個「無牙」的快速接頭咬不住鐵氟龍管,得一旁休息去了。

    其實這不是第一個壞掉的快速接頭,之前靠擠出機端的也曾因為「斷爪」而將料卡在快速接頭內進出不得,像這樣已經壞了四顆了。

    因為「無牙」就扔掉似乎太浪費了,在 Thingivers 中找到了底下 daGHIZmo 的「Bowden adapter」:



    我拿作者分享的模型,幫它的底部改為可置入「斷爪」、「無牙」快速接頭(4mm to 6mm、M5、M6),這樣一來,壞的快速接頭又可以獲得重生。

    我修改過的「Bowden adapter」放在底下的網址中:


    組裝之前,記得先將快速接頭的「按鈕」修一下邊,讓它變得稍小,才不會卡到底座,導致鐵氟龍管推不進接頭內。

    修四個邊
    邊修掉後的快速接頭

    前一項準備工作有做,接下來就按圖組裝囉!

    依序放置
    組裝完畢

    安裝在 E3D V5及擠出機上的結果:


    組裝完,拉拉鐵氟龍管,咬得還滿緊的,接下來再觀察它可以撐多久囉!






    2015年8月29日 星期六

    Google Drive Host webpages 的網址

    2015年8月29日 星期六
    Google 已停止 Host webpages 的服務了

    如果想要一個簡單的網頁空間,Google Drive 舊版有提供 Host webpages 的服務,只要將資料上載到 Google Drive 的資料夾,然後將它「共用」給網際網路的所有使用者,在「顯示詳細資料」中的「主機」資訊即可看到該網頁空間的連線網址。不過,自從 Google Drive 改成新版以後,「顯示詳細資料」中已看不到「主機」這個資訊。先別失望,它只是看不到,目前 Host webpages 的功能其實還在,就差網址是什麼不知道而已。

    話說這個網址其實是有規則的,只要知道資料夾或是檔案在 Google Drive 的 ID,將它套入規則即可:
    • http://googledrive.com/host/ID

    哇~啥咪「ID」,好難啊!沒關係,我試著用 JavaScript 寫個網址解析小工具,只要:
    1. 將 Google Drive 的資料夾或是檔案設定好共用。
    2. 把 Google Drive 資料共用的網址複製好。
    3. 貼到底下網址產生器的「共用連結」欄位。
    4. 按一下網址產生器「產生網址」的按鈕。
    即可看到 Google Drive 「顯示詳細資料」裡消失的「主機」資訊。除了網頁的網址,網友阿欣另外加碼 QRCode,順便利用 Google 的 Chart API 產生網址的 QRCode。

    Google Drive Host webpages 網址及QRCode 產生器



    QRCode大小:
    共用連結:


    哈~這樣夠簡單了吧!

    相關文章



    2015年2月27日 星期五

    用 FFmepg 為影片加字幕

    2015年2月27日 星期五
    想幫影片加字幕,試過了格式工廠、FreeMake(免費版) 的工具,有圖形界面,不過,被一堆看不懂的影音參數給打敗了,不熟悉的結果是,等很久、轉了好幾次、影片的畫質變得更差......,我不過是要加字幕啦!

    看 VLC 有儲存的功能,不過加字幕還是失敗,到現在還是不知道哪個環節錯了。最後還是選擇用 FFmepg ,以一行指令完成任務。

    假設:

    • 原始的影片檔名為:source.mp4
    • 字幕檔的中文編碼用「ANSI」,而檔名為:source.srt
    • 加了字幕後的影片要輸出的檔名是:output.mp4

    影音都保持原來的內容,只加入字幕軌,執行底下的指令:

    ffmpeg.exe -i source.mp4 -sub_charenc CP950 -i source.srt -c:s mov_text -c:v copy -c:a copy   output.mp4

    上面 ffmpeg.exe 、source.mp4、source.srt 及 output.mp4 的路徑記得自行修改為存放的路徑。

    指令的參數簡單說明一下:

    • -i source.mp4 : 指定影片的來源檔案。
    • -sub_charenc CP950 : 字幕中的文字編碼,以 ANSI 編碼的中文用 CP950 即可。
    • -i source.srt  : 指定字幕檔案。
    • -c:s mov_text : 加入 MP4 或 MOV 的字幕軌。
    • -c:v copy : 影像的內容直接用來源檔中的,不做更動。
    • -c:a copy : 聲音的內容直接用來源檔中的,不做更動。


    這種方式由於不用重新轉檔,非常有效率,一下子就好了。FFmpeg 真是一個強大的跨平臺影片處理工具,改天再來好好的研究研究。


    2014年4月15日 星期二

    Tools : youtube-dl 下載影片的利器

    2014年4月15日 星期二

    補記

    本文為 2014年的舊文,youtube-dl 建議改用尚有持續發展的 yt-dlp :
    如果想直接使用,可以參考 2023年3月的這一篇:
    -----
    原文開始

    之前利用「TubGet」來下載 Youtube 上的影片,覺得還滿簡單好用的,只是最近不知怎麼了,已無法下載影片或是 MP3。同事問到還有什麼好用的工具可以下載影片,回想起上次在 Raspberry Pi 上安裝 rPlay 玩 AirPlay mirroring 時,它特別提醒要安裝 youtube-dl ,並更新為最新版,這個 youtube-dl 可是個好物,可以利用它來下載常見影音網站中的影音,可以下載單支影片,也支援播放清單及批次下載,功能強大,如果它有提供圖形界面就更完美了。

    2013年9月5日 星期四

    VLC : 以 gp-vlc 擷取 WebDAV 的檔案來播放影片

    2013年9月5日 星期四
    如果要當家庭影音系統的人機界面,首選當然是 XBMC,它功能強大,而且可以跨平臺,無論是一般電腦或是行動裝置,都有相對應的版本。如果喜歡用 VLC Media Player ,單純只是要在電腦上連 WebDAV server 看片,Java 開發的 gp-vlc 也是不錯的選擇。

    2013年6月30日 星期日

    Windows : PhotoCap 批次變更檔名

    2013年6月30日 星期日
    記得幾年前同事想要批次把相片檔案的檔名變成某種規則而向我求救,當時用過 perl 及 PHP 寫專屬的 script 來完成工作。現在很多工具有這樣的功能了,不用再重新打造。最近常玩縮時攝影,無論是用 Webcam 或是數位相機來拍照片,如果想以 FFmpeg 來將影像檔合成影片,都可能會有批次將檔名變成流水號方式命名的需求。稍微筆記一下以 PhotoCap 的批次功能來變更檔案名稱的方法。

    2013年5月2日 星期四

    VLC : 錄製 IPCam 的影像串流

    2013年5月2日 星期四

    昨天和同事分享利用 Android 手機加上「手機無線攝像頭」來當無線實物投影機的用法,有人問到,如何將畫面錄下來呢?剛好前一陣子很認真的在玩 VLC 這個開源軟體,它不但是個影播放軟體,也可以幫我們將影音串流錄製下來,而且方法還滿簡單的。下面就來看看如何用 VLC 錄「手機無線攝像頭」的影像串流,當然囉!不光是這樣,只要 VLC 可以播放的影音,應該都可以用同樣的方法來錄啦!

    2013年4月25日 星期四

    VLC : Webcam 擷取變串流

    2013年4月25日 星期四
    以前一直以為 VLC 這個自由軟體只是影音播放器而,最近仔細的研究了一番,發現它的功能如同 FFmpeg 一樣,多而強大!除了可以取代 media player 的播放功能,因為內建了 HTTP 服務程式,可以遠端控制,甚至成為串流伺服器,把正在播放的影音(影片、Webcam、電腦桌面)變成串流,分享給其它遠端的機器......,哈!好像要寫很多篇才介紹得完。先來看看如何以 Webcam 拍攝畫面,再把畫面變成串流,讓其它人可以在它處收看內容。

    2013年4月15日 星期一

    FFmpeg : 以 Webcam 來進行縮時攝影

    2013年4月15日 星期一
    今天和同事分享了以 Raspberry PI + streamer + mencoder 所製作的縮時攝影影片,有人問到如何製作,衍生出在 Windows 要用何種程式的問題。mencoder 由於是 MPlayer 中的一部份,有 Windows 的版本,但是 streamer 似乎只有 Unix like 的版本。找了一下,另外一個可以用來抓 Webcam 影像並重組成縮時影片的 FFmpeg 也有 Windows 的版本,試完了才對這個工具有了一番新的認識,只能說 FFmepg 這個自由軟體實在太強大了,有關影音的處理,不但功能繁多,而且還跨各種作業系統,下面就來看看如何以 FFmpeg 一手包辦由 Webcam 取得影像,並轉成縮時影片的方法。

    2013年3月11日 星期一

    Google Earth 無法安裝 ( 錯誤 0x80040905, 1402 )

    2013年3月11日 星期一
    家裡較常用的那臺電腦 Windows XP 不知道為什麼,一直無法安裝 Google Earth,後來因為還有別臺電腦可以用,也就沒有放在心上。剛剛花了一點時間,先是找出了「錯誤 0x80040905」的訊息,解決後又遇到了「錯誤 1402」的錯誤訊息對話框。最終執行了一支檔名為「FixRegistryPermissions.exe」程式重設了 Registry 「HKEY_CLASSES_ROOT」的權限後才順利的安裝好 Google Earth。

    2013年2月15日 星期五

    Google Drive 共用檔案下載的網址

    2013年2月15日 星期五
    將備課做好的小遊戲上載到 Google Drive 中,.zip 的壓縮檔設定好「共用」後,Google 給的連結是預覽而不是直接下載的網址。如果要下載檔案,還要多一道手續去點 Drive 選單中的「檔案」才看得到「下載」的選單。稍微玩了一下,把取得可以直接下載的連結語法規則整理在底下。

    2013年1月23日 星期三

    Word 的合併列印

    2013年1月23日 星期三
    合併列印是 Word 中很實用的功能,以前在管學校帳號時,用它來印老師和學生的帳號通知單,一個文字檔加上設計好的 Word 表單,瞬間就可以處理好檔案,用過這個功能才能真正享受到電腦的好處啦!好笑的是,之前曾經在使用 Office 2007 的同事面前丟臉,想秀一下合併列印的功能,因為家裡都用 Office 2000,找不到選單在哪啦!今天很認真的研究了一下我家太座筆電中的 Office 2007,趕快記錄一下。

    2013年1月21日 星期一

    影片的旋轉

    2013年1月21日 星期一
    記得我家女兒第一天自己放雙手學走路時,我家老婆直拿相機隨手拍的影片需要旋轉,因為還有拍其它正常的影片,那時沒有很認真的找方法去處理,檔案就放在硬碟中。今天心血來潮,了試了幾種方法,把玩了一下,順便再回味一下當時學走路時可愛的樣子。
     
    雄::gsyan © 2009. Design by Pocket