yt-dlp下載YouTub影音及下載網路影片

Posted: June 9, 2022
Updated: June 22, 2022

 YouTube影音平台是大多數人的最愛,尤以新冠肺炎肆虐全球後,不少連續劇、綜藝節目發布至YouTube。因我常先存至硬碟再觀賞,所以使用 3D Youtube DownloaderYouTube Downloader HD下載。但3D Youtube Downloader最近(2022-05-25)卻無效,YouTube Downloader HD只能下載一個檔案且速度過慢,因此找上了下載YouTube利器yt-dlp。底下介紹以Windows 64位元為主!

yt-dlp安裝

 影音播放軟體MPC-HC、SMPlayer都使用yt-dlp觀賞YouTube,因此一兼二顧就以MPC-HC外掛yt-dlp作說明。下載MPC-HC,例如:MPC-HC.1.9.21.2.x64.zip,解壓縮至D:\Apps\MPC-HC。複製D:\Apps\MPC-HC\mpc-hc64.exe,於D:\Apps資料夾貼上捷徑。

 下載yt-dlp.exe,移至D:\Apps\MPC-HC。因為可能需合併影像與音訊,所以再下載FFmpeg,解壓縮ffmpeg-master-latest-win64-gpl.zip,將ffmpeg.exe移至D:\Apps\MPC-HC。

