流媒体下载完整实战:6 步从零玩转 N_m3u8DL-RE,把“只能在线看“的视频存进硬盘
2026/8/21 1:48:10 网站建设 项目流程

流媒体下载完整实战:6 步从零玩转 N_m3u8DL-RE,把"只能在线看"的视频存进硬盘

【免费下载链接】N_m3u8DL-RECross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文.项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE

N_m3u8DL-RE 是一款跨平台、免费开源的流媒体下载器,专门解决 MPD(DASH)、M3U8(HLS)、ISM(MSS)视频"只能在线看、没法保存"的难题,同时支持点播下载与直播录制,界面还自带中英繁三种语言。下面我用一次真实的下载经历,带你从装好工具到搞定加密流、录下整场直播,全程走一遍。


一个差点让我放弃的下午

上个月,同事找上我,说他报了一门付费在线课,网页端只有播放器,连个下载按钮的影子都没有,课程还被切成几百个 6 秒一段的分片。

他问我:"能弄下来吗?我想在通勤路上离线看。"

说实话,我第一反应是拒绝的——手动抓包、拼接几百个分片、再考虑音视频同步,想想就头大。但那天下午我还是硬着头皮搜了一圈,结果只花了不到十分钟就摸到了正路:把链接丢给一个叫 N_m3u8DL-RE 的命令行工具,剩下的事它全包了。半小时后,整门课以一个完整的 MP4 躺在了硬盘里。

如果你也遇到过下面这些情况,这篇文章就是为你准备的:

  • 网站有在线课程或影视资源,却没有下载入口
  • 想录制一场正在进行的直播赛事或会议
  • 下载时只想挑 1080p 的清晰度,不想要一堆重复轨道
  • 遇到 AES 加密甚至带 DRM 的流,不知道从哪下手

我们直接开始。


第一步:先认识这位"下载老兵"

它到底能干什么

一句话:N_m3u8DL-RE 能读取流媒体清单文件(MPD / M3U8 / ISM),把视频流切成的大量分片自动下载下来,再用 FFmpeg 合并成一个完整文件。点播、直播都支持,Windows / macOS / Linux 三大平台通吃。

它内部拆得很干净,想深入了解的可以顺着源码看:

源码目录负责的事
src/N_m3u8DL-RE.Parser/解析 MPD / M3U8 / ISM 清单,提取音视频轨道信息
src/N_m3u8DL-RE/DownloadManager/下载调度,包含直播录制相关逻辑
src/N_m3u8DL-RE/Crypto/AES、ChaCha20 等加解密实现
src/N_m3u8DL-RE/Util/合并、字幕、杂项工具
src/N_m3u8DL-RE.Common/公共实体、日志、HTTP 工具等基础层

需要提前准备什么

下载本身零依赖,但合并与解密阶段建议装好 FFmpeg。装完后在终端确认一下:

ffmpeg -version

能看到版本号就说明没问题。如果后续要解 DRM 加密流,再按需准备 mp4decrypt 或 shaka-packager(后面第六步会用到)。


第二步:三分钟完成安装

安装方式很多,挑一条适合你的就行。

方式一:下载预编译版本(最省事)

打开项目的 Release 页面,按自己的系统挑压缩包——Windows 选N_m3u8DL-RE-win-x64.zip,macOS 选 darwin 版本,Linux 选对应发行版。解压后直接运行可执行文件即可,不用装任何运行时。

方式二:Arch 系一行搞定

Arch Linux 用户用 AUR 最方便,社区维护的包有两个:

# 安装正式发行版 yay -Syu n-m3u8dl-re-bin # 安装开发版(体验最新功能) yay -Syu n-m3u8dl-re-git

方式三:从源码构建

想追最新改动,可以克隆仓库后用 .NET 编译:

git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE.git cd N_m3u8DL-RE/src/N_m3u8DL-RE dotnet build -c Release

装完先验证一下

不管哪种方式,先跑版本号确认能正常启动:

N_m3u8DL-RE --version

第三步:跑通第一行下载命令

一条命令搞定首战

程序的用法简单到不像话:把链接或本地清单文件直接丢给它就行。

N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd"

这个链接是项目TestStreams.md里收录的官方测试流,多音轨多字幕,非常适合第一次练手。程序会自动解析清单、挑选最佳画质、下载并合并,全程进度一目了然。

推荐再加三个参数

实战中我通常顺手带上输出目录、文件名和线程数:

N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd" \ --save-dir ./videos \ --save-name "我的收藏" \ --thread-count 8
参数解决什么问题
--save-dir指定保存目录,不存在会自动创建
--save-name自定义文件名,比默认的乱码 ID 好认
--thread-count并发线程数,宽带够时可以调到 CPU 核心数的 2 倍左右提速

