yt-dlp 筆記
安裝:
用Homebrew
安裝,和apt
指令類似。往後更新也是直接用Homebrew upgrade
即可。
#!/bin/bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install youtube-dl ffmpeg ffprobe
brew upgrade yt-dlp
環境:
#!/bin/bash
sudo diskutil mount /dev/disk7s1 /Volumes/Jet330
設置:
#!/bin/bash
nano /etc/yt-dlp.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
# 存到外接硬碟Jet330的yt-dlp目錄內,並依照清單建立子資料夾
-o ~/Volumes/Jet330/yt-dlp/%(playlist)s/%(title)s.%(ext)s
音檔(mp3)指令:
#!/bin/bash
yt-dlp -x --audio-format mp3 --embed-thumbnail --add-metadata -c -i -a <playlist file> --download-archive archive.txt
影檔(mp4)指令:
#!/bin/bash
yt-dlp -f 'bestvideo+bestaudio[ext=m4a]' --merge-output-format mkv -c -i -a yt-dlp.txt --download-archive archive.txt
進一步了解
壹、用指令下載音樂
$ yt-dlp
-x # 萃取聲音
--audio-format mp3 # 聲音格式 mp3
--embed-thumbnail # 擷取縮圖
--add-metadata # 置入metadata
-c # 續傳
-i # 忽略錯誤訊息
-a # 呼叫批次檔案
<Play-List-Txt> # 影片網址,一行一個,存成文字檔
--downloaded-archive archive.txt # 下載紀錄
貳、用指令下載影片
$ yt-dlp
-f 'bestvideo+bestaudio[ext=m4a]' # 指定影片格式,小寫
--merge-output-format mkv # 合併成mkv
-c # 續傳
-i # 忽略錯誤訊息
-a # 呼叫批次檔案
<Play-List-Txt> # 影片網址,一行一個,存成文字檔
--downloaded-archive archive.txt # 下載紀錄
參、更新下載
全更新:
$ yt-dlp xxx # 相關設定不再贅述
--downloaded-archive archive.txt # 這紀錄是關鍵
按時間、按最新來更新:(例子是下載7天內最新10部)
$ yt-dlp xxx # 相關設定不再贅述
--downloaded-archive archive.txt # 這紀錄是關鍵
--dateafter now-7days # 7天內
--playlist-end 10 # 最新10部
過程
單一音樂轉mp3、縮圖、metadata
yt-dlp -x --audio-format mp3 --embed-thumbnail --add-metadata <audio-URL>
大多數的情況下,取聲音、最佳音質,用mp3格式這樣就行了。
yt-dlp -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 <audio-URL>
在某些情況下,會轉成m4a
yt-dlp -f bestaudio <audio-URL> --exec "ffmpeg -i {} -codec:a libmp3lame -qscale:a 0 {}.mp3 && rm {} "
簡單到不可思議的播放清單下載
yt-dlp -i <playlist ID>
但是非常任性的下載了最好品質的mkv,如果是下載舌尖上的中國很好,但我只是下載幾首老歌,還是給我mp3吧。
yt-dlp -x --audio-format mp3 --embed-thumbnail --add-metadata -i <playlist ID>
那能不能一次下載多個PlayList?然後記住哪些下載過了。下次再執行相同指令的時候,只會下載相同清單裡,尚未下載的部分。而且,這樣做的另一個好處是,只需要更新<playlist file>
。
yt-dlp -x --audio-format mp3 --embed-thumbnail --add-metadata -c -i -a <playlist file> --download-archive archive.txt
不介意影片檔案格式是mkv的話,下載影片相對簡單。但如果有檔案格式、大小、字幕、或其他更多需求,就得理解影片和音樂的差異。若想同時指定聲音和影像的格式,比方:選擇最佳影像和最佳聲音,並且合併成mp4。
yt-dlp -f 'bestvideo+bestaudio[ext=m4a]' --merge-output-format mp4 <URL>
具體來說,可以歸納成這樣的指令:
yt-dlp -f 'bestvideo+bestaudio[ext=m4a]' --merge-output-format mkv -c -i -a yt-dlp.txt --download-archive archive.txt
或者,最好畫質、最小容量(從左至右依序選擇)
yt-dlp -f 303+251/best --merge-output-format mkv -cia yt-dlp.txt --download-archive archive.txt
註1:mkv可以替換為mp4,ogg,webm或flv。
註2:yt-dlp.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
自動化
步驟:
創建腳本檔案 (
download_audio.sh
):
在終端機中執行:nano ~/download_audio.sh
貼入以下內容:
#!/bin/bash # 設定 yt-dlp 指令 youtube_dl_command='yt-dlp -x --audio-format mp3 --embed-thumbnail --add-metadata -c -i -a /ydl_a_20250603.txt --download-archive /archive.txt' # 設定儲存目錄 output_dir="/Desktop/yt-dlp" # 確保儲存目錄存在,如果不存在則創建它 mkdir -p "$output_dir" # 切換到儲存目錄下執行 yt-dlp,這樣下載的檔案會直接儲存在該目錄 cd "$output_dir" # 執行 yt-dlp 指令 eval "$youtube_dl_command" echo "音訊下載完成於 $(date)"
使腳本可執行:
在終端機中執行:chmod +x ~/download_audio.sh
創建
launchd
配置文件 (com.yourname.downloadaudio.plist
):
在終端機中執行:nano ~/Library/LaunchAgents/com.yourname.downloadaudio.plist
貼入以下內容(請將
/Users/你的使用者名稱/download_audio.sh
替換為你的實際腳本路徑):<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "[http://www.apple.com/DTDs/PropertyList-1.0.dtd](http://www.apple.com/DTDs/PropertyList-1.0.dtd)"> <plist version="1.0"> <dict> <key>Label</key> <string>com.yourname.downloadaudio</string> <key>ProgramArguments</key> <array> <string>/Users/你的使用者名稱/download_audio.sh</string> </array> <key>StartInterval</key> <integer>86400</integer> <key>StandardErrorPath</key> <string>/tmp/download_audio.err</string> <key>StandardOutPath</key> <string>/tmp/download_audio.log</string> </dict> </plist>
載入
launchd
配置:
在終端機中執行:launchctl load ~/Library/LaunchAgents/com.yourname.downloadaudio.plist
這樣就設定完成,你的 yt-dlp
指令將會每天自動執行,並將音訊檔案儲存到 /Desktop/yt-dlp
目錄下。