N_m3u8DL-RE 从 0 到 1:DASH/HLS 流媒体下载的完整配方、参数清单与故障排查
2026/9/21 22:16:58 网站建设 项目流程

N_m3u8DL-RE 从 0 到 1:DASH/HLS 流媒体下载的完整配方、参数清单与故障排查

【免费下载链接】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 是一款跨平台的 DASH/HLS/MSS 流媒体下载工具,面向想把在线课程存档、想录直播、想管理多音轨字幕的你。DASH(清单文件是 mpd)和 HLS(清单文件是 m3u8)是两种最常见的流媒体协议,你把链接丢给它,它负责解析出视频、音频、字幕轨道,拉完分片,再合并成成品文件。本文按四步讲:五分钟跑通、三个需求的参数配方、参数速查表、出问题怎么查。

五分钟跑通:拿到工具,跑通第一单

工具从官方发布渠道下载对应平台的发行版,或者克隆源码自己构建:

git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE

代码基于 .NET,系统里要有对应平台的 .NET 运行时。拿到可执行文件后,最小化命令就是"链接 + 输出名",下面这条同时拿项目 TestStreams.md 里的公开测试流验证安装:

N_m3u8DL-RE "http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes.m3u8" --save-name demo

跑完输出目录里出现合并好的成品,说明解析、下载、合并三环节都正常。--save-name决定输出文件的基础名,不改的话程序会按自己的规则起名。还有个省事技巧:只想看解析出哪些轨道、不实际下载,就在同一条命令上加--skip-download,程序解析完清单就停,适合先摸清一个陌生链接里有什么再决定怎么下。

命令跑通只是第一步,接下来下载什么、下载成什么样,全由参数决定。按三个真实需求来配:点播挑画质、直播定时录、加密流喂密钥。

三个真实需求的参数配方:点播挑轨、直播定时、加密解密

点播保存:一次挑两档画质,文件不打架

你想达到的效果:一个课程 m3u8 里同时挂着 1080p 和 720p,两档都要,且文件名能区分。

N_m3u8DL-RE "课程m3u8链接" -sv res="1920*|1280*":for=all -sa best --save-name 实战课 --save-pattern "<SaveName>_<Resolution>" -M format=mp4
  • -sv res="1920*|1280*":for=all:按分辨率正则把两档画质都选中;for=all表示匹配的全部要,不带它时默认 best 只挑一条最好的。
  • -sa best:音频轨自动挑最佳,不用你判断哪条码率高。
  • --save-name 实战课:输出基础名。
  • --save-pattern "<SaveName>_<Resolution>":文件名追加分辨率变量,两档文件各叫各的;不写它,同类型多轨道容易撞名。
  • -M format=mp4:所有工作完成时把分离的音视频混流进 mp4 容器,拿到手就是能直接播放的成品。

挑完轨,下一个需求是时间:直播往往不在你现在这个点,想按表开播再录,怎么配?

直播定时录制:到点开播,录够就收

你想达到的效果:晚八点的大会,九点准时开始录,录满两小时自动结束,不用人盯着。

N_m3u8DL-RE "直播链接" --save-name 技术大会 --live-real-time-merge --task-start-at 20260921090000 --live-record-limit 02:00:00 --thread-count 8
  • --task-start-at 20260921090000:到这个时间(yyyyMMddHHmmss 十六位)之前不开始执行任务,是定时录制的开关;马上录就不用它。
  • --live-record-limit 02:00:00:录满两小时自动收尾,格式 HH:mm:ss。
  • --live-real-time-merge:分片下载时实时合并进成品文件;默认是关的,不加则等录完再统一合并。
  • --thread-count 8:显式指定 8 个拉分片线程;不调则按本机 CPU 线程数走。

这里有个风险点要提醒:想进一步省盘可以换--live-pipe-mux,通过管道加 ffmpeg 实时混流进 TS 文件,但项目 README 明确说网络不稳时别开它,管道数据由 ffmpeg 读,容易丢直播数据。默认情况下--live-keep-segments会保留分片,等于留了份备份,丢数据还能重拼,建议别动它。

定时和画质都解决了,最后一种麻烦是:链接本身是加密的,怎么把密钥递进去?

加密流解密:喂对密钥,边下边解

你想达到的效果:清单里标着需要密钥的加密流,下载的同时就解密,不二次返工。