几个顺手的小技巧

  • 想换中文界面:加--ui-language zh-CN(支持 en-US / zh-CN / zh-TW)
  • 不想让日志文件刷屏:加--no-log
  • 程序也吃本地文件:把.m3u8清单下载到本地后,N_m3u8DL-RE playlist.m3u8一样能跑

第四步:踩坑现场——默认下载"太大方"了

测试流跑通后,我第一次正式下载就栽了个跟头。

当时我下的是一个多音轨多字幕的片源,心想反正默认会"自动挑最佳",结果下完之后发现视频只有一个,音频却下回来五六条,字幕也全糊在一起。原来默认只挑最佳视频轨,但音频和字幕会全收——对只是想存个片的人来说,这明显有点"大方"过头了。

踩坑之后找到正解:按需挑选

还好轨道选择参数用起来不难。三个选择参数都支持正则表达式,格式是字段=正则,用冒号拼接,最后用for=best|worst|all决定取几条:

# 只选 1080p 且 HEVC 编码的最佳视频轨 N_m3u8DL-RE "清单链接" -sv res="1920*":codecs=hvc1:for=best # 只选最佳英语音轨 N_m3u8DL-RE "清单链接" -sa lang=en:for=best # 所有名字里带"中文"的字幕全要 N_m3u8DL-RE "清单链接" -ss name="中文":for=all

对应的-dv / -da / -ds则是反向剔除,把不想要的轨道扔出去。

懒人模式与字幕专属

如果你就是想全都要,也有现成的懒人开关:

# 所有轨道都下回来 N_m3u8DL-RE "清单链接" --auto-select # 只下字幕,跳过音视频,输出 VTT 格式 N_m3u8DL-RE "清单链接" --sub-only --sub-format VTT

--sub-format默认输出 SRT,可以切成 VTT;想提速就加-mt(即--concurrent-download),让音视频和字幕并发下载。

多轨道防重名:给文件加上"身份证"

多轨道同时下载时,文件名容易撞车,用--save-pattern让文件名自动带上清晰度和码率:

N_m3u8DL-RE "清单链接" --save-name "video" \ --save-pattern "<SaveName>_<Resolution>_<Bandwidth>"

最终会得到类似video_1920x1080_5000000.mp4的文件。模板还支持<Language><Codecs><FrameRate><MediaType>等变量,随便组合。


第五步:进阶玩法——直播也能边播边录

直播录制是很多人入坑的原因。直播流的分片会无限增长且边播边删,和点播完全是两码事,所以有专门的参数配合。

边播边录,录完即得成品

直播默认是"先下载完再合并",录几小时的直播会拖很久。开启实时合并后,录完就是成品:

N_m3u8DL-RE "https://cmafref.akamaized.net/cmaf/live-ull/2006350/akambr/out.mpd" \ --live-real-time-merge

(上面是官方直播测试流,来自TestStreams.md,可用来验证录制流程。)

限定录制时长

不想让它一直录下去,用--live-record-limit设上限,格式是时:分:秒

N_m3u8DL-RE "直播链接" \ --live-real-time-merge \ --live-record-limit 02:00:00

直播的其他玩法

  • 把正在播的直播当点播一次性拉取:--live-perform-as-vod
  • 追求低延迟成品:--live-pipe-mux,通过管道把数据实时喂给 FFmpeg 混流输出
  • 画面和字幕对不上:--live-fix-vtt-by-audio,程序会读音频起始时间修正 VTT 字幕

⚠️ 注意:网络不够稳定时别开--live-pipe-mux——管道内数据读取由 FFmpeg 负责,弱网环境下容易丢直播数据。另外录制时默认保留分片(--live-keep-segments),想省空间记得关掉。


第六步:当视频上了锁——手动密钥解密

HLS / DASH 常见加密方式有 AES-128、CENC(ClearKey)等,N_m3u8DL-RE 支持手动指定密钥解密。

先判断流是否加密

看清单里有没有#EXT-X-KEY(HLS)或ContentProtection(DASH)字段,也可以直接看程序解析时的提示。加密流一般需要KID:KEY形式的密钥。

手动指定 KID:KEY

每个密钥用一次--key,格式为KID:KEY

N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p_ClearKey.mpd" \ --key 9eb4050de44b4802932e27d75083e266:166634c675823c235a4a9446fad52e4d

(这条是项目测试流里的 ClearKey 加密流,密钥在TestStreams.md中有标注。)如果多个分片共用同一个 KEY,也可以直接简写--key 密钥值;密钥多了还能写进文件,用--key-text-file按 KID 自动查找。

