news 2026/9/19 7:15:24

N_m3u8DL-RE 完整上手指南:M3U8/MPD 下载、解密与直播录制实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
N_m3u8DL-RE 完整上手指南:M3U8/MPD 下载、解密与直播录制实战

N_m3u8DL-RE 完整上手指南:M3U8/MPD 下载、解密与直播录制实战

【免费下载链接】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 是一款跨平台的流媒体下载工具,专门解决 M3U8(HLS)、MPD(DASH)、ISM 这类链接"下载下来是一堆散装分片、加密内容打不开、直播录不全"的问题。它把抓取、分片下载、合并、混流、解密整条链路都包办了,你只需要在命令行里给一个链接加几个参数。全文按任务推进:先把工具跑起来,然后拿下第一个视频,再处理带加密的内容,最后完整盯住一场直播。

先想清楚你要干嘛

不同任务读不同的段落,可以先对号入座:

  • 还没装好工具 → 从「把工具跑起来」开始,这一步只需要 5 分钟;
  • 手里有一个普通链接,想把视频弄下来 → 直接读「拿下第一个视频」;
  • 链接下载下来是花的、提示缺密钥、日志里出现 KID/KEY → 读「解密带保护的内容」;
  • 想把一场直播从头录到尾 → 读「完整录下直播」;
  • 下载到一半报错 → 翻到「踩坑速查」对照处理。

把工具跑起来

这步的目标:让N_m3u8DL-RE在终端里能直接敲出来。它没有复杂的配置项,装二进制文件就行。

在 Windows 上安装它

  1. 从项目仓库的 Releases 页面下载 Windows 压缩包,解压到任意目录,比如C:\Tools\N_m3u8DL-RE
  2. 把这个目录加入系统环境变量PATH
  3. 打开新的终端验证:
N_m3u8DL-RE --version

能打印出版本号就算装好了。低版本 Windows 自带的终端可能跑不动,官方建议改用 cmder 运行。

在 Linux / macOS 上安装它

下载对应平台的压缩包,解压后给可执行文件加权限并放到PATH里:

# 解压后给可执行文件加执行权限,并移动到系统路径 unzip N_m3u8DL-RE-linux-x64.zip chmod +x N_m3u8DL-RE sudo mv N_m3u8DL-RE /usr/local/bin/

Arch Linux 用户也可以走 AUR:yay -Syu n-m3u8dl-re-bin

装好依赖工具 ffmpeg

下载本身不依赖任何东西,但合并、混流、部分解密都要调用 ffmpeg,建议先装好:

# Ubuntu/Debian sudo apt install ffmpeg # macOS brew install ffmpeg

其他两个依赖按需装:mp4decrypt(MP4 解密用)、shaka-packager(个别特殊加密场景用)。装完后跑一句ffmpeg -version,能输出版本信息就 OK。

顺手把界面改成中文(如果默认不是你想要的语言):

N_m3u8DL-RE "URL" --ui-language zh-CN

拿下第一个视频

这章的目标:一个链接进去,一个能播放的文件出来。下面用的示例流来自项目自带的 TestStreams.md,列表里还有几十个可随便练手的链接。

用一条命令下载 M3U8

下载一个 HLS 流,指定输出目录和文件名:

N_m3u8DL-RE "https://storage.googleapis.com/shaka-demo-assets/angel-one-hls/hls.m3u8" \ --save-dir ~/Downloads \ --save-name "angel_test"

跑完后看两件事判断成功:日志最后有收尾提示,~/Downloads下出现了angel_test相关文件,拖进播放器能正常播放。

挑对画质和音轨

一个多码率流里可能有好几条视频轨、音频轨,用-sv(视频)、-sa(音频)、-ss(字幕)按正则挑:

# 挑 1080p 最佳视频轨 + 全部音轨 N_m3u8DL-RE "URL" -sv res="1920*":for=best -sa all # 挑最佳中文音轨 N_m3u8DL-RE "URL" -sa lang=zh:for=best # 懒得挑,让程序自动选各类型的最佳轨 N_m3u8DL-RE "URL" --auto-select

