# yt-dlp 下載會限影片 & whisper 逐字稿 **以下用詞可能有誤 只是把自己做的事記錄下來** ## 本地端執行 (適用於 Linux) ### yt-dlp [yt-dlp 下載位址](https://github.com/yt-dlp/yt-dlp#installation) 也可以使用 pip 直接載 ```! pip install yt-dlp ``` Example : ```! yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" https://youtu.be/0d5_sD2g5mw ``` 僅下載音檔 ``` yt-dlp https://youtu.be/0d5_sD2g5mw --extract-audio --audio-format wav ``` (如果有找不到網頁等等狀況就把yt-dlp更新或重裝一次 ### 下載會限影片 先在 firefox 下載擴充 App - Cookie Quick Manager,按下 Manage All Cookies ![](https://hackmd.io/_uploads/SyPNsEqph.png) 右上角板手按下去把Export的Template設為Netscape ![](https://hackmd.io/_uploads/S1OXnNcT3.png) 將以下 Domains 右鍵複製貼到 cookie.txt ```! .youtube.com .accounts.google.com .google.com .google.com.tw ``` 把 cookie 抓下來存到 cookiejar.txt ```! curl -b cookie.txt --cookie-jar cookiejar.txt "https://youtube.com" ``` 使用 cookiejar.txt 下載影片 ```! yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" --cookies "cookiejar.txt" https://youtu.be/K-doWbBP7OM ``` ### 常用選項 ``` --write-thumbnail: 把封面圖抓下來 --verbose: 顯示詳細資訊 --download-sections "*hh:mm:ss-hh:mm:ss": 直接載需要的片段 ``` ### 使用 ffmpeg 切割需要的片段 ``` ffmpeg -i input_video.mp4 -ss 00:05:00 -to 00:10:00 -c copy output_video.mp4 ``` ### whisper.cpp :::success 建置環境時建議使用 python3.10 版本 ```! conda create -n whisper python=3.10 -y ``` ::: ### 下載 whisper.cpp 可以直接到 [whisper.cpp的github](https://github.com/ggerganov/whisper.cpp) 看,畢竟我只用部分的功能 下載 whisper.cpp ```! git clone https://github.com/ggerganov/whisper.cpp.git ``` 編譯 main 和下載 models,我只用 large ```! make make large ``` ### 執行程式 <a name="execution"></a> Example: ```! ./main -m models/ggml-large.bin -l japanese -f ~/Downloads/RIME.wav -ovtt ``` ``` -m: 選擇 models -l: 選擇要音檔的語言 -osrt, -ovtt, -otxt: 輸出成想要的格式,我都用 vtt ``` 音檔須為 16kHz 的 wav 檔 Example: ```! ffmpeg -i RIME.mp4 -ar 16000 -ac 1 -c:a pcm_s16le RIME.wav ``` ### CoreML Support (for Apple Silicon) [原 gitbub 連結](https://github.com/ggerganov/whisper.cpp#core-ml-support) 在 Apple Silicon 上可以加快轉譯速度的東西,個人實測快了約2.45倍左右 首先 pip 安裝需要的東西 ```! pip install ane_transformers pip install openai-whisper pip install coremltools ``` :::warning 記得去 app store 安裝 Xcode,並更新到最新版本 ::: 安裝 command-line tool ```! xcode-select --install ``` 接下來要生一個 CoreML Model,這邊先用小 model 當範例 ```! ./models/generate-coreml-model.sh base.en ``` (中途有跳出一個要同意 Xcode 使用條款之類的東西,直接 Agree 就好) 如果可以順利跑完並看到你的 models 資料夾的 model 已經被替換就代表成功了,跑 `base.en` 記得是幾分鐘就跑完了 ==我個人是用 large model,跑了整整11小時40分鐘,如果不想這樣燒電腦建議用 median 之類的 model 就好== 再來編譯剛剛生的 model ```! make clean WHISPER_COREML=1 make -j ``` 這樣就可以直接用上面的[執行程式](#execution)來跑了 接著應該會看到以下訊息 ```! whisper_model_load: mem required = 3557.00 MB (+ 71.00 MB per decoder) whisper_model_load: adding 1608 extra tokens whisper_model_load: model ctx = 2951.27 MB whisper_model_load: model size = 2950.66 MB whisper_init_state: kv self size = 70.00 MB whisper_init_state: kv cross size = 234.38 MB whisper_init_state: loading Core ML model from 'models/ggml-large-encoder.mlmodelc' whisper_init_state: first run on a device may take a while ... ``` 當初等了好一段時間都沒 load 好,後來發現 github 上也有人有這問題,只要把 Activity Monitor 中的 `AneCompilerService` 給 force-quit 掉就OK了,不過就是每次都必須 force-quit 就是了 ```! whisper_init_state: first run on a device may take a while ... whisper_init_state: Core ML model loaded system_info: n_threads = 4 / 8 | AVX = 0 | AVX2 = 0 | AVX512 = 0 | FMA = 0 | NEON = 0 | ARM_FMA = 0 | F16C = 0 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | COREML = 1 | OPENVINO = 0 | ``` load 完後看到 `COREML = 1` 應該就沒有問題了! ## Google Colab 雲端執行 進入 Colab 後右上角硬體設備的選單打開,點選 Change runtime type (變更執行階段),選擇 T4 GPU,連接完成後就可以開心的用 ytdlp 和 whisper 了 安裝 yt-dlp ```! !pip install yt-dlp ``` 下載音檔 ```! !yt-dlp https://youtu.be/--khbXchTeE --extract-audio --audio-format wav ``` 安裝 whisper ```! !pip install -U openai-whisper ``` 使用 turbo 模型執行 (輸入檔案可以直接右鍵複製檔案路徑) ```! !whisper /content/GPT4_intro.wav --language English --model turbo ```