2021年12月3日 星期五

[Ubuntu] 使用 yt-dlp 取代 youtube-dl 下載 youtube 上的音樂/影片

瀏覽數
系統: Ubuntu 20.04.x64 or Android手機上的Termux

最近使用 youtube-dl 指令下載 youtube 的影音,下載速度真的可以用「龜速」來形容。上網爬文了一下,有一個 youtube-dl 分支程式 yt-dlp,指令使用的方式幾乎一樣,但是下載速度超快的,所以改用 yt-dlp 來 [下載 | 搭配 mpv 即時觀看] youtube上的影音。

安裝方式如下:

1. 安裝

由於使用 python 的 pip 的方式安裝,可以先參考這篇 https://tinyurl.com/2s427cnk 如何安裝 youtube-dl。

升級 python3.8 +pip3:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.8
sudo update-alternatives --config python
替代項目 python(提供 /usr/bin/python)有 3 個選擇。
  選項       路徑              優先權  狀態
------------------------------------------------------------
  0            /usr/bin/python3.8   3         自動模式
  1            /usr/bin/python2.7   1         手動模式
  2            /usr/bin/python3.7   2         手動模式
* 3            /usr/bin/python3.8   3         手動模式
按下 <enter> 鍵以保留目前選項[*],或是輸入選擇編號:
輸入想要的python版本選項編號: 3


檢查python版本:
python -V
安裝pip3:
sudo apt install python3-pip
檢查pip3版本:
pip3 -V

使用 pip3 安裝更新 pip 及 yt-dlp:
sudo -H pip3 install -U pip yt-dlp

安裝 mp3gain (可以將音量標準化的一個軟體):
sudo apt update && sudo apt install snapd && sudo snap install mp3gain

安裝 mpv 影音播放軟體:
sudo apt install mpv


2. 自訂函數

you2mp3()  #下載 youtube 轉成 mp3
you2mp4()  #下載 youtube 轉成 mp4
youtv()  #直接使用 yt-dlp + mpv 線上聽音樂或觀看影片

編輯 .bashrc 將you2mp3() you2mp4() youtv() 3個自訂函數貼到 .bashrc 檔案的最下方並存檔
vi ~/.bashrc

you2mp3() {
  #如果是下載整個播放清單,網址須符合右方的格式 => https://www.youtube.com/playlist?list=PLf4gvJzKEA1IB_qHaFz4uaIy2Yq6jqFKy
  #youtube-dl -cit --extract-audio --audio-format mp3 $1
  yt-dlp -ci --extract-audio --audio-format mp3 $1
  if [ $2 ] ; then
      find $(pwd) -type f -iname \*.mp3 |
      while read f ;do echo '處理中………"$f"'
        mp3gain -p -a -r -k -d 6 "$f"
        #mid3iconv -e gbk --remove-v1 "$f" &>/dev/null
      done
  fi
  echo "$1" | grep -i "?v=" > /dev/null && f=$(echo "$1" | sed -e "s/^.*\?v=\(.*$\)/\1/") || f=$(echo "$1" | sed -e "s/^.*[a-z]\/\(.*$\)/\1/")
  if [ "$f" != "" ] ; then
    f1=$(find ./ -name "*$f*.mp3")
    echo "mp3gain音量處理 $f1"
    mp3gain -p -a -r -k -d 6 "$f1"
  fi
}
you2mp4() {
  如果是下載整個播放清單,網址須符合右方的格式 => https://www.youtube.com/playlist?list=PLo4HKDlY6L_nWnTF8EYBC0EeykU0LNYis
  #youtube-dl "$1" -ci -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' --merge-output-format mp4
  yt-dlp "$1" -ci -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' --merge-output-format mp4
}
youtv() {
  [ $# == 0 ] && echo "請輸入Youtube影片網址URL" && return
  mxy="--autofit=350 --ontop --geometry=100%:97%"
  msync="--autosync=1 --mc=1"
  mm="mpv $mxy $msync --cache=yes --loop=0"
  tv="$mm --no-border"
  #mp3="$mm --no-video --shuffle"
  mp3="mpv --cache=yes --no-video --shuffle"

  url=$1
  border=$2
  if [ "$border" == "" ] ; then
    read -p "只播放音樂(請輸入mp3):" border
  fi
  case $border in
    "mp3") $mp3 $url ;;
    *) yt-dlp -q --no-check-certificate --prefer-ffmpeg -o- $url | $tv - ;;
  esac
}


重新載入 ~/.bashrc
source ~/.bashrc


3. 使用

下載youtube影音儲存為mp3音樂檔(並標準化音量95db)
you2mp3 https://www.youtube.com/watch?v=xxxxx

下載youtube影音儲存為mp4影音檔
you2mp4 https://www.youtube.com/watch?v=xxxxx

觀看公視直播
youtv https://www.youtube.com/watch?v=JAzRXylm3M0

沒有留言: