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 是一款跨平台的开源流媒体下载器,专门用来把 DASH(MPD)、HLS(M3U8)和 MSS(ISM)清单对应的在线视频保存到本地,同时支持点播下载与直播录制。上周有个同事要做一场市场调研,需要把一批课程视频逐段下载下来归档,那些视频在网页里只能在线播放,没有下载按钮,分片还多达几百个。我帮他敲了一行命令,二十分钟后整段课程就以一个完整的 MP4 躺在了指定目录里。如果你也遇到过"只能看、不能存"的尴尬,这篇文章就是为你准备的。
序幕:先认识一下你要用的工具
下载的原理其实不复杂:视频网站不会把整段视频放在一个文件里,而是切成许多小分片,再用一个清单文件描述它们的地址和顺序。N_m3u8DL-RE 做的事情就是读取这份清单、把分片全部拉下来、最后合并成一个完整文件。
- 点播(VOD):把已经上传完的视频下载到本地
- 直播(Live):持续刷新清单,把正在播的内容一段段录下来
- 三种格式:MPD(DASH)、M3U8(HLS)、ISM(Smooth Streaming)
- 三大平台: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第一幕:装好工具,跑通第一行命令
三分钟完成的两种安装方式
方式一:直接下载预编译版本(推荐)
去项目的 Release 页面,按系统选择压缩包即可:Windows 选 win-x64,macOS 选 darwin,Linux 选 linux-x64。解压后直接运行可执行文件,不需要装任何运行时环境。
方式二:从源码构建
想追最新改动,可以克隆仓库后用 .NET 编译:
git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE.git cd N_m3u8DL-RE/src/N_m3u8DL-RE dotnet build -c ReleaseArch Linux 用户也可以用 AUR 源安装,
n-m3u8dl-re-bin是正式发行版,n-m3u8dl-re-git是开发版。
装完之后先验证一下程序能正常启动:
N_m3u8DL-RE --version第一条下载命令,越简单越好
程序的用法极其直接:把链接或本地清单文件直接丢给它。下面用官方测试流练手(多音轨多字幕,非常适合第一次体验完整流程):
N_m3u8DL-RE "https://dash.akamaized.net/dash264/TestCases/2c/qualcomm/1/MultiResMPEG2.mpd"运行后你会看到程序解析清单、自动挑选最佳画质、并发下载分片、合并输出,全程有进度条和速度显示,像在看一段顺畅的流水线作业。
推荐随手加上的三个参数
实际使用时,我会习惯性地带上输出目录、文件名和线程数:
N_m3u8DL-RE "https://dash.akamaized.net/dash264/TestCases/2c/qualcomm/1/MultiResMPEG2.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决定取几条:
# 只选 4K 且 HEVC 编码的最佳视频轨 N_m3u8DL-RE "清单链接" -sv res="3840*":codecs=hvc1:for=best # 选最佳英语音轨 N_m3u8DL-RE "清单链接" -sa lang=en:for=best # 所有名字带"中文"的字幕全要 N_m3u8DL-RE "清单链接" -ss name="中文":for=all对应的还有-dv / -da / -ds,用来反向剔除不需要的轨道。想按播放列表时长过滤,还能用plistDurMin/plistDurMax这样的条件,比如只选时长大于 1 小时 20 分的视频轨:
N_m3u8DL-RE "清单链接" -sv plistDurMin="1h20m30s":for=best一次拿全所有轨道
懒人模式是让程序把全部轨道都下回来:
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>、<Channels>、<VideoRange>等变量,自由组合即可。
第三幕:直播录制,把"正在播"变成"已保存"
直播流的特点是分片无限增长、边播边删,所以需要专门的参数配合。
边播边录:实时合并
直播默认是"先下载完再合并",录几个小时的直播会拖很久。开启实时合并后,录完即得成品:
N_m3u8DL-RE "https://livesim.dashif.org/dash/live/testpic_2s/Manifest.mpd" \ --live-real-time-merge(这是 DASH-IF 官方提供的直播模拟流,适合用来验证录制流程。)
限制录制时长
不想让它一直录下去,用--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-take-count;手动设置清单刷新间隔用--live-wait-time
⚠️ 网络不够稳定时别开
--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。下面用 Smooth Streaming 加密测试流演示(该测试流在项目文档的 TestStreams 中有记录):
N_m3u8DL-RE "https://azclwds01.akamaized.net/4e8f6858-5d05-4e28-83ab-48c7a2b259e1/XVuosg_tab_hd.ism/Manifest" \ --key e5114f87b3e54b9faca331e6e6d646a6:55c5d9f1cedfd018b75623f2565a1d29如果多个分片共用同一个 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 ffmpegWindows 用户从 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;不想用系统代理时用--use-system-proxy控制。
症状四:合并后文件不完整
程序默认会做分片数量校验(--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 之类的终端即可正常显示。
第六幕:几个"知道的人都说香"的进阶参数
| 参数 | 作用 | 示例 |
|---|---|---|
--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 |
--write-meta-json | 把解析出的流信息写成 JSON 文件 | 默认开启,便于查看轨道细节 |
想查看某个复杂参数的具体用法,随时可以问程序本身:
N_m3u8DL-RE --morehelp select-video N_m3u8DL-RE --morehelp custom-range终章:一张自查清单,和三个出发方向
把整篇教程浓缩成一张清单,跟着走就不会迷路:
- ✅ 装好 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,再看日志对症下药
想继续深入的话,推荐三个方向:一是通读项目内的 README,里面有全部命令行参数的详细说明;二是翻一翻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),仅供参考