切换解密引擎

解密依赖第三方程序,用--decryption-engine切换,默认是 MP4DECRYPT:

N_m3u8DL-RE "加密流链接" \ --key "KID:KEY" \ --decryption-engine FFMPEG

可选FFMPEG | MP4DECRYPT | SHAKA_PACKAGER。若程序没装进 PATH,用--decryption-binary-path指定完整路径。

HLS 直接硬指定

HLS 场景如果已知加密方法、密钥和 IV,也可以直接硬指定,省去猜流程:

N_m3u8DL-RE "链接" \ --custom-hls-method AES_128 \ --custom-hls-key 000102030405060708090a0b0c0d0e0f \ --custom-hls-iv 000102030405060708090a0b0c0d0e0f

温馨提示:请只对你有合法权限的内容使用解密功能,工具本身仅用于学习与技术研究。


出问题了别慌:四个常见症状对症下药

症状一:提示找不到 FFmpeg

合并或解密阶段报 FFmpeg 相关错误,多半是没装。Ubuntu / Debian 上:

sudo apt install ffmpeg

Windows 用户从官网下载 FFmpeg 后,把bin目录加进 PATH,或者直接用--ffmpeg-binary-path指定 exe 全路径。

症状二:速度上不去

先看线程数是不是太低,加大--thread-count;如果是不想占满带宽,反而要用限速参数-R(支持 Mbps / Kbps):

N_m3u8DL-RE "链接" --thread-count 16 -R 15M

症状三:网络不稳定,分片老失败

分片下载失败会自动重试,默认 3 次,弱网环境调高重试次数和超时时间:

N_m3u8DL-RE "链接" --download-retry-count 10 --http-request-timeout 60

走代理的加--custom-proxy,例如--custom-proxy http://127.0.0.1:8888

症状四:合并后文件不完整

程序默认会做分片数量校验(--check-segments-count),发现下载数和预期不符会给出提示。排查时先关掉--del-after-done,保留临时分片方便二次检查。

通用手段:打开调试日志

N_m3u8DL-RE "链接" \ --log-level DEBUG \ --log-file-path ./download.log

--log-level支持DEBUG / INFO / WARN / ERROR / OFF,出问题先开 DEBUG 看日志,基本都能定位到原因。


顺便说几个"知道的人都说香"的参数

上面已经覆盖了 90% 的使用场景,下面这几个属于锦上添花:

参数作用示例
--custom-range只下载指定分片区间,适合先试看一段--custom-range 05:00-20:00
--task-start-at定时执行任务,格式yyyyMMddHHmmss--task-start-at 20260815230000
-M/--mux-after-done下载完成后混流成指定容器-M format=mp4-M format=mkv:muxer=mkvmerge
--mux-import混流时引入外部音轨/字幕--mux-import path=zh-Hans.srt:lang=chi:name="中文 (简体)"
--ad-keyword用正则匹配广告分片 URL 并跳过--ad-keyword "ad\|promo"
--append-url-params给分片追加 URL 参数,部分网站必须开--append-url-params

收尾:一张自查清单,帮你完整走一遍

把全文浓缩成一张清单,跟着勾就不会迷路:

  • ✅ 装好 N_m3u8DL-RE 与 FFmpeg,--version验证可用
  • ✅ 用官方测试流跑通第一条N_m3u8DL-RE "链接"命令
  • ✅ 用--save-dir / --save-name / --thread-count规范输出
  • ✅ 多轨道用-sv / -sa / -ss精确挑选,-mt并发提速
  • ✅ 直播用--live-real-time-merge+--live-record-limit边录边合并
  • ✅ 加密流用--key KID:KEY配合--decryption-engine解密
  • ✅ 出问题先开--log-level DEBUG,再看日志对症下药

想继续深入的话,推荐三个方向:

  1. 通读项目 README:里面有全部命令行参数的详细说明,每个复杂参数都有--morehelp专属示例。
  2. 翻一翻TestStreams.md:覆盖点播、直播、加密、多字幕等场景的官方测试流都在这里,是练手的最佳素材。
  3. 对照源码目录:了解 Parser(解析器)、DownloadManager(下载管理)与 Crypto(解密)的实现,想给项目做贡献或定制行为时用得上。

工具再好,不如亲手跑通一次。现在就去复制一条测试流链接,把属于你的第一段视频下载下来吧——从此"只能在线看"这五个字,基本可以从你的字典里删掉了 🚀

【免费下载链接】N_m3u8DL-RECross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文.项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询