N_m3u8DL-RE 上手指南:6 步把在线 MPD/M3U8 流媒体存成本地 MP4
【免费下载链接】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)三类清单,负责把分片抓回来并调用 FFmpeg 合并,支持点播下载与直播录制。"网站能播不能存"的场景,就是它的主场。
🎬 两分钟出片:一条命令下出第一个视频
先确认环境里有两个东西,分别在终端敲:
N_m3u8DL-RE --version ffmpeg -version前者确认下载器本身可用;后者确认 FFmpeg 已安装。N_m3u8DL-RE 的下载环节零依赖,但合并与解密阶段要 FFmpeg 出力,缺了就先装。
确认无误后,直接用项目官方测试流(多音轨、多字幕的 MPD 清单)跑第一单:
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd"程序会自动解析清单、挑选轨道组合、并发拉取全部分片并完成合并,跑完后当前目录里就是一个可播放的 MP4。第一次运行建议带上几个常用参数,把输出管起来:
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd" \ --save-dir ./videos \ --save-name "my_collection" \ --thread-count 8 \ --ui-language zh-CN \ --no-log--save-dir:输出目录,不存在会自动创建;--save-name:自定义文件名,比默认任务 ID 好认;--thread-count:分片并发下载线程数,默认 10,带宽富余时可提到 CPU 核心数两倍左右;--ui-language zh-CN:界面切为中文(也支持 en-US / zh-TW);--no-log:关闭日志文件输出,避免目录里越堆越多。
💡 小贴士:
--version同时是排查问题的第一步——很多"参数不生效"其实是版本太旧,先升级再看行为。
📦 完整安装方式对比:预编译、AUR 与源码构建
三条路线按省事程度排列:
| 方式 | 适合人群 | 操作 |
|---|---|---|
| Release 预编译包 | 大多数 Windows / macOS / Linux 用户 | 到 Release 页按系统选压缩包(win-x64 / darwin / linux-x64),解压即用,无需运行时 |
| AUR 包管理器 | Arch 及衍生版用户 | 一条命令装社区维护的包 |
| 源码构建 | 想跟进最新代码 | 自备 .NET SDK 自行编译 |
Arch 系用户最省事,社区维护两个源,正式版与开发版任选:
# 正式发行版 yay -Syu n-m3u8dl-re-bin # 开发版,抢先体验新功能 yay -Syu n-m3u8dl-re-git追最新改动就源码构建:
git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE cd N_m3u8DL-RE/src/N_m3u8DL-RE dotnet build -c Release任何方式装完,都回N_m3u8DL-RE --version验证一遍。另外,低版本 Windows 自带终端可能渲染不出程序界面,换用 cmder 这类现代终端即可正常显示。
🎚️ 多轨精挑:怎么下才只下想要的
一份清单里常塞着三四档清晰度、好几条音轨,默认只会挑"最佳"一套。想精细控制,用轨道选择参数。一句话原理:程序先列出清单里全部轨道,再用你的正则逐条过滤,最后按for规则挑出结果。参数格式统一为字段=正则,用冒号拼接,末尾跟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常用字段速查:
| 字段 | 含义 | 示例 |
|---|---|---|
res | 分辨率 | res="1920*" |
codecs | 编码 | codecs=hvc1(HEVC)、avc1(H.264)、mp4a(AAC) |
lang | 语言代码 | lang=en |
name | 轨道名称 | name="中文" |
frame/channel/range | 帧率 / 声道数 / 动态范围(SDR、HDR、PQ) | range=HDR |
url | 流 URL | url=.*4k.* |
bwMin/bwMax | 码率上下限,单位 Kbps | bwMin=800:bwMax=1000 |
role | DASH role(main、dub、description 等) | role=main:for=best |
反向剔除用-dv / -da / -ds,参数写法与-sv / -sa / -ss完全一致,例如-dv period="ad":for=all可剔除广告 Period 的视频。
💡 小贴士:多条轨道一起下时,用
--save-pattern让文件名自动带上分辨率与码率,避免互相覆盖。模板变量有<SaveName>、<Resolution>、<Bandwidth>、<Language>、<Codecs>、<FrameRate>、<Name>等,缺失的信息替换为空串,扩展名由程序自动追加:
N_m3u8DL-RE "链接" --save-name video \ --save-pattern "<SaveName>_<Resolution>_<Bandwidth>"输出形如video_1920x1080_5000000.mp4。
📡 直播录制:实时合并与录制时长配置
直播分片无限增长、边播边删,默认策略"全部下载完再合并"在录几个小时时会非常拖沓。开启实时合并后,录完即得成品:
N_m3u8DL-RE "https://cmafref.akamaized.net/cmaf/live-ull/2006350/akambr/out.mpd" \ --live-real-time-merge不想录到天荒地老,给时长上个限,--live-record-limit按HH:mm:ss写:
N_m3u8DL-RE "直播链接" \ --live-real-time-merge \ --live-record-limit 02:00:00其余四个直播开关按需取用:
--live-perform-as-vod:把直播当点播一次性拉取,适合能在短时间内播完的流;--live-pipe-mux:通过管道实时喂给 FFmpeg 混流出 TS 文件,延迟更低;--live-fix-vtt-by-audio:画面与字幕对不齐时,程序读取音频文件起始时间来修正 VTT 字幕;--live-keep-segments:实时合并时依然保留分片,默认开启,想省磁盘就关掉。
⚠️ 网络不稳时别开
--live-pipe-mux:管道数据由 FFmpeg 负责读取,弱网环境下丢掉的直播片段无法回补,容易直接丢段。
🔑 解密加密流:把密钥递进去
HLS / DASH 常见加密有 AES-128、CENC(ClearKey)等,多数加密流需要KID:KEY形式的密钥。用--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在FFMPEG | MP4DECRYPT | SHAKA_PACKAGER间切换,默认 MP4DECRYPT;工具不在 PATH 里时,用--decryption-binary-path指定可执行文件全路径。
HLS 场景下如果加密方法、密钥、IV 都已知,可硬指定,省掉程序猜测流程:
N_m3u8DL-RE "链接" \ --custom-hls-method AES_128 \ --custom-hls-key 000102030405060708090a0b0c0d0e0f \ --custom-hls-iv 000102030405060708090a0b0c0d0e0f--custom-hls-method还支持 AES_128_ECB、CENC、CHACHA20、SAMPLE_AES 等取值,密钥/IV 可以是 HEX、Base64 或文件。
⚠️ 解密功能请只用于你有合法权限的内容,工具本身仅供学习与技术研究。加解密相关实现可以看 src/N_m3u8DL-RE/Crypto/ 目录。
进阶:部分下载、定时启动与容器混流
这一组参数把"下载"这件事切成更细的粒度:控范围、控时机、控产物。
只下一段:--custom-range同时支持时间与分片序号两种写法。时间格式为MM:SS或HH:MM:SS,按分片起始时间筛选(含边界、保留完整分片,不做精确裁切);序号写法适合快速定位:
# 只下载第 5 分钟到第 20 分钟 N_m3u8DL-RE "链接" --custom-range 05:00-20:00 # 下载序号 0 到 10 的分片(共 11 个) N_m3u8DL-RE "链接" --custom-range 0-10 # 从序号 10 往后 N_m3u8DL-RE "链接" --custom-range 10- # 只下载前 100 个分片 N_m3u8DL-RE "链接" --custom-range -99定时开始:--task-start-at在指定时刻之前不动手,格式yyyyMMddHHmmss,适合半夜排任务:
N_m3u8DL-RE "链接" --task-start-at 20260815230000指定容器与外部轨道:-M在所有工作完成后混流分离的音视频,format取 mp4 / mkv / ts,muxer可在 ffmpeg 与 mkvmerge 间切换;--mux-import把外部音轨或字幕一起混进去:
N_m3u8DL-RE "链接" -M format=mp4 \ --mux-import path=zh-Hans.srt:lang=chi:name="中文 (简体)" N_m3u8DL-RE "链接" -M format=mkv:muxer=mkvmerge排障:常见现象对应的参数调整
| 现象 | 常见原因 | 应对参数 |
|---|---|---|
| 合并或解密阶段报 FFmpeg 错误 | 未安装 FFmpeg 或不在 PATH | Ubuntu/Debian 执行sudo apt install ffmpeg;Windows 把bin目录加入 PATH,或用--ffmpeg-binary-path直接指定 exe 全路径 |
| 速度上不去 | 并发线程偏少,或需给带宽让路 | 调大--thread-count;需要限速时用-R,如-R 15M(单位 Mbps / Kbps) |
| 分片反复失败、中途断流 | 网络不稳定 | 调高--download-retry-count(默认 7 次)与--http-request-timeout(默认 100 秒);走代理加--custom-proxy http://127.0.0.1:8888 |
| 合并后文件不完整 | 分片数量对不上,且临时文件已清理 | 程序默认开启--check-segments-count数量校验;把--del-after-done设为 false 保留临时分片,便于二次排查 |
定位问题时先把日志级别拉满,跟着输出一步步看:
N_m3u8DL-RE "链接" \ --log-level DEBUG \ --log-file-path ./download.log--log-level支持DEBUG / INFO / WARN / ERROR / OFF,默认 INFO。
走到这里,从装好到解密、直播、排障的主线就完整了。想核对全部参数与默认值,以 README.md 为准(配合--morehelp查看单项详解);想做更多实操练习,TestStreams.md 里按点播、直播、加密、多字幕场景整理了官方测试流,可以直接复制练手。把想看的视频真正存进硬盘,下次断网也照样播。
【免费下载链接】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),仅供参考