Posted: June 9, 2022
Updated: June 22, 2022
 YouTube影音平台是大多數人的最愛,尤以新冠肺炎肆虐全球後,不少連續劇、綜藝節目發布至YouTube。因我常先存至硬碟再觀賞,所以使用 3D Youtube Downloader 或 YouTube 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-bashMINGW64 / $ "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 02ls *.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.mp4MINGW64 / $ "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影音轉檔