Mac下载bilibili视频
安装
-
安装 yt-dlp
brew install yt-dlp
-
安装FFmpeg
用于合并音视频流、转码等操作
brew install ffmpeg
使用
下载单个视频
-
查看可用格式
yt-dlp -F --cookies-from-browser chrome "https://www.bilibili.com/video/BV15B4y1G7F3?spm_id_from=333.788.recommend_more_video.-1&vd_source=6d42abad8703c58f028f7f53a5be37c0"
ID EXT RESOLUTION FPS │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ─────────────────────────────────────────────────────────────────────────────────────────── 30216 m4a audio only │ ≈ 1.48MiB 46k https │ audio only mp4a.40.5 46k 30232 m4a audio only │ ≈ 3.21MiB 100k https │ audio only mp4a.40.2 100k 30280 m4a audio only │ ≈ 5.32MiB 167k https │ audio only mp4a.40.2 167k 30251 m4a audio only │ ≈ 72.77MiB 2277k https │ audio only flac 2277k 30016 mp4 640x360 29 │ ≈ 11.31MiB 354k https │ avc1.64001E 354k video only 100022 mp4 640x360 30 │ ≈ 9.69MiB 303k https │ av01.0.01M.08 303k video only 100109 mp4 640x360 30 │ ≈ 7.31MiB 229k https │ hev1.1.6.L120 229k video only 30032 mp4 852x480 29 │ ≈ 25.29MiB 791k https │ avc1.64001F 791k video only 100023 mp4 852x480 30 │ ≈ 13.43MiB 420k https │ av01.0.04M.08 420k video only 100110 mp4 852x480 30 │ ≈ 11.52MiB 360k https │ hev1.1.6.L120 360k video only 30064 mp4 1280x720 29 │ ≈ 52.62MiB 1647k https │ avc1.640028 1647k video only 100024 mp4 1280x720 30 │ ≈ 26.11MiB 817k https │ av01.0.05M.08 817k video only 100111 mp4 1280x720 30 │ ≈ 21.32MiB 667k https │ hev1.1.6.L120 667k video only 30080 mp4 1920x1080 29 │ ≈ 84.02MiB 2629k https │ avc1.640032 2629k video only 100026 mp4 1920x1080 30 │ ≈ 52.86MiB 1654k https │ av01.0.08M.08 1654k video only 100113 mp4 1920x1080 30 │ ≈ 44.88MiB 1404k https │ hev1.1.6.L150 1404k video only 100144 mp4 1920x1080 59 │ ≈ 56.37MiB 1764k https │ hev1.1.6.L150 1764k video only 100028 mp4 1920x1080 60 │ ≈ 59.68MiB 1867k https │ av01.0.09M.08 1867k video only 30116 mp4 1920x1080 62 │ ≈138.18MiB 4324k https │ avc1.640032 4324k video only 100029 mp4 3840x2160 60 │ ≈233.22MiB 7298k https │ av01.0.13M.08 7298k video only 30120 mp4 3840x2160 62 │ ≈417.50MiB 13064k https │ avc1.640034 13064k video only 100145 mp4 3840x2160 62 │ ≈239.33MiB 7489k https │ hev1.1.6.L153 7489k video only 30127 mp4 7680x4320 29 │ ≈411.37MiB 12873k https │ hev1.1.6.L180 12873k video only 100032 mp4 7680x4320 30 │ ≈379.13MiB 11864k https │ av01.0.16M.08 11864k video only
-
下载指定分辨率视频
// 100032 map4数据的ID // 30280 m4a数据的ID // --merge-output-format 使用ffmpeg合并mp4+m4a yt-dlp -f 100032+30280 --merge-output-format mp4 --cookies-from-browser chrome "https://www.bilibili.com/video/BV15B4y1G7F3/?vd_source=6d42abad8703c58f028f7f53a5be37c0"
-
动态选择分辨率
yt-dlp -f "bestvideo[height=2160][vcodec^=avc1]+bestaudio" --merge-output-format mp4 --cookies-from-browser chrome "https://www.bilibili.com/video/BV15B4y1G7F3/?vd_source=6d42abad8703c58f028f7f53a5be37c0"
下载合集
-
命令
yt-dlp -f "bestvideo+bestaudio/best" --merge-output-format mp4 "合集url"
自动化下载
-
脚本
import subprocess import sysdef main(input_file):try:with open(input_file, 'r', encoding='utf-8') as urls:for url in urls:print("url:", url) subprocess.run([ # 此处改为 4 个空格缩进"yt-dlp","-f", "bestvideo+bestaudio/best","-o", "%(playlist_title)s/%(title)s.%(ext)s", # 通过 %(playlist_title)s 变量指定合集名称作为文件夹名,%(title)s 作为文件名"--concurrent-fragments","4", # 多线程下载"--merge-output-format", "mp4","--cookies-from-browser", "chrome",url.strip() # 建议添加 strip() 去除 URL 末尾换行符])except FileNotFoundError:print(f"错误:文件 '{input_file}' 不存在")except Exception as e:print(f"其他错误:{e}")if __name__ == "__main__":if len(sys.argv) != 2:print("用法:python script.py <文件路径>")sys.exit(1)main(sys.argv[1]) # sys.argv[1] 为第一个参数(文件路径)
-
使用
python3 脚本名 下载地址文本
https://www.bilibili.com/video/BV15B4y1G7F3 https://www.bilibili.com/video/BV1Ts4y1W7v4 https://www.bilibili.com/video/BV1mv4y1y7wG https://www.bilibili.com/video/BV18T421Y7fA https://www.bilibili.com/video/BV13q421c7mY
yt-dlp参数解析
基础参数
-
格式选择与画质控制
-
-f/--format
:指定下载格式(支持动态筛选器或固定ID)# 下载最佳视频+最佳音频(自动合并) yt-dlp -f "bestvideo+bestaudio" URL# 下载4K分辨率(H.264编码) yt-dlp -f "bestvideo[height=2160][vcodec^=avc1]" URL# 列出所有可用格式(ID、分辨率、编码) yt-dlp -F URL
-
-S/--format-sort
:按特定规则排序格式# 优先选择分辨率≤1080p且H.264编码的视频 yt-dlp -S "+res:1080,codec:avc1" URL
-
-
输出路径与文件名
-
-o/--output
:自定义保存路径与命名规则# 按标题保存到指定目录(支持变量占位符) yt-dlp -o "~/Downloads/%(title)s.%(ext)s" URL# 包含播放列表序号(适用于批量下载) yt-dlp -o "%(playlist_index)s-%(title)s.%(ext)s" PLAYLIST_URL
-
音频与字幕参数
-
音频提取与转换
-
-x/--extract-audio
:提取音频# 提取为MP3格式(最高音质) yt-dlp -x --audio-format mp3 --audio-quality 0 URL
-
-
字幕处理
-
--write-subs
:下载字幕# 下载简体中文字幕(不下载视频) yt-dlp --write-subs --sub-langs "zh-Hans" --no-download URL# 嵌入字幕到视频文件(需FFmpeg) yt-dlp --embed-subs URL
-
登录与网络参数
-
身份认证
-
--cookies-from-browser
:从浏览器读取Cookies(需关闭浏览器)# 使用Chrome的Cookies下载大会员专享内容(如B站4K) yt-dlp --cookies-from-browser chrome URL
-
--cookies
:加载手动导出的Cookies文件# 使用cookies.txt文件绕过登录限制 yt-dlp --cookies cookies.txt URL
-
-
代理与限速
-
--proxy
:通过代理访问# 使用SOCKS5代理下载(绕过地域限制) yt-dlp --proxy "socks5://127.0.0.1:1080" URL
-
--limit-rate
:限制下载速度# 限制速度为1MB/s(单位:KB/s) yt-dlp --limit-rate 1000 URL
-
播放列表与批量下载
-
播放列表控制
-
--playlist-items
:选择播放列表中的特定项# 下载前5个视频(支持范围如1-5,7) yt-dlp --playlist-items 1-5,7 PLAYLIST_URL
-
--yes-playlist
:强制解析为播放列表# 下载单个视频时避免误识别为播放列表 yt-dlp --no-playlist URL
-
-
批量下载
-
-a/--batch-file
:从文件读取多个URL# 批量下载urls.txt中的链接 yt-dlp -a urls.txt
-
下载加速
-
启用多线程
--concurrent-fragments 4
-
使用aria2加速
--downloader aria2c