三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

N_m3u8DL-RE 下载教程:7 个问答带你玩转 MPD/M3U8/ISM 流媒体下载

N_m3u8DL-RE 下载教程:7 个问答带你玩转 MPD/M3U8/ISM 流媒体下载

N_m3u8DL-RE 下载教程:7 个问答带你玩转 MPD/M3U8/ISM 流媒体下载

【免费下载链接】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) 格式视频的"只能在线看、没法保存"问题,同时支持点播下载与直播录制。这篇文章用 7 个新手最关心的问题串起全文,从安装、首条下载命令,一路讲到轨道挑选、直播录制、密钥解密和报错排查,跟着操作就能跑通完整流程。


先讲一个真实的下载场景

上周帮同事录一门付费在线课,网页端只有播放器、没有任何下载按钮,课程又按 6 秒一段切成几百个分片。手动抓包再拼接?想想就头大。最后我只敲了一行命令,半小时后整门课就以一个完整 MP4 躺在硬盘里了——这个"救星"就是 N_m3u8DL-RE。

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

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

下面我们直接进入正题。


问题一:N_m3u8DL-RE 是什么,凭什么能下载"只能在线看"的视频?

一句话认识它

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,另外按需准备 mp4decrypt 或 shaka-packager(后面解密环节会用到)。在终端里先确认一下:

ffmpeg -version

问题二:N_m3u8DL-RE 安装步骤有哪些?

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

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

打开项目的 Release 页面,按自己的系统选择压缩包,例如 Windows 选N_m3u8DL-RE-win-x64.zip,macOS 选 darwin 版本,解压后直接运行可执行文件即可,无需装任何运行时。

方式二:Arch Linux 一行搞定

Arch 系用户用 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

问题三:最简单的 M3U8 / MPD 下载命令怎么写?

一条命令跑通下载

程序用法极其简单:把链接或本地清单文件直接丢给它。

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

这个链接是官方测试流,多音轨多字幕,非常适合第一次练手。输入命令后,程序会解析清单、自动挑选最佳画质、下载并合并,全程进度一目了然。

推荐再加三个参数

实际使用时,我通常会顺手加上输出目录、文件名和线程数:

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一样能跑

问题四:多音轨多字幕的片源,怎么挑出想要的那条轨道?

很多 DASH 清单里塞着三四档清晰度、五六条音轨、好几组字幕。默认只下"最佳"一套,想精细控制就用轨道选择参数。

按分辨率、语言、字幕精挑细选

三个选择参数都支持正则表达式,格式是字段=正则,用冒号拼接,最后用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

想提速的话,加上-mt--concurrent-download)让音视频和字幕并发下载,能明显缩短总耗时。

只想下字幕怎么办

只需要字幕时,用--sub-only跳过音视频,配合--sub-format选择输出格式(默认 SRT,可切 VTT):

N_m3u8DL-RE "清单链接" --sub-only --sub-format VTT

补充技巧

多轨道同时下载时,用--save-pattern让文件名自动带上清晰度和码率,避免重名覆盖:

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

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


问题五:N_m3u8DL-RE 直播录制怎么操作?

录制直播是很多人入坑的原因。直播流的特点是分片无限增长、且边播边删,所以需要专门的参数配合。

边播边录:实时合并

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

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

(上面是官方提供的直播测试流,可用来验证录制流程。)

限制录制时长

不想让它一直录下去,用--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

如果多个分片共用同一个 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 场景如果知道加密方法、密钥和 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 看日志,基本都能定位到原因。

补充提醒

老版本 Windows 自带的终端可能不支持本程序的界面渲染,换用 cmder 之类的终端即可正常显示。


隐藏玩法:几个提升体验的进阶参数

上面 7 个问题覆盖了 90% 的使用场景,下面这几个参数属于"知道的人都说香":

参数作用示例
--custom-range只下载指定分片区间,适合先试看一段--custom-range 05:00-20:00(只下第 5 到 20 分钟)
--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

收尾:一张自查清单与下一步

把这篇教程浓缩成一张清单,跟着走就不会迷路:

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

想继续深入的话,推荐三个方向:一是通读项目内的 README 文档,里面有全部命令行参数的详细说明与--morehelp示例;二是翻一翻TestStreams.md,里面整理了覆盖点播、直播、加密、多字幕等场景的官方测试流,是练手的最佳素材;三是对照源码目录了解解析器(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),仅供参考

← 返回列表