下載YouTube影音

  • yt-dlp的Windows版須於命令提示字元執行,Linux/BSD及MacOS版則於終端機(Terminal)執行。使用yt-dlp指令時要藉著文字編輯器(如NotePad++Geany…),於文字編輯器編輯指令再複製指令貼至Windows命令提示字元或Linux/BSD終端機(Terminal)或MacOS終端機,方能事半功倍。熟練鍵盤快速鍵 · 複製:Ctrl + C · 貼上:Ctrl + V 更能得心應手,迅速完成複製 · 貼上指令。
  • Windows命令提示字元:複製C:\Windows\System32\cmd.exe,於D:\Apps資料夾貼上捷徑,即可迅速開啟命令提示字元。Windows 10的cmd.exe可使用Ctrl + V貼上,Windows 7則否。
  • Linux終端機(Terminal)有非常好用的功能,Git for Windows將此移至Windows 系統。連結Git - Downloading Package,下載64-bit Git for Windows Portable,例如:PortableGit-2.36.1-64-bit.7z.exe。執行PortableGit-2.36.1-64-bit.7z.exe,安裝(install)於D:\Apps\PortableGit。複製D:\Apps\PortableGit內的git-bash.exe及git-cmd.exe,於D:\Apps資料夾貼上捷徑。
    git-bash就是Linux終端機,git-cmd則是Windows命令提示字元。git-bash可使用快速鍵 Shift+Ins 貼上指令。
  • 想使用下載工具wget,連結GNU Wget for Windows,下載並解壓縮ZIP,將wget.exe移至D:\Apps\PortableGit\usr\bin即可。開啟git-bash,貼上底下指令測試
    wget https://diii.neocities.org/inst_en.txt
    MINGW64 /
    $ wget https://diii.neocities.org/inst_en.txt
    --2022-06-06 18:57:48--  https://diii.neocities.org/inst_en.txt
    Resolving diii.neocities.org (diii.neocities.org)... 2620:2:6000::a:1, 198.51.233.2
    Connecting to diii.neocities.org (diii.neocities.org)|2620:2:6000::a:1|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 6277 (6.1K) [text/plain]
    Saving to: 'inst_en.txt'
    
         0K ......                                                100% 2.09G=0s
    
    2022-06-06 18:57:49 (2.09 GB/s) - 'inst_en.txt' saved [6277/6277]
    
  • 以下的yt-dlp指令適用於git-bash與Windows命令提示字元,也很容易修改成Linux作業系統終端機使用。
    更新 yt-dlp 到最新版本
    "D:\Apps\MPC-HC\yt-dlp" -U
    列出影片的可用格式以便下載
    "D:\Apps\MPC-HC\yt-dlp" -F [YouTube video URL]
    將上面指令複製至文字編輯器,再複製底下網址
    https://www.youtube.com/watch?v=LOBnOr21y2A
    取代文字編輯器裡的 [YouTube video URL] 成為
    "D:\Apps\MPC-HC\yt-dlp" -F https://www.youtube.com/watch?v=LOBnOr21y2A
    複製文字編輯器裡的指令,貼至git-bash
    MINGW64 /
    $ "D:\Apps\MPC-HC\yt-dlp" -F https://www.youtube.com/watch?v=LOBnOr21y2A
    [youtube] LOBnOr21y2A: Downloading webpage
    [youtube] LOBnOr21y2A: Downloading android player API JSON
    [youtube] LOBnOr21y2A: Downloading player 7eff7529
    [info] Available formats for LOBnOr21y2A:
    ID  EXT   RESOLUTION FPS |   FILESIZE   TBR PROTO | VCODEC        VBR ACODEC      ABR     ASR MORE INFO
    ----------------------------------------------------------------------------------------------------------------
    sb2 mhtml 48x27          |                  mhtml | images                                    storyboard
    sb1 mhtml 80x45          |                  mhtml | images                                    storyboard
    sb0 mhtml 160x90         |                  mhtml | images                                    storyboard
    139 m4a   audio only     |  113.45KiB   49k https | audio only        mp4a.40.5   49k 22050Hz low, m4a_dash
    249 webm  audio only     |  116.18KiB   50k https | audio only        opus        50k 48000Hz low, webm_dash
    250 webm  audio only     |  150.59KiB   65k https | audio only        opus        65k 48000Hz low, webm_dash
    140 m4a   audio only     |  298.01KiB  129k https | audio only        mp4a.40.2  129k 44100Hz medium, m4a_dash
    251 webm  audio only     |  286.64KiB  125k https | audio only        opus       125k 48000Hz medium, webm_dash
    17  3gp   176x144      7 |  179.36KiB   77k https | mp4v.20.3     77k mp4a.40.2    0k 22050Hz 144p
    160 mp4   256x144     30 |  151.49KiB   66k https | avc1.4d400c   66k video only              144p, mp4_dash
    278 webm  256x144     30 |  169.30KiB   74k https | vp9           74k video only              144p, webm_dash
    133 mp4   426x240     30 |  344.97KiB  151k https | avc1.4d4015  151k video only              240p, mp4_dash
    242 webm  426x240     30 |  247.13KiB  108k https | vp9          108k video only              240p, webm_dash
    134 mp4   640x360     30 |  524.62KiB  230k https | avc1.4d401e  230k video only              360p, mp4_dash
    18  mp4   640x360     30 | ~854.65KiB  359k https | avc1.42001E  359k mp4a.40.2    0k 44100Hz 360p
    243 webm  640x360     30 |  404.59KiB  177k https | vp9          177k video only              360p, webm_dash
    135 mp4   854x480     30 |    1.02MiB  456k https | avc1.4d401f  456k video only              480p, mp4_dash
    244 webm  854x480     30 |  623.96KiB  273k https | vp9          273k video only              480p, webm_dash
    22  mp4   1280x720    30 | ~  2.92MiB 1259k https | avc1.64001F 1259k mp4a.40.2    0k 44100Hz 720p
    136 mp4   1280x720    30 |    1.93MiB  867k https | avc1.4d401f  867k video only              720p, mp4_dash
    247 webm  1280x720    30 |    1.09MiB  487k https | vp9          487k video only              720p, webm_dash
    298 mp4   1280x720    60 |    4.29MiB 1924k https | avc1.4d4020 1924k video only              720p60, mp4_dash
    302 webm  1280x720    60 |    1.60MiB  716k https | vp9          716k video only              720p60, webm_dash
    299 mp4   1920x1080   60 |    7.22MiB 3237k https | avc1.64002a 3237k video only              1080p60, mp4_dash
    303 webm  1920x1080   60 |    2.22MiB  997k https | vp9          997k video only              1080p60, webm_dash
    308 webm  2560x1440   60 |    7.91MiB 3546k https | vp9         3546k video only              1440p60, webm_dash
    315 webm  3840x2160   60 |   16.75MiB 7514k https | vp9         7514k video only              2160p60, webm_dash
    因為影片屬 4K與60FPS,所以有好多格式供下載。ID 140是副檔名m4a,只有音訊。ID 251是副檔名webm,只有音訊。ID 136是副檔名mp4,只有影像。ID 303是副檔名webm,只有影像。底下測試,先建立D:\Downloads資料夾。
    副檔名 .m4a 是由蘋果(Apple)公司為了區別純音訊MP4檔案和包含影片的MP4檔案而使用的副檔名。M4A的本質和音訊MP4相同,故音訊MP4檔案亦可直接更改副檔名為M4A。
    手機版LINE可播放.m4a,可將.m4a存於Keep再「儲存至裝置」。手機內建的音樂播放APP可聆聽M4A,M4A取代MP3是未來趨勢。
    LINE趕上潮流了,也可以播放webm影片
    下載上例 ID 140 音訊存至D:\Downloads,檔名為 標題.m4a
    "D:\Apps\MPC-HC\yt-dlp" -f 140 -o "D:\Downloads\%(title)s.%(ext)s" https://www.youtube.com/watch?v=LOBnOr21y2A

    下載上例 ID 136 影像存至D:\Downloads,檔名為 標題.mp4
    "D:\Apps\MPC-HC\yt-dlp" -f 136 -o "D:\Downloads\%(title)s.%(ext)s" https://www.youtube.com/watch?v=LOBnOr21y2A

    下載上例 ID 136與140 存至D:\Downloads並借著ffmpeg合拼檔案,檔名為 標題.mp4
    "D:\Apps\MPC-HC\yt-dlp" -f 136+140 -o "D:\Downloads\%(title)s.%(ext)s" https://www.youtube.com/watch?v=LOBnOr21y2A
    MINGW64 /
    $ "D:\Apps\MPC-HC\yt-dlp" -f 136+140 https://www.youtube.com/watch?v=LOBnOr21y2A -o "D:\Downloads\%(title)s.%(ext)s"
    [youtube] LOBnOr21y2A: Downloading webpage
    [youtube] LOBnOr21y2A: Downloading android player API JSON
    [info] LOBnOr21y2A: Downloading 1 format(s): 136+140
    [download] Destination: D:\Downloads\▒p▒▒▒▒▒▒ - ▒▒▒F ▒{▒q▒p▒B▒M ▒▒▒▒  - ▒▒▒Ťj▒v.f136.mp4
    [download] 100% of 1.93MiB in 00:01
    [download] Destination: D:\Downloads\▒p▒▒▒▒▒▒ - ▒▒▒F ▒{▒q▒p▒B▒M ▒▒▒▒  - ▒▒▒Ťj▒v.f140.m4a
    [download] 100% of 298.01KiB in 00:00
    [Merger] Merging formats into "D:\Downloads\▒p▒▒▒▒▒▒ - ▒▒▒F ▒{▒q▒p▒B▒M ▒▒▒▒  - ▒▒▒Ťj▒v.mp4"
    Deleting original file D:\Downloads\▒p▒▒▒▒▒▒ - ▒▒▒F ▒{▒q▒p▒B▒M ▒▒▒▒  - ▒▒▒Ťj▒v.f140.m4a (pass -k to keep)
    Deleting original file D:\Downloads\▒p▒▒▒▒▒▒ - ▒▒▒F ▒{▒q▒p▒B▒M ▒▒▒▒  - ▒▒▒Ťj▒v.f136.mp4 (pass -k to keep)
    此mp4檔可於LINE直接觀看,也可於電視的USB播放(但要先查明電視的USB支援的mp4格式,我家老舊的Sony BRAVIA KDL-42W650A不支援1920x1080@60fps),只有影像的mp4與m4a合拼就是一般所謂的YouTube影音mp4。
    下載多首歌曲,底下是 Bash script,僅適於 git-bash
    #!/bin/bash
    # Created by CRLin, download YouTube .m4a
    # sh youtube_m4a.sh
    
    output_dir="D:\Downloads"
    
    URL=(
    'https://www.youtube.com/watch?v=HYnV_pkO-Rw'
    'https://www.youtube.com/watch?v=psbpSLF2ess'
    ''
    )
    
    length=${#URL[@]}
    for (( j=0; j<${length}; j++ ));
    do
      if [ -n "${URL[$j]}" ]; then
        "D:\Apps\MPC-HC\yt-dlp" -f 140 -o "$output_dir\%(title)s.%(ext)s" "${URL[$j]}"
      fi
    done
    複製上面Bash script至文字編輯器,存於D:\Apps\PortableGit,檔名為 youtube_m4a.sh,於 git-bash 執行
    sh youtube_m4a.sh
    下載 Carpenters 兩首歌。可自己增加 youtube 影音網址並變更下載資料夾$output_dir。
  • 下載分段影片參數如下
    --split-chapters -o chapter:"D:\Downloads\%(title)s-%(section_number)s-%(section_title)s.%(ext)s"
    例如:
    "D:\Apps\MPC-HC\yt-dlp" -f 248+251 --split-chapters https://www.youtube.com/watch?v=Q6POF2tneOo -o chapter:"D:\Downloads\%(title)s-%(section_number)s-%(section_title)s.%(ext)s"
  • 下載影片的部分時間點
    "D:\Apps\MPC-HC\yt-dlp" -f "303+251[protocol!*=dash]" --external-downloader ffmpeg --external-downloader-args "ffmpeg_i:-ss 00:02:00.00 -to 00:04:00.00" https://www.youtube.com/watch?v=qhVK5HeJPh4 -o "D:\Downloads\%(title)s.%(ext)s"
  • 烈火軍校播放清單下載
    列出烈火軍校播放清單影片第一集的可用格式(--playlist-items 參數指定)
    "D:\Apps\MPC-HC\yt-dlp" -F --playlist-items 1 https://www.youtube.com/playlist?list=PLF-0izTZ06nC_KLMFUhgyxJW3SBeA340k
    列出影片的第一集可用字幕
    "D:\Apps\MPC-HC\yt-dlp" --playlist-items 1 --list-subs https://www.youtube.com/playlist?list=PLF-0izTZ06nC_KLMFUhgyxJW3SBeA340k
    MINGW64 /
    ...
    [info] Available subtitles for huLCBPmXNx8:
    Language Name                  Formats
    ar       Arabic                vtt, ttml, srv3, srv2, srv1, json3
    zh-Hans  Chinese (Simplified)  vtt, ttml, srv3, srv2, srv1, json3
    zh-Hant  Chinese (Traditional) vtt, ttml, srv3, srv2, srv1, json3
    en       English               vtt, ttml, srv3, srv2, srv1, json3
    ...
    烈火軍校播放清單提供中文簡體字幕(zh-Hans)、中文繁體字幕(zh-Hant),下載烈火軍校播放清單(共48集),webm影像、音訊合拼及字幕,存至D:\Downloads,檔名為 標題.webm及 標題.zh-Hant.srt
    "D:\Apps\MPC-HC\yt-dlp" -f 248+251 --write-subs --sub-langs zh-Hant --convert-subs srt -o "D:\Downloads\%(title)s.%(ext)s"  https://www.youtube.com/playlist?list=PLF-0izTZ06nC_KLMFUhgyxJW3SBeA340k
    烈火軍校播放清單第27集未提供中文繁體字幕,因此使用底下指令只下載第27集簡體字幕
    "D:\Apps\MPC-HC\yt-dlp" --skip-download --playlist-items 27 --write-subs --sub-langs zh-Hans --convert-subs srt -o "D:\Downloads\%(title)s.%(ext)s" https://www.youtube.com/playlist?list=PLF-0izTZ06nC_KLMFUhgyxJW3SBeA340k
    可使用文字編輯器編輯 srt字幕檔,簡繁轉換工具建議使用 ConvertZ(ConvertZ教學)
  • 多個檔案重新命名成按數字順序(只適用於git-bash)
    將下載的烈火軍校重新命名成數字順序 烈火軍校 01.webm 及 烈火軍校 01.srt …,共96個檔案。
    我經常會先建立D:\影視\陸劇\烈火軍校,直接下載烈火軍校電視劇至此資料夾。建議建立D:\影視\陸劇\烈火軍校,移動D:\Downloads的烈火軍校至此。
    切換至 D:\影視\陸劇\烈火軍校
    cd "D:\影視\陸劇\烈火軍校"
    MINGW64 /
    $ cd "D:\影視\陸劇\烈火軍校"
    
    MINGW64 /d/影視/陸劇/烈火軍校
    $
    
    列出全部的.srt檔,觀察順序是否正確(git-bash檔名排列與git-cmd不同)
    ls *.srt
    MINGW64 /d/影視/陸劇/烈火軍校
    $ ls *.srt
    '【MULTISUB】白鹿女扮男装入军校 许凯调戏大明星反被抓?'$'\360\237\224\245''Arsenal Military Academy EP01 _ 爱奇艺华语剧场.zh-Hant.srt'
    '【MULTISUB】白鹿许凯演绎别样热血浪漫 '$'\360\237\224\245''Arsenal Military Academy EP03|烈火军校 _ 爱奇艺华语剧场.zh-Hant.srt'
    ...
    '【MULTISUB】白鹿许凯竟成室友'$'\360\237\244\243\360\237\244\243''白鹿体力不支训练掉队'$'\360\237\224\245''Arsenal Military Academy EP02|烈火军校|爱奇艺华语剧场.zh-Hant.srt'
    因為第2集的標題而排至最後,以檔案總管複製第3集的主檔名,再將第2集主檔名貼上第3集的主檔名並改為【MULTISUB】白鹿许凯演绎别样热血浪漫 🔥Arsenal Military Academy 02
    ls *.srt
    MINGW64 /d/影視/陸劇/烈火軍校
    $ ls *.srt
    '【MULTISUB】白鹿女扮男装入军校 许凯调戏大明星反被抓?'$'\360\237\224\245''Arsenal Military Academy EP01 _ 爱奇艺华语剧场.zh-Hant.srt'
    '【MULTISUB】白鹿许凯演绎别样热血浪漫 '$'\360\237\224\245''Arsenal Military Academy EP02.srt'
    '【MULTISUB】白鹿许凯演绎别样热血浪漫 '$'\360\237\224\245''Arsenal Military Academy EP03|烈火军校 _ 爱奇艺华语剧场.zh-Hant.srt'
    ...
    
    重新命名成按數字順序(原來的主檔名不可是 烈火軍校。若要改成檔名 烈火軍校 001.srt,則底下的 '%02d' 改為 '%03d')
    num=1; for f in *.srt; do mv "$f" "烈火軍校 $(printf '%02d' $num).srt"; ((num++)); done
    MINGW64 /d/影視/陸劇/烈火軍校
    $ num=1; for f in *.srt; do mv "$f" "烈火軍校 $(printf '%02d' $num).srt"; ((num++)); done
    
    MINGW64 /d/影視/陸劇/烈火軍校
    $ ls
    '烈火軍校 01.srt'  '烈火軍校 03.srt'  '烈火軍校 05.srt'  '烈火軍校 07.srt'  '烈火軍校 09.srt'
    '烈火軍校 02.srt'  '烈火軍校 04.srt'  '烈火軍校 06.srt'  '烈火軍校 08.srt'  '烈火軍校 10.srt'
    ...
    
    相同的作法,處理 .webm(指令中的srt需改成webm)。

FFmpeg下載網路影片與轉檔

  • 已於yt-dlp安裝時順便安裝FFmpeg 。網路影片大多數化成.m3u8播放清單(將原影片分割成許多小影片檔.ts),要先以Web瀏覽器的擴充套件(或稱擴充功能)來取得m3u8。
    hls.js demo可取得三個m3u8網址,以其中一個為例
    https://test-streams.mux.dev/x36xhzz/url_0/193039199_mp4_h264_aac_hd_7.m3u8
    FFmpeg合拼網路m3u8的.ts檔指令(少數的m3u8無效)
    "D:\Apps\MPC-HC\ffmpeg" -headers "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0" -i [video URL] -c copy "D:\Downloads\output.mp4"
    將上面指令複製至文字編輯器,再複製m3u8網址,取代文字編輯器裡的 [video URL],成為
    "D:\Apps\MPC-HC\ffmpeg" -headers "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0" -i https://test-streams.mux.dev/x36xhzz/url_0/193039199_mp4_h264_aac_hd_7.m3u8 -c copy "D:\Downloads\output.mp4"
    複製文字編輯器裡的指令,貼至git-bash或git-cmd,就可下載至D:\Downloads,檔名output.mp4
    MINGW64 /
    $ "D:\Apps\MPC-HC\ffmpeg" -headers "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0" -i https://test-streams.mux.dev/x36xhzz/url_0/193039199_mp4_h264_aac_hd_7.m3u8 -c copy "D:\Downloads\output.mp4"
    ffmpeg version N-106928-g163e737c17-20220515 Copyright (c) 2000-2022 the FFmpeg developers
    ...
    Press [q] to stop, [?] for help
    [https @ 000001a39744ef00] Opening 'https://test-streams.mux.dev/x36xhzz/url_0/url_464/193039199_mp4_h264_aac_hd_7.ts' for reading
    ...
    frame=38075 fps=333 q=-1.0 Lsize=  166270kB time=00:10:34.55 bitrate=2146.5kbits/s speed=5.54x
    video:154938kB audio:10096kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.749454%
  • 影音轉檔
    以YouTube影音轉成 MP3 為例,下載 Careless Whisper 成 MP4(Careless Whisper.mp4),可於LINE直接觀看
    "D:\Apps\MPC-HC\yt-dlp" -f 135+140 -o "D:\Downloads\Careless Whisper.%(ext)s" https://www.youtube.com/watch?v=z-xiPIrDiTA
    下載 Careless Whisper 成 M4A
    "D:\Apps\MPC-HC\yt-dlp" -f 140 -o "D:\Downloads\Careless Whisper.%(ext)s" https://www.youtube.com/watch?v=z-xiPIrDiTA
    將影音檔轉成MP3(參考FFmpeg MP3 Encoding Guide)
    "D:\Apps\MPC-HC\ffmpeg" -i [video or audio file] -codec:a libmp3lame -q:a 4 output.mp3
    因此 Careless Whisper.mp4轉成MP3(Careless Whisper.mp3)
    "D:\Apps\MPC-HC\ffmpeg" -i "D:\Downloads\Careless Whisper.mp4" -c:a libmp3lame -q:a 4 "D:\Downloads\Careless Whisper 01.mp3"
    Careless Whisper.m4a轉成MP3
    "D:\Apps\MPC-HC\ffmpeg" -i "D:\Downloads\Careless Whisper.m4a`" -c:a libmp3lame -q:a 4 "D:\Downloads\Careless Whisper 02.mp3"
    Careless Whisper 01.mp3與Careless Whisper 02.mp3皆為5.54MB,因為都是ID 140。
    每一個音訊檔(M4A、MP3)的音量大小不一,可參考Audio Volume Manipulation作調整。
  • M4A取代MP3是未來趨勢,影片轉成M4A
    "D:\Apps\MPC-HC\ffmpeg" -i [video or audio file] -vn -c:a aac -b:a 160k output.m4a
  • 更多的 FFmpeg 功能,可參考FFmpeg影音轉檔

上一頁