安裝:(以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。
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