N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p_ClearKey.mpd" --key "9eb4050de44b4802932e27d75083e266:166634c675823c235a4a9446fad52e4d" -sv best --mp4-real-time-decryption
  • --key "KID:KEY":KID 是密钥标识,KEY 是密钥本体,都是十六进制串;上面这条是项目 TestStreams.md 里自带密钥的测试流,密钥就在文档同一行,抄下来就能跑通解密全流程。多个 KID 对应不同密钥时重复传--key;若所有 KID 共用一把密钥,只写 KEY 也行。
  • -sv best:只取最佳视频轨,音频轨用-sa同理追加。
  • --mp4-real-time-decryption:MP4 分片边下边解,默认关着;不加它,解密就落在下载完成后由 mp4decrypt 等第三方工具统一批处理。

三条配方下来,用上的参数不到十个,剩下的按"动手频率"分三档,用哪档查哪档。

参数速查:每次必写、看情况调、知道有就行

必备档:每次都要写

参数作用什么时候需要动它
--save-name输出文件基础名每次都要,不改则由程序自动命名
--save-dir输出目录不想落在当前目录时
-sv/-sa/-ss正则挑视频、音频、字幕轨,或写 best/all多轨道流必须收一收,否则全下
--key解密密钥,KID:KEY 或纯 KEY流是加密的才用

常调档:看环境定

参数作用什么时候需要动它
--thread-count下载线程数默认 CPU 线程数,嫌慢就调大
--http-request-timeout单次 HTTP 超时秒数弱网频繁超时;默认 100 秒
--download-retry-count单分片异常重试次数网络抖动多时加预算;默认 3 次
--custom-proxy指定请求代理目标站必须走代理;默认用系统代理
-R限速,单位 Mbps 或 Kbps(如 15M、100K)不想占满带宽时
--sub-format字幕输出为 SRT(通用字幕格式)或 VTT(Web 字幕格式)想换字幕类型;默认 SRT
-M完成时混流分离的音视频要 mp4/mkv 成品而非散文件

少碰档:不报错就别动

参数作用什么时候需要动它
--decryption-engine选解密用的第三方程序默认 MP4DECRYPT 不够时换 FFMPEG 或 SHAKA_PACKAGER
--mp4-real-time-decryptionMP4 分片实时解密想免掉下载后的二次解密
--live-pipe-mux管道加 ffmpeg 实时混流进 TS想省盘,但弱网下有丢数据风险
--log-level日志级别排查时开 DEBUG 看细节;默认 INFO
--no-ansi-color关闭终端彩色输出颜色显示乱码时
--append-url-params把输入链接的参数带到分片上个别站点(如 kakao.com)不带上就 403

参数都对了,真跑起来也可能翻车。别翻长文档,对着症状找行就行。

出问题了怎么办:下载慢、解密失败、音画分离先查什么

症状先查什么对应参数动作
下载慢是不是线程太少,或请求一直在超时长调大--thread-count;日志里超时重试多就把--http-request-timeout调大,并给--download-retry-count加预算
解密失败密钥格式对不对,解密程序在不在 PATH核对--key是否 KID:KEY 格式;程序找不到就用--decryption-binary-path指全路径,或--decryption-engine FFMPEG换引擎;HLS 加密方式判错时加--custom-hls-method(如 AES_128、CHACHA20、SAMPLE_AES)手动指定
老 Windows 终端报错或颜色乱码系统终端不支持本程序换 cmder 跑;乱码就加--no-ansi-color;Arch 系发行版可走 AUR 的 n-m3u8dl-re-bin
音画分成两个文件完成时没指定混流-M format=mp4,或-M format=mkv:muxer=mkvmerge;想引入外部字幕或音轨用--mux-import path=xx.srt:lang=chi:name="中文字幕"

每个参数想深入了解语法,运行--morehelp 参数名在程序内直接看,比如--morehelp select-video会把正则挑选的完整写法列给你。

读源码比读博客更靠谱,按数据流走三处就够。解析入口是src/N_m3u8DL-RE.Parser/StreamExtractor.cs,同目录Extractor/放着 DASH、HLS、MSS 各自解析器,Processor/管内容地址和密钥处理。任务调度在src/N_m3u8DL-RE/DownloadManager/,点播走 SimpleDownloadManager,直播录制走 SimpleLiveRecordManager2,真正的多线程拉分片在Downloader/SimpleDownloader.cs。命令行参数如何变成运行配置,看CommandLine/Config/里的 DownloaderConfig。

边界问题必须说清:本工具基于MIT 协议开源,仅限学习与技术研究;只下载你拥有合法权限的流媒体内容,遵守所在地区法律法规与平台服务条款,侵权后果与工具无关。

三步自检清单

  1. 用 TestStreams.md 里的测试流加--skip-download跑一遍,轨道列表正常打出,安装就没问题。
  2. 拿真实链接只带--save-name做最小化下载,成品落在输出目录才算跑通。
  3. 卡住时按"速查表 → 排查表"的顺序加参数:慢查线程和超时,解密失败查密钥格式和引擎。

三步走完,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

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

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

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

立即咨询