youtube-dl 筆記

安裝:(以WSL2 Ubuntu 22.04 外接硬碟為例)

sudo apt install youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

環境:(以WSL2 Ubuntu 22.04 外接硬碟為例)

sudo mount -t drvfs F: /mnt/f

設置:

nano /etc/youtube-dl.conf
# Lines starting with # are comments

# Always extract audio
-x

# Do not copy the mtime
#--no-mtime

# Use this proxy
#--proxy 127.0.0.1:3128

# 存到預設使用者的外接硬碟F碟的ydl目錄內
#-o ~/mnt/f/ydl/%(title)s.%(ext)s

# 存到外接硬碟F碟的ydl目錄內,並依照清單建立子資料夾
-o /mnt/f/ydl/%(playlist)s/%(title)s.%(ext)s

音檔(mp3)指令:

youtube-dl -x --audio-format mp3 --embed-thumbnail --add-metadata -c -i -a <playlist file> --download-archive archive.txt

影檔(mp4)指令:

youtube-dl -f 'bestvideo+bestaudio[ext=m4a]' --merge-output-format mkv -c -i -a youtube-dl.txt --download-archive archive.txt

進一步了解

壹、用指令下載音樂

$ youtube-dl
    -x                                  # 萃取聲音
    --audio-format mp3                  # 聲音格式 mp3
    --embed-thumbnail                   # 擷取縮圖
    --add-metadata                      # 置入metadata
    -c                                  # 續傳
    -i                                  # 忽略錯誤訊息
    -a                                  # 呼叫批次檔案
    <Play-List-Txt>                     # 影片網址,一行一個,存成文字檔
    --downloaded-archive archive.txt    # 下載紀錄

貳、用指令下載影片

$ youtube-dl
    -f 'bestvideo+bestaudio[ext=m4a]'   # 指定影片格式,小寫
    --merge-output-format mkv           # 合併成mkv
    -c                                  # 續傳
    -i                                  # 忽略錯誤訊息
    -a                                  # 呼叫批次檔案
    <Play-List-Txt>                     # 影片網址,一行一個,存成文字檔
    --downloaded-archive archive.txt    # 下載紀錄

參、更新下載
全更新:

$ youtube-dl xxx                        # 相關設定不再贅述
    --downloaded-archive archive.txt    # 這紀錄是關鍵

按時間、按最新來更新:(例子是下載7天內最新10部)

$ youtube-dl xxx                        # 相關設定不再贅述
    --downloaded-archive archive.txt    # 這紀錄是關鍵
    --dateafter now-7days               # 7天內
    --playlist-end 10                   # 最新10部

過程

單一音樂轉mp3、縮圖、metadata

youtube-dl -x --audio-format mp3 --embed-thumbnail --add-metadata <audio-URL>

大多數的情況下,取聲音、最佳音質,用mp3格式這樣就行了。

youtube-dl -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 <audio-URL>

在某些情況下,會轉成m4a

youtube-dl -f bestaudio  <audio-URL> --exec "ffmpeg -i {}  -codec:a libmp3lame -qscale:a 0 {}.mp3 && rm {} "

簡單到不可思議的播放清單下載

youtube-dl -i <playlist ID>

但是非常任性的下載了最好品質的mkv,如果是下載舌尖上的中國很好,但我只是下載幾首老歌,還是給我mp3吧。

youtube-dl -x --audio-format mp3 --embed-thumbnail --add-metadata -i <playlist ID>

那能不能一次下載多個PlayList?然後記住哪些下載過了。下次再執行相同指令的時候,只會下載相同清單裡,尚未下載的部分。而且,這樣做的另一個好處是,只需要更新<playlist file>

youtube-dl -x --audio-format mp3 --embed-thumbnail --add-metadata -c -i -a <playlist file> --download-archive archive.txt

不介意影片檔案格式是mkv的話,下載影片相對簡單。但如果有檔案格式、大小、字幕、或其他更多需求,就得理解影片和音樂的差異。若想同時指定聲音和影像的格式,比方:選擇最佳影像和最佳聲音,並且合併成mp4。

youtube-dl -f 'bestvideo+bestaudio[ext=m4a]' --merge-output-format mp4 <URL>

具體來說,可以歸納成這樣的指令:

youtube-dl -f 'bestvideo+bestaudio[ext=m4a]' --merge-output-format mkv -c -i -a youtube-dl.txt --download-archive archive.txt

或者,最好畫質、最小容量(從左至右依序選擇)

youtube-dl -f 303+251/best --merge-output-format mkv -cia youtube-dl.txt --download-archive archive.txt

註1:mkv可以替換為mp4,ogg,webm或flv。
註2:youtube-dl.txt可替換為任何文字檔案名。
註3:想重新下載,可移除archive.txt內任一下載紀錄或直接移除archive.txt。

支援下載網站

進階1

ffmpeg指令

影片有幾個進階的做法,比方說,擷取影片中的一小段來做展示或說明:

ffmpeg -ss 開始時間 -t 長度 -i 來源檔案.mp4 -acodec copy -vcodec copy 輸出檔案.mp4

把影片檔轉成聲音檔:

ffmpeg -i video.mp4 audio.mp3

mp3第5秒起,剪30秒。(如:手機鈴聲)

ffmpeg -ss 5 -i input.mp3 -t 30 output.mp3

mp3去掉前30秒。

ffmpeg -ss 30 -i input.mp3 outputfile.mp3

註1:-ss 是從檔案的第幾分幾秒開始處理
註2:-t 是指要處理多少時間
註3:時間格式 hh:mm:ss


比方一部影片檔案分割成2個檔案,分別執行:
前1小時,切成一個獨立檔案:

ffmpeg -t 01:00:00 -i input.mp4 -acodec copy -vcodec copy output1.mp4

第2個小時到最後,切成一個獨立檔案:

ffmpeg -ss 01:00:00  -i input.mp4 -acodec copy -vcodec copy output2.mp4

進階 2

shell script 自動化