【BASH】Shell指令碼從播放列表下載youtube檔案

2021-01-08 BASH

我正在嘗試編寫一個bash指令碼,它將從一個播放列表中下載所有youtube視訊,並根據youtube視訊本身的標題將它們儲存到一個特定的檔名中。到目前為止,我有兩段獨立的程式碼,它們可以做我想做的事情,但我不知道如何將它們組合起來作為一個單元工作。
這段程式碼查詢給定頁面上所有youtube視訊的標題:

curl -s "$1" | grep '<span class="title video-title "' | cut -d\> -f2 | cut -d\< -f1

這段程式碼將檔案下載到youtube視訊id提供的檔名(例如youtube.com/watch提供的檔名?v=CsBVaJelurE&feature=relmfu將是CsBVaJelurE.flv)
curl -s "$1" | grep "watch?" | cut -d\" -f4| while read video; 
do youtube-dl "http://www.youtube.com$video";
done

我想要一個指令碼,將youtube.flv檔案輸出為視訊標題(在本例中為BASH lesson 2.flv)給定的檔名,而不是簡單的視訊id名稱。提前謝謝你的幫助。

解決辦法

好吧,在進一步研究和更新我的youtube-dl版本之後,發現這個功能現在已經直接內建到程式中了,因此不需要shell指令碼來解決youtube上播放列表的下載問題。完整的文件可以在這裡找到:(http://rg3.github.com/youtube-dl/documentation.html),但我最初問題的簡單解決方案如下:
1)youtube dl將自動處理播放列表連結,無需單獨向其提供其中包含的視訊的URL(這就不需要使用grep搜尋“watch”查詢唯一的視訊id
2)現在提供了一個選項,可以使用多種選項格式化檔名,包括:
id:序列將被視訊識別符號替換。
url:序列將被視訊url替換。
上傳者:這個序列將被上傳視訊的人的暱稱所取代。
上載日期:序列將替換為YYYYMMDD格式的上載日期。
標題:序列將被文字視訊標題替換。
ext:序列將替換為適當的副檔名(如
flv或mp4)。
epoch:在建立
檔案。
自動編號:序列將被一個5位數字替換
將隨著每次下載而增加,從零開始。
此輸出選項的語法如下(其中NAME是上面顯示的任何選項):

youtube-dl -o '%(NAME)s' http://www.youtube.com/your_video_or_playlist_url

例如,要回答我原來的問題,語法如下:
youtube-dl -o '%(title)s.%(ext)s' http://www.youtube.com/playlist?list=PL2284887FAE36E6D8&feature=plcp

再次感謝那些回答我問題的人,非常感謝你的幫助。

出處

Have any Question?

Let us answer it!