N_m3u8DL-RE 从零上手:4 步把 MPD/M3U8 流媒体视频存到本地硬盘
【免费下载链接】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)三大清单格式,点播、直播都能覆盖,解析清单后多线程抓取分片并自动合并成完整的 MP4。网站上的视频只能在线看、想录一场直播回头再看,这类需求它一条命令就能搞定。这篇指南写给刚接触命令行工具的你,读完能独立跑通完整流程。
动手之前:搞懂"清单"和"分片"两个词
在线视频播放时,浏览器拿到的不是一个完整文件,而是几百段只有两三秒的片段——分片,你可以理解成视频被切成了一段段小 GIF;而清单文件(.mpd、.m3u8、.ism)就是这些分片的"目录",告诉播放器下一段该取哪里。
程序做的事就三步:解析清单知道有哪些轨道、多线程把分片全部抓回来、最后调用 FFmpeg 合并成一个文件。下载阶段零外部依赖,FFmpeg 只在合并和解密阶段需要。先在终端敲ffmpeg -version确认装好了,后面能省很多事。
如果你想读源码,按这个顺序看:src/N_m3u8DL-RE.Parser/ 负责解析清单,src/N_m3u8DL-RE/DownloadManager/ 负责下载调度与直播录制,src/N_m3u8DL-RE/Crypto/ 是加解密实现。
从零到一:装好、验证、跑通第一条下载
挑一种安装方式
最省事的是预编译包:去项目 Release 页面按系统选压缩包(Windows 选 win-x64、macOS 选 darwin、Linux 选 linux-x64),解压直接运行,不用装运行时。
Arch Linux 及衍生版走 AUR 最方便,社区包一条命令装好发行版:
yay -Syu n-m3u8dl-re-bin想追最新改动就从源码构建,需要本机有 .NET SDK:
git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE.git cd N_m3u8DL-RE/src/N_m3u8DL-RE dotnet build -c Release用 --version 和 doctor 验证环境
这条命令用来确认程序能正常执行,你预期看到版本号输出:
N_m3u8DL-RE --version内置的doctor子命令会一次性探测 ffmpeg、mkvmerge、mp4decrypt 等工具是否找到、版本是多少,等于给环境做体检:
N_m3u8DL-RE doctor如果这里报错了:doctor 提示找不到 ffmpeg,Ubuntu/Debian 执行sudo apt install ffmpeg;Windows 上把 ffmpeg 的bin目录加进 PATH,或运行时用--ffmpeg-binary-path指定全路径。另外低版本 Windows 自带终端可能渲染不出程序界面,那不是程序崩了,换个 cmder 之类的终端即可。
用官方测试流完成首次下载
项目准备了一条多音轨多字幕的 DASH 测试流,专门用来体验完整流程(更多点播、直播、加密测试流整理在 TestStreams.md)。这条命令会解析清单、自动挑一套最佳轨道、下完全部分片并合并,进度条跑完,当前目录就多出一个 MP4:
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd"日常使用我会再带三个参数:
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd" \ --save-dir ./videos --save-name "我的收藏" --thread-count 8--save-dir:输出目录,不存在会自动创建;--save-name:自定义文件名,比默认任务 ID 好认;--thread-count:并发线程数,宽带够就拉到 CPU 核心数的两倍左右。这一步卡住的人最多,别急着往下走,先确认./videos里真的出现了带"我的收藏"名字的文件。
选流:用正则从多条轨道里挑出想要的
不少 DASH 清单里塞着三四档清晰度、好几条音轨,默认只会下"最佳"一套。选择参数都长字段=正则的样子,用冒号拼接,结尾的for决定取几条:
# 只要 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=allfor支持best、worst、all,写best2就是取最好的两条;-dv / -da / -ds则是反向剔除。原理一句话:程序先把清单里所有轨道列出来,用你的正则逐条过滤,再按for的规则挑结果。
下载多条轨道时,给--save-pattern让文件名自动带上分辨率和码率,避免互相覆盖:
N_m3u8DL-RE "清单链接" --save-name video \ --save-pattern "<SaveName>_<Resolution>_<Bandwidth>"输出类似video_1920x1080_5000000.mp4,模板还支持<Language>、<FrameRate>等变量自由组合。
直播录制:实时合并与时长上限
直播流的分片无限增长且边播边删,默认的"先全部下完再合并"策略录几个小时会很拖。--live-real-time-merge改成边录边合并,录完即得成品,这条是官方提供的直播测试流:
N_m3u8DL-RE "https://cmafref.akamaized.net/cmaf/live-ull/2006350/akambr/out.mpd" --live-real-time-merge不想让它一直录,用--live-record-limit设上限,格式是时:分:秒:
N_m3u8DL-RE "直播链接" --live-real-time-merge --live-record-limit 02:00:00⚠️ 网络不稳时别开
--live-pipe-mux:管道数据由 FFmpeg 读取,弱网环境下容易丢直播数据。
其余参数按需取用:--live-perform-as-vod把直播当点播一次性拉完;录制默认保留分片(--live-keep-segments),想省磁盘可以关掉;画面和字幕对不齐时试--live-fix-vtt-by-audio,程序会读音频起始时间来修正字幕。
组合技:三套常用参数搭配
组合一:高画质点播 + 指定语言 + 自动命名。选最佳视频、英语音轨、全部中文字幕,文件名自动带分辨率和语言,-mt让各轨道并发下载提速:
N_m3u8DL-RE "清单链接" -sv for=best -sa lang=en:for=best -ss name="中文":for=all \ --save-name "我的收藏" --save-pattern "<SaveName>_<Resolution>_<Language>" -mt组合二:直播回看。错过了节目?清单提供可靠时间信息时,可以从一小时前开始下载、只录 30 分钟、实时合并并混流成 MKV:
N_m3u8DL-RE "直播链接" --live-catchup "01:00:00" --live-record-limit "00:30:00" --live-real-time-merge -M mkv组合三:加密流解密。DASH 的 CENC(ClearKey)和 HLS 的 AES-128 一般需要KID:KEY形式的密钥,下面这条官方加密测试流自带公开密钥,适合练手:
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p_ClearKey.mpd" \ --key 9eb4050de44b4802932e27d75083e266:166634c675823c235a4a9446fad52e4d解密依赖第三方工具,默认 MP4DECRYPT,可用--decryption-engine FFMPEG|SHAKA_PACKAGER切换;工具不在 PATH 里就加--decryption-binary-path指定全路径。
⚠️ 解密功能请只用于你有合法权限的内容,工具本身仅供学习与技术研究。
排障速查:症状 → 原因 → 解法
| 症状 | 原因 | 解法 |
|---|---|---|
| 合并或解密阶段报 FFmpeg 错误 | 未安装或不在 PATH | sudo apt install ffmpeg;Windows 把bin加入 PATH 或用--ffmpeg-binary-path指定 |
| 下载速度上不去 | 线程数低,或想给带宽让路 | 调大--thread-count;限速用-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保留分片便于二次排查 |
以上都对不上,就把日志级别调到 DEBUG,跟着日志一步步定位,这条命令会把完整日志写进文件:
N_m3u8DL-RE "链接" --log-level DEBUG --log-file-path ./download.log--log-level支持DEBUG / INFO / WARN / ERROR / OFF五档。现在就去敲N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd" --save-name "第一次下载",进度条走完的那一刻,硬盘里就多了一个没网也能放的文件。🎬
【免费下载链接】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),仅供参考