注意-ss在这里是"选字幕轨",不是"从某时间点开始下"。想只下载视频的一部分,用的是--custom-range

# 只下载第 5 分钟到第 20 分钟的内容 N_m3u8DL-RE "URL" --custom-range 05:00-20:00

下载完的视频、音频是分开的文件,想要一个能直接播的 MP4,加个混流参数:

# 全部完成后把音视频混流成一个 mp4 N_m3u8DL-RE "URL" -M format=mp4

常用参数速查

后面几章也会反复用到这些,集中放在这里:

参数作用备注
--save-dir/--save-name输出目录 / 文件名最常用
-sv/-sa/-ss正则选择视频 / 音频 / 字幕res="1920*":for=best
--auto-select自动选各类型最佳轨省事首选
--thread-count下载线程数默认 = 本机 CPU 线程数
--download-retry-count分片失败重试次数默认 3,弱网可调大
--http-request-timeout请求超时(秒)默认 100
--tmp-dir临时文件目录磁盘紧张时可指到别的盘
-H加请求头-H "Cookie: xxx"
-mt音视频字幕并发下载大文件更快
-M完成后混流-M format=mp4
--sub-only/--sub-format只下字幕 / 字幕格式格式支持SRTVTT
--custom-range只下部分分片05:00-20:00

哪个参数不确定,敲N_m3u8DL-RE --morehelp 参数名(例如--morehelp select-video)能看详细文档,比翻全量帮助快得多。

解密带保护的内容

这章的目标:把加密流变成能正常播放的明文文件。怎么判断流是加密的?日志里出现EXT-X-KEY、KID 之类的字样,或者下载完播放是雪花屏、音频刺耳,基本就是加密问题。

把密钥喂给程序

密钥有三种给法,看手头材料决定:

# 全流共用一把密钥,直接给 KEY N_m3u8DL-RE "URL" --key "1234567890ABCDEF1234567890ABCDEF" # 不同分片用不同密钥,给 KID:KEY 对(可多次) N_m3u8DL-RE "URL" --key "KID1:KEY1" --key "KID2:KEY2" # 密钥很多时,放一个文本文件,每行一个 KID:KEY N_m3u8DL-RE "URL" --key-text-file keys.txt

拿项目自带的加密测试流练手,这条命令可以直接跑:

# 测试流自带 KID:KEY 对,下载即解密 N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p_ClearKey.mpd" \ --key "9eb4050de44b4802932e27d75083e266:166634c675823c235a4a9446fad52e4d"

选对解密引擎

--decryption-engine决定背后调哪个第三方程序,默认MP4DECRYPT,大多数情况不用动:

引擎背后程序什么时候用
MP4DECRYPT(默认)mp4decryptMP4/CENC 类加密的常规场景
FFMPEGffmpeg个别 HLS AES-128 场景
SHAKA_PACKAGERshaka-packager前面两个都不行时再试

另外两种特殊情况:

  • 直播边下边解,加--mp4-real-time-decryption,MP4 分片下完立刻解密,不用等最后统一处理;
  • 播放列表里根本没写密钥信息时,手动补:--custom-hls-method AES_128 --custom-hls-key <HEX或Base64>,方法还可以是CENCCHACHA20SAMPLE_AES等,具体值看--help里的枚举。

确认解密结果能播

两招:

# 无输出 = 文件结构没问题 ffmpeg -v error -i output.mp4 -f null -

再快进快退把文件头尾各看几眼。如果解密还是失败,九成是密钥本身的问题——KID 和 KEY 没对上,或者 HEX 和 Base64 搞混了,先回头核对密钥格式,再考虑换引擎。

完整录下直播

这章的目标:从开播到收播,得到一个完整可播的直播文件。直播和点播最大的区别是播放列表一直在变,所以要开"直播模式"。

基础直播录制命令

# 开启实时合并:分片边下边拼,Ctrl+C 结束录制并自动完成收尾 N_m3u8DL-RE "LIVE_URL" --live-real-time-merge --save-name "live_recording"

