yt-dlp安装:[如果下载卡在某个库,可以尝试换源]
brew install yt-dlp
自己单独安装下ffmpeg: brew install ffmpeg ,这样下载的时候不指定格式id的话可以自动下载支持的最高分辨率的视频。
1. 查看支持的网站列表
youtube-dl --list-extractors #查看支持网站列表
youtube-dl -U #程序升级
2. 查看视频所有的可下载音视频格式
yt-dlp -F [url] --cookies-from-browser chrome
输出如下:(每一行第一位是id,后面有分辨率,格式等信息)
137 mp4 1920x1080 24 │ 51.82MiB 1831k https │ avc1.640028 1831k video only 1080p, mp4_dash
614 mp4 1920x1080 24 │ ~ 65.53MiB 2310k m3u8 │ vp09.00.40.08 2310k video only
248 webm 1920x1080 24 │ 31.99MiB 1130k https │ vp09.00.40.08 1130k video only 1080p, webm_dash
616 mp4 1920x1080 24 │ ~136.24MiB 4802k m3u8 │ vp09.00.40.08 4802k video only Premium
下载包含的指定id的视频:
yt-dlp [url] --cookies-from-browser chrome -f 137
3. 下载其他支持网站的视频
yt-dlp [url] --cookies-from-browser chrome
有一些网站(比如b站)添加了 --cookies-from-browser chrome 可以获得更高的可下载视频格式哦。
可以批量下载合集。
4. webm无损转换mp4
ffmpeg -i input.webm -c:v copy -c:a copy output.mp4
5. 只要音频
很简单,添加-x参数即可只下载音频,添加--audio-format mp3就可以把下载下来的当音频视频转码为mp3,所以你如果喜欢某个Up的视频,但是只想下载声音:
yt-dlp -x --audio-format mp3 [url]
下载过程中出现ssl错误,违反协议的要去掉代理,或者切换别的国家代理。
6. 指定最高质量下载
yt-dlp -f bestvideo+bestaudio [url]
这种语法会自动下载质量最高的音视频文件并进行合并(前提是安装了 ffmpeg )。
bestvideo 形式默认会自动选择 webm 格式,因此我们可以使用下面的语法指定如果没有 mp4 格式的视频文件的话再选择 webm 视频文件:
-f bestvideo[ext=mp4]/bestvideo[ext=webm]+bestaudio
对于音频文件也是一样的,可以指定优选选择 m4a 还是 webm 的音频文件(默认选择 webm):
-f bestvideo[ext=mp4]/bestvideo[ext=webm]+bestaudio[ext=m4a]/bestaudio[ext=webm]
bestvideo[ext=mp4]: 这样写识别有错误,mark下,以后再看。
最好质量的音频和视频格式文件合并后转成mp4格式输入:
yt-dlp -f bestvideo+bestaudio --merge-output-format mp4 -o "%(title)s.%(ext)s" [url]
下载固定分辨率的视频:
yt-dlp -f "bestvideo[height<=1080]+bestaudio" --cookies-from-browser chrome https://www.bilibili.com/bangumi/play/ep785549\?spm_id_from\=333.337.0.0\&from_spmid\=666.25.episode.0
使用yt-dlp 批量下载Bilibili (B站) 视频的方法是将视频的URL 列表保存在一个文本文件中,然后使用yt-dlp 以该文件作为输入进行批量下载。
yt-dlp -a urls.txt
限制文件大小:(参看https://www.lifenghua.cn/archives/aybZZ5rD)
# 下载最佳视频(同时带有音频),但大小不超过50MB
# 如果没有50MB以下的视频,则下载最差的视频(同时带有音频)
$ yt-dlp -f "b[filesize<50M] / w"
# 下载最大的视频(同时带有音频),但不超过50MB
# 如果没有50MB以下的视频,则下载最小的视频(同时带有音频)
$ yt-dlp -f "b" -S "filesize:50M"
# 下载大小最接近50MB的最佳视频(同时带有音频)
$ yt-dlp -f "b" -S "filesize~50M"
7. 音视频文件合并
有时候使用了bestvide+bestaudio会得到两个音视频文件:
bestvide.mp4
bestaudio.m4a
遇到这种情况不用担心,我们可以使用 ffmpeg 手动执行下合并,命令如下:
ffmpeg -i bestvide.mp4 -i bestaudio.m4a -c:a copy -c:v copy output.mp4
其中 bestvide.mp4 就是你下载后的视频文件,bestaudio.m4a 是你下载后的音频文件,而最后的 output.mp4 就是你合并之后输出的文件了。
8 下载youtube列表
这样会自动下载播放列表中的全部视频,另外也可以使用 --playlist 相关参数下载播放列表指定起始位置:
--playlist-start NUM 下载播放列表起始位置, 默认1
--playlist-end NUM 下载播放列表结束位置, 默认 last
--playlist-items ITEM_SPEC 下载播放列表里的特定选集. 如 --playlist-items 1,3,5,7-10, 就会下载 1,3,5,7,8,9,10 集
Note
在下载播放列表指定集之前可以先使用 -F 参数看下有哪些选集
9 断点续传
。。。
更新:
使用--cookies-from-browser , 报错。
WARNING: failed to decrypt cookie because UTF-8 decoding failed. Possibly the key is wrong?
解决方案:
https://github.com/yt-dlp/yt-dlp/issues/6564
https://github.com/yt-dlp/yt-dlp/issues/6564#issuecomment-2384694762
https://github.com/yt-dlp/yt-dlp/commit/4613096f2e6eab9dcbac0e98b6cec760bbc99375#diff-c042473d560a04c6fd504c3cb3ae2c9a56a27e42458132a265a3ffda0d60a5c7
要修改的源码本地地址:➜ ~ /usr/local/Cellar/yt-dlp/2024.10.7/libexec/lib/python3.13/site-packages/yt_dlp/cookies.py