ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

N_m3u8DL-RE 上手指南:6 步把在线 MPD/M3U8 流媒体存成本地 MP4

N_m3u8DL-RE 上手指南:6 步把在线 MPD/M3U8 流媒体存成本地 MP4

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流 URLurl=.*4k.*
bwMin/bwMax码率上下限,单位 KbpsbwMin=800:bwMax=1000
roleDASH 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 或不在 PATHUbuntu/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),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进