判断成功的标准:录制过程中日志持续有新分片写入,Ctrl+C停止后输出文件能正常播放、时长和你实际录的时间基本一致。

项目测试流里有一条 DASH 直播流可以拿来练手(见 TestStreams.md):

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

限定录制时长

不想盯着终端时,给它一个时长上限,到点自动停:

# 录满 2 小时 30 分钟自动结束(时:分:秒) N_m3u8DL-RE "LIVE_URL" --live-real-time-merge --live-record-limit 2:30:00

弱网环境下再加大重试和列表刷新间隔,减少断流丢片段:

# 断流后多等一会儿、多试几次 N_m3u8DL-RE "LIVE_URL" --live-real-time-merge \ --live-wait-time 30 --download-retry-count 10

用管道实时混流

--live-pipe-mux会把分片通过管道交给 ffmpeg 实时混成 TS 文件,成品更接近"边录边成片"。在 Linux/macOS 上还可以用环境变量微调 ffmpeg 参数:

# 管道混流时让 ffmpeg 用 copy 视频、AAC 编码音频 export RE_LIVE_PIPE_OPTIONS="-c:v copy -c:a aac -b:a 192k" N_m3u8DL-RE "LIVE_URL" --live-real-time-merge --live-pipe-mux

一句提醒:网络不稳定的时候别开管道混流,管道里的数据读取由 ffmpeg 负责,掉流时容易直接丢数据,普通实时合并更稳。另外默认会保留已录分片(--live-keep-segments),方便断了重录,磁盘紧张记得预留空间。

踩坑速查

症状大概率原因怎么解决
分片报 401/403、下载 0 字节站点要求身份校验-H "Cookie: xxx"补请求头,或--custom-proxy走代理
提示找不到密钥 / 解密后是雪花屏KID 与 KEY 不匹配,或 HEX/Base64 格式混淆核对密钥;HLS 可用--custom-hls-key强制指定
合并阶段报找不到 ffmpeg没装 ffmpeg 或不在 PATH装 ffmpeg,或--ffmpeg-binary-path指全路径
直播录制中间缺片段网络抖动、分片拉取失败调大--download-retry-count,调整--live-wait-time
成品没有声音音轨分离但没选-sa all-sa lang=xx把音轨选上
直播字幕时间轴对不上字幕起始时间未修正--live-fix-vtt-by-audio
低版本 Windows 终端报错旧终端不兼容换 cmder 运行
字幕想只要某一种语言默认全下了--sub-only配合-ss name="中文"精挑

接下来还能玩什么

跑通上面四件事之后,可以试试:--mux-import把外部音轨、字幕文件混进成品;--save-pattern "<SaveName>_<Resolution>"让文件名自动带上分辨率;--task-start-at定时让任务在指定时刻开始。任何一个参数拿不准,--morehelp 参数名都是最快的一手文档。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 7:14:38

新国标下移动电源SoC与锂电保护链路设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 7:14:28

Atlas 300V 24G推理卡详解:从环境搭建到YOLO部署全流程实战

上周群里又有人甩过来一张截图&#xff0c;问Atlas 300V 24G是不是运算加速卡&#xff0c;能不能用来部署YOLO。这个问题其实挺典型&#xff0c;卡的名字里带个V&#xff0c;长得很像显卡&#xff0c;但它的定位和游戏显卡、训练卡完全不是一回事。我拿这块卡实跑了一轮YOLOv5和…

作者头像 李华
网站建设 2026/9/19 7:14:11

隧道裂缝检测实战:YOLOv5s结合BiFPN的优化方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 7:13:51

Atlas 300V 24G部署YOLO模型实战:从转换到调优

说到Atlas&#xff0c;很多做AI部署的朋友第一反应是华为昇腾那一整套计算产品线。最近两年我在好几个项目里实际用过Atlas系列加速卡&#xff0c;从边缘侧的Atlas 200 DK到数据中心侧的Atlas 300V、300I系列&#xff0c;核心任务基本都落在目标检测和视频分析上&#xff0c;YO…

作者头像 李华