简介:面向Mac用户的网页视频下载利器,适合需要批量保存在线视频的编辑者、收藏者与离线观看者;工具覆盖海量网站,支持1080P、4K等常见清晰度,尤其适合教学录屏存档、多平台素材采集等场景,能有效解决网页视频不易下载、清晰度受限的痛点。压缩包共432个文件,以nib界面布局、strings本地化文案、png/tiff图形素材、dylib功能库、plist配置为主,同时包含html帮助文档、ffmpeg/rtmpdump解码模块、Safari扩展及浏览器插件等,整体体积仅29.87MB,轻量且分类清晰,便于按功能检索。目前已有480人学习/下载。通过该资源可快速部署完整的Downie 3应用,直接拖入网页链接即可解析视频,并自动适配高级清晰度;内部的扩展组件与媒体处理模块也有助于分析流媒体抓取流程,对了解Mac应用打包方式、视频下载工具工作原理具有直接参考价值。
1. Downie 3 解决的从来不是能不能下载,而是能不能稳定而有序地下载
我在某公司的内容组工作时,接到过一个很常见的需求:把内部培训平台上几十个 MP4 课程缓存到本地,方便出差时离线看。试用浏览器自带的“另存为”没用,那个平台用的是 HLS 流,地址栏里永远只看到播放器的壳。后来同事甩给我一个 Downie 3,说“你把链接丢进去就行”。我半信半疑地复制了一条课程 URL,粘贴进去,十几秒后一个完整的 MP4 躺在下载目录里,连章节名都按我的规则排好了。那一刻我就明白:这类工具真正值钱的地方不在“能不能扒到视频”,而在面对各种站点各自的播放协议时,能不能稳定地解析、择优、重封装,并管理好落盘的顺序和命名。如果你也是 Mac 用户,平时要收藏课程、演讲回放、预告片,或者需要把你自己在别的平台传过的视频归档,这篇就讲 Downie 3 从原理到参数再到坑位的完整用法。
2. 视频下载的底层逻辑:从 m3u8 / DASH 到 Downie 的解析链路
2.1 网页视频并不是一个文件:HLS 与 DASH 的切片逻辑
很多用户下不来视频,根源在于把“网页里能播”理解成“网页里有文件”。实际播放器拿到的是一份播放清单,不是视频本体。主流流媒体协议里,HLS 会生成一个 m3u8 文本文件,里面按分辨率列出多个“流”,每个流又指向一堆 6 到 10 秒的 .ts 切片。播放器逐个下载切片、连续播放,看起来像一个完整文件。DASH 协议类似,但它更强调音视频分离:视频轨一份清单,音频轨一份清单,播放器同时拉两份再合成。这种设计是为了带宽自适应,但副作用是:如果你不处理清单,只抓某一个 .ts 片段,得到的要么是撕成碎片的短视频,要么是没声音的图像轨。
Downie 3 的核心工作,就是逆向读懂这套清单逻辑。它接收一个普通页面 URL 后,先加载页面、模拟浏览器解析请求,从网络层嗅探出候选的 m3u8 / MP4 / DASH 资源;然后把清单里每个分片按顺序拉下来,在本地做拼接,再交给 macOS 的视频框架做一次快速封装。它不做转码,除非你手动指定后处理,否则它尽量保留原始编码与清晰度。这也是为什么它下载速度快,因为“拼接切片”和“重新编码”是两回事,前者只是复制字节流,后者才吃 CPU。
2.2 Downie 的解析流程:嗅探、择优、拼接与重封装
我把一次完整的下载拆成四个阶段来理解,这样出了问题也好定位。第一阶段是嗅探,Downie 读取剪贴板或手动粘贴的 URL,启动一个内置浏览器内核去加载页面,拦截期间发出的媒体请求。某些站点喜欢把真实视频地址藏在 XHR 响应里,Downie 会通过页面 JS 框架用的 API 去逆向拼接地址。第二阶段是择优,同一个视频可能存在多个分辨率、多个编码格式,Downie 默认按“清晰度优先,其次是体积与兼容性”的策略选一条。你可以临时改用系统菜单里的“请求最佳可用版本”来覆盖这个策略。
第三阶段是拼接,这一步最常见的问题是某个分片请求失败。切片服务器不会保证百分百稳定,偶发 403 或超时很常见,Downie 的默认行为是自动重试。如果你所在网络对视频站有限速,它会把并发数降下来,避免把连接全部打满而触发风控。第四阶段是重封装,把拼接后的 .ts 文件写成 MP4/MKV 容器,并补上资源里的元数据。注意重封装只改容器,不改编码,所以格式转换非常快。如果你看到进度条走完但文件无法预览,多半是第四阶段中断,而不是下载没完成。
2.3 为什么复制链接粘贴比浏览器“保存视频”更可靠
浏览器扩展的“嗅探下载”依赖开发者工具里看到的具体请求 URL,那种 URL 经常是一次性签名,带过期时间,过几分钟就失效。Downie 的方式是拿页面地址去重新走一遍播放器初始化流程,拿到的是“还没过期的签名”,只要切片服务器给的过期时间窗口够长,它就能整个下完。很多视频站的反爬逻辑其实是靠 Referer 和 Cookie 判断请求身份,直接在浏览器里手存的 URL 脱离了页面上下文,被拒概率很高;而 Downie 在解析时带着用户当前浏览器导出的 Cookie 一起请求,身份是一致的。
我一般会把“复制 URL 粘贴进去”当成首选操作,而不是依赖扩展。还有一种情况,某些页面需要先登录才能看完整版,这时你不能只复制播放页地址,还要让 Downie 使用你浏览器里已登录的 Cookie。否则它嗅探到的只是试看片段的地址,下回来只有 90 秒。这个细节我后面专门讲,它是新手最容易踩的大坑。
3. 用 Downie 3 跑通第一次下载:界面操作与命令行双通道
3.1 最小操作路径:从复制 URL 到视频落盘
第一步是在系统偏好设置里给 Downie 开放“屏幕录制”权限。这不是它要去录屏,而是 macOS 的安全机制要求读取浏览器网络信息时获得授权。没给权限时,你粘贴链接进去往往毫无反应,但不会弹明确报错。授权后,打开 Downie,菜单栏会出现一个悬浮窗。接着去视频页面复制地址,切回 Downie,悬浮窗会自动感应剪贴板变化并弹出“粘贴并下载”按钮,点击就开始下载。
如果自动感应没触发,可以直接用快捷键调出主窗口,按 Cmd+V 粘贴地址再回车。下载开始后,主窗口会显示实时速度、已下大小和剩余时间。默认输出目录是“影片/Downie”,你可以在设置里改成自定义路径。我用的是外部硬盘上的素材库目录,避免系统盘空间被塞满。下载完成它会自动弹通知,并可选自动打开所在目录。
# 查看当前系统的下载目录设置(用于确认 macOS 侧行为) defaults read com.apple.dock 2>/dev/null | grep -i downie上面这条命令能粗略确认 Dock 里是否有 Downie 关联,但它不是核心判断依据。真正有用的是打开“下载完成”通知后,按住 Cmd 键点击通知里的“显示”按钮,这样能在 Finder 里直接跳到文件所在目录且不关闭通知。如果文件已经存在,说明解析成功;如果打开后是 0 KB 文件,说明拼接过程中断了,继续看第五节。
3.2 downiecli:把下载动作写进终端脚本
Downie 3 附带了一个命令行工具,名为 downiecli,安装位置通常在 /usr/local/bin。没有这个命令的话,需要去应用的“高级设置”里勾选“安装命令行工具”。它能接收一个或多个 URL 参数,也支持从标准输入读取。常见用法是把一个列表文件逐行喂给它。这样能实现批量下载而不用守着窗口,我经常用它做夜间批量任务。
# 下载单个视频,指定输出目录 downiecli -e "https://example.com/course/lesson-01" -d ~/Movies/MyCourse # 从文本文件批量读取链接(每行一个 URL) cat links.txt | downiecli -l参数说明:-e 表示执行下载并退出;-d 指定输出目录,注意这个目录需要提前建好,工具不会自动创建多级路径;-l 表示逐行读取标准输入,配合管道很方便。downiecli 默认使用与 GUI 相同的配置,包括清晰度偏好,所以你在图形界面里做的设置,命令行同样生效。注意它不会在终端里打印彩色进度条,只输出 JSON 结构的状态信息,刚开始用可能不习惯,但写成脚本时反而更容易解析。
# 判断 downiecli 是否已安装 which downiecli || echo "not found"如果在终端里显示 not found,你需要到应用菜单里重新点一次“安装命令行工具”,然后关掉终端重开。因为这个工具是软链到 /usr/local/bin,如果路径没进 PATH,就算安装成功也调用不了。对于习惯用 zsh 的新手,这一步是常见的翻车点。另外注意标题写的是 Downie 3,命令入口依然叫 downiecli,不要按年份去找。
3.3 浏览器扩展与剪贴板监听的配合
Downie 3 提供了多种方式接收链接:直接粘贴、拖拽 URL 到窗口、右键菜单、浏览器扩展等。我推荐按场景二选一。日常单条下载用剪贴板监听最省事,复制即弹出。批量整理时用命令行更有效率。浏览器扩展的主要价值是省掉“切窗口”这一步,在页面上右键直接发送到 Downie,但扩展依赖网络权限,有些站点会检测扩展痕迹而拒绝加载真实流,所以不要把它当主力。
还有一个容易被忽略的入口是系统共享菜单。你在任何 App 里选中视频文件或选中一段包含视频链接的文字,右键选“共享”,可以把它发给 Downie。这在处理邮件附件、IM 聊天记录里的链接时很顺手。跨平台设备也能用,同一局域网里手机复制链接,Mac 端 Downie 可以接收。不过这个功能依赖两台设备的蓝牙和网络权限,如果没反应,先确认两组权限都打开了。
4. 让下载体面落盘:四个必调参数与目录规则
4.1 清晰度与格式择优:默认行为和手动覆盖
Downie 3 的策略默认是“尽可能保持原始质量”,意思是如果发布者上传的是 4K,它不会主动降级;如果站点只有 1080p 版本,它也不会去拼一个不存在的 4K。但不少站点本身提供多码率,默认排序规则通常偏保守,优先选“最大体积且兼容性最好”的版本。实际上我更建议在偏好设置里改成“按清晰度优先”,这样遇到 1080p 与 720p 并存时,一定选前者。
格式方面,HLS 抓下来重封装默认是 MP4。如果你更在意字幕封装或保留原始章节信息,可以改成 MKV。改动位置是“设置 → 格式”。注意 MKV 在 macOS 自带的 QuickTime 里打不开,需要 IINA 播放器。我的习惯是:单纯看用 MP4,需要挂字幕或做剪辑素材用 MKV。改这个参数不会影响下载速度,只影响最后一步重封装的容器选择。
4.2 并发数与网络重试:低配网络下的保命参数
Downie 3 下载大文件时默认并发拉取切片,这能显著提速。但并发过高会带来两个问题:一是在公共 Wi-Fi 下限速明显,二是部分站点会触发反爬,导致大量 403 错误。设置里有两个关键参数:“并行下载数”和“单个视频的片段请求数”。前者指同时下载几个不同的视频,后者指同一个视频里同时拉几个切片。
我建议:家庭带宽在 100M 以下时,并行下载数设 2,片段请求数保持默认;在办公网络或公司统一出口下,尽量把并行下载数降到 1,避免影响他人。设置重试次数为 5 以上,超时时间从默认的 20 秒改到 10 秒。这样可以更快发现坏切片,而不是卡在一个失效地址上干等。如果你发现某个视频进度条一直卡在 99%,多半就是某个尾部切片反复请求失败,此时手动暂停再开始,比干等有效。
4.3 目录模板与命名规则:素材库的主心骨
默认输出目录是所有文件堆在同一个文件夹里,这对单次下载没问题,但内容一多就会变成一团乱麻。Downie 3 的目录模板支持占位符,常用变量包括 %title(页面标题)、%site(站点名)、%resolution(分辨率)、%date(日期)。我一般用这样一套规则:
| 用途 | 模板示例 | 效果 |
|---|---|---|
| 课程归档 | ~/Media/Courses/%site/%title.%res | 按站点分大类,按课程分文件 |
| 会议录音 | ~/Media/Talks/%date/%title | 按日期归档,避免同名覆盖 |
| 临时下载 | ~/Media/Inbox | 一律不套模板,每周清理一次 |
特别注意“%title”取自网页标题,可能包含“/”或“:”这类文件系统非法的字符。macOS 上冒号会被自动替换,但正斜杠会造成目录误解。我的习惯是让模板里不带 %title 的目录层级,只让它出现在文件名位置,并把“安全文件名”选项打开,这样能把风险字符自动过滤掉。命名规则确定后,尽量别频繁改动,否则你以前的素材就分散到不同规则里了。
4.4 后处理设置:转码、字幕与自动打开
后处理是完成下载之后自动执行的命令或动作。Downie 3 支持在下载完成后自动打开所在文件夹、自动弹出通知、运行一条 shell 命令。我常用的是运行命令做格式校验,例如用 ffprobe 检测文件是否完整。字幕方面,站点如果有独立字幕轨道,Downie 默认把字幕文件作为 .srt 下载到旁边,不会烧进画面。如果需要内嵌字幕,就要在“后处理”里设置自动合并工具。
我在处理长视频时会开“自动转码为 HEVC”,用这个来控制占用空间。但注意转码是一次重编码,会显著增加处理时间,CPU 弱的机型不建议开。Better 的做法是下载前先确认源格式:如果源本身就是 HEVC,不需要转;如果是 H.264,就保留原样。转码是“后悔药”,应该在你确认需要小体积时才用,不要拿来当默认操作。
5. Downie 3 高频坑位与排查思路:从无声音到字幕错位
5.1 无声音与音视频分离:TS 分段丢包的典型症状
现象是下载得到一个完整的 MP4,画面正常,声音只有前十几秒,然后逐渐消失,或者从头到尾没有声音轨道。原因是该站点使用 DASH 协议,音视频是两条独立流。Downie 需要同时下载两条流再做封装,如果网络波动导致音频流某个分片丢失,重试后仍然拿不到该分片,封装出来的文件就是“画面全、音频残”。
解决思路分两步:先看“偏好设置→并发”里是否把片段请求数调得过高,把它降到 2 再重新下载;如果还不行,就在站点播放器里手动切一个更低的音质选项,部分站点只有高清档才分离音视频,标清档反而给的是单文件流。最后手段是在 Downie 的上下文菜单里强制选择“仅下载最佳视频流”,放弃音频。这样得到的文件没有声音,但至少画面可用。我遇到过这种情况,通常是某平台为了防盗录,故意把音频放到了独立 CDN,普通解析很难稳定拿到,这时候直接选择单流版反而省心。
5.2 抓到的不是目标视频:页面里藏着预加载
现象是下载下来的文件内容与当前页面标题对不上,比如你正看第 5 集,下回来的却是广告片段或上一集的片头。原因是页面在加载时预请求了多个视频地址,播放器真正的视频源要等用户点击播放或滚动后才发起;而 Downie 嗅探时抓到了早期预加载的候选地址。
排查方法是打开 Downie 的“活动日志”,查看它实际解析出来的 URL 列表和对应的字节大小。如果发现多个候选,右键选择“在浏览器中打开”来确认哪一个才是当前要下内容。解决方法是先把页面视频播放起来,等播放器稳定出画面后再粘贴链接。个别站点还会用“分 P 嵌套”方式,先给一个壳页面,再展示真正的播放列表,这种情况要复制最终播放页的地址,而不是列表页地址。
5.3 下完后打不开:缓存目录的非正常中断
现象是视频显示下载完成,但双击打开提示文件已损坏,文件大小明显小于页面标注的时长对应体积。原因是下载过程中 Downie 先把切片写入临时文件,全部完成后才重命名为正式文件。如果这时 app 被强杀或系统睡眠导致进程中断,临时文件名还没改回去,你会看到一个扩展名正确但实际不完整的文件。
解决方法是先去缓存目录找回临时文件。缓存目录默认在“~/Library/Application Support/Downie/Temp”,里面有后缀 .part 或 .downie 的文件,把它们复制出来,改扩展名为 .ts,用 ffprobe 检查时长。如果能播放,手动重封装一次即可。更稳妥的做法是养成检查习惯:下载完成后的第一件事,看一下文件大小是否与站点标注的时长和码率大致匹配,明显偏小就立即删掉重新下载,而不是留着“试试看”。
5.4 字幕文件错位或缺失:跨语言检索的隐藏偏好
现象是视频下好了,但 .srt 字幕时间轴对不上,或干脆没有字幕文件,而站点上明明有。原因是 Downie 只下载播放清单里默认标记的那一条字幕轨道,很多平台默认返回第一个字幕轨道,不一定是中文或英文。或者站点字幕是图片型(.vtt 里嵌图片),这种无法直接转成文本 srt。
解决方法是下载前在设置里勾选“下载所有可用字幕”,之后在文件旁边会出现多个语言版本的 srt。如果只有一条轨道但语言不对,可以到站点播放器里手动切到目标语言,再触发一次解析。图片型字幕无解,只能用 OCR 工具后期识别。我的习惯是批量下载前先挑一个视频做字幕探测,确认能拿到目标语言,再放给全批次,避免一次下一百个全是错位字幕。
5.5 长时间排队“假死”:黑匣子判断与日志定位
现象是任务列表里某个视频一直显示“等待中”,取消也取消不掉,甚至 app 整体无响应。原因是某个网络请求卡死在线程里,UI 线程在等待一个永远不会返回的 socket。这种问题在弱网环境下很常见,真实原因很难从界面看出来。
排查路径是先打开终端,运行ps aux | grep -i downie,如果进程还在,先强制退出再重启。随后到“~/Library/Logs/DiagnosticReports”里找 Downie 的崩溃或卡顿报告,重点看时间戳和线程堆栈里是否停在网络请求相关函数。如果反复出现,说明你常用站点变更了协议,需要更新应用,或者在站点播放器里手动选旧版清晰度。几百条任务的大批量下载偶尔卡死一次很正常,关键在于把日志翻出来,确认是网络层还是解析层问题,再对症处理。
6. 把 Downie 3 变成批处理引擎:URL Scheme 与自动化脚本的组合用法
6.1 downie:// 链接与定时任务
Downie 3 支持 URL Scheme,格式是downie://download?url=视频地址。这个能力让它能被任意支持打开链接的应用唤起,包括浏览器书签、备忘录、以及 cron 任务。我常用的自动化路径是:用一条 crontab 每天凌晨读取当天新增的链接文件,逐行拼接成 downie:// 地址,再调用open命令交给 Downie 处理。
# 每天 2:30 从列表文件读取链接并批量交给 Downie 0 2 * * * /usr/local/bin/open "$(cat /Users/me/queue.txt | sed 's#^#downie://download?url=#' | paste -sd' ')"这段脚本的问题在于 URL 参数里的特殊字符会被 open 误解,实际使用时需要先用python3 -c 'import urllib.parse'做 URL 编码,再交给 open。更可靠的做法是用 downiecli 而不是 URL Scheme 做批处理,因为命令行工具不依赖 GUI 激活状态,直接以进程方式运行,日志更容易收集。URL Scheme 更适合轻量唤起场景,比如“看文章时想顺手存视频”,再配合脚本把整个流程固化下来。
6.2 验证下载完整性的两个小习惯
第一个习惯是下载后立即用 ffprobe 读一遍时长,与站点页面显示的时长比对,误差在 5% 以内才通过。第二个习惯是批量下载完成后统计目录文件数量,与链接列表行数做减法,快速发现“假成功”的任务。这两个习惯能帮你建立可靠流程,避免一个月的素材发现半数是坏的。
# 用 ffprobe 校验单个文件时长 ffprobe -v error -show_entries format=duration -of csv=p=0 ~/Movies/MyCourse/lesson-01.mp4如果 ffprobe 返回空值或 float 异常,大概率文件损坏,直接重下。把上面这条命令写进循环,配合 downiecli 的 JSON 输出,就能在无人值守的批量任务里自动排查坏文件。这套组合我用了很久,最大的感触是:Downie 3 的价值不在单次下载速度,而在你能给它定义一套规则,让它按你的习惯批量工作。本文给到的参数、命令和排查思路,基本覆盖了我日常遇到的大多数问题。希望帮到你。
本文还有配套的精品资源,点击获取