M3U8 与 DASH 流媒体下载录制:安装、选流到加密流操作
【免费下载链接】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 是一款跨平台的流媒体下载工具,输入 M3U8 或 MPD 地址后,它会完成选流、下载、解密、合并,最后交给你能直接播放的完整文件。
能力全景
N_m3u8DL-RE 解决的核心问题是"从拿到清单到拿到成片"这条链路上的所有环节:解析 HLS、DASH、ISM 三类清单,按条件挑选视频、音频、字幕轨道,多线程拉取分片,处理 AES-128、CHACHA20 等加密,再合并混流出可播放文件。相比自己拼接下载器和 FFmpeg,它把密钥管理、直播录制和轨道筛选都收进了同一套命令行。
| 维度 | N_m3u8DL-RE | 通用下载器 |
|---|---|---|
| 协议覆盖 | HLS / DASH / ISM | 多为单一协议 |
| 加密分片 | 内置解密引擎,密钥可命令行或文件传入 | 依赖外部工具 |
| 直播 | 实时合并、限时录制、回看补录 | 通常只存分片 |
| 轨道选择 | 按分辨率、编码、语言、码率筛选 | 手动挑流 |
| 平台 | Windows / Linux / macOS | 视工具而定 |
运行环境与获取方式
- 源码方式需要 .NET 10 运行时,可从微软官网安装;合并和混流还需要系统里有一份可用的 FFmpeg。
- 源码编译:
git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE cd N_m3u8DL-RE dotnet build src/N_m3u8DL-RE.sln -c Release- 预编译方式:从项目发布页下载对应平台的包,解压后将可执行文件加入
PATH即可。 - Arch 及衍生发行版可用 AUR 包
n-m3u8dl-re-bin,一条命令装好依赖。
装好后先跑一次N_m3u8DL-RE doctor,它会检查本机 FFmpeg、mp4decrypt 等工具是否就位,后续排障会反复用到。
一条命令拿到可播放的点播文件
目标:输入 m3u8 地址,得到一个完整媒体文件。
N_m3u8DL-RE "https://example.com/video.m3u8"预期结果:默认自动选择每类轨道的最佳版本,多线程拉完分片后自动合并;--del-after-done默认开启,临时分片用完即删,--write-meta-json默认输出解析出的媒体信息 JSON,方便你核对实际选中的轨道。
给输出文件、画质和编码加约束
目标:指定保存名、目录,把视频锁定在 1080p 且编码为 avc1。
N_m3u8DL-RE "https://example.com/video.m3u8" \ --save-name "Python数据分析入门" \ --save-dir "D:/media/courses" \ -sv "res=1920x1080:codecs=avc1:for=best"# 只挑字幕,输出 VTT 格式 N_m3u8DL-RE "https://example.com/movie.m3u8" --sub-only --sub-format VTT预期结果:视频与选中的音频、字幕分别落盘,音视频随后按默认流程混流。多轨道命名混乱时,用--save-pattern "<SaveName>_<Resolution>_<Language>"按变量生成文件名,变量列表见 README。
直播持续录制与回看补录
目标:完整保存一场直播,边录边合并,并限制总时长。
N_m3u8DL-RE "https://example.com/live.m3u8" \ --live-real-time-merge \ --live-record-limit "02:00:00" \ --save-name "产品发布会"预期结果:--live-real-time-merge让分片在录制过程中实时合并进最终文件,--live-record-limit到点自动停止。错过开头时改用回看:
N_m3u8DL-RE "https://example.com/live.mpd" \ --live-catchup "01:00:00" \ --live-record-limit "00:30:00" \ --live-real-time-merge \ -M format=mkv从一小时前开始补录 30 分钟,最后混流为 MKV。注意回看依赖清单中的时间信息,起点必须仍在服务端保留窗口内,否则回看会失败。
处理加密分片的三种传入方式
目标:清单里的媒体分片是密文,本地解密后得到可播放文件。
# 密钥明确时直接传入,KEY 相同时可省略 KID N_m3u8DL-RE "https://example.com/encrypted.m3u8" --key "1234567890ABCDEF1234567890ABCDEF" # 多 KID 场景从文件按 KID 检索 N_m3u8DL-RE "https://example.com/protected.mpd" --key-text-file keys.txt # 指定解密引擎(默认 MP4DECRYPT,可选 FFMPEG、SHAKA_PACKAGER) N_m3u8DL-RE "https://example.com/stream.m3u8" --decryption-engine FFMPEG解密调用 mp4decrypt、shaka-packager 或 ffmpeg 完成,先确认它们已安装;结果异常时用--custom-hls-method AES_128显式声明加密方式,并配--custom-hls-key手工提供密钥。
高频参数速查与调优思路
| 参数 | 作用 | 示例值 |
|---|---|---|
--thread-count | 下载线程数 | 16 |
--save-dir | 输出目录 | D:/media |
--save-name | 输出文件名 | my-video |
--auto-select | 各类轨道自动选最佳 | (开关) |
-sv/-sa/-ss | 按正则筛选视频/音频/字幕流 | res=3840*:for=best |
-M | 完成后混流参数 | format=mp4 |
--key | 解密密钥,可重复 | KID:KEY |
--decryption-engine | 解密引擎 | FFMPEG |
--live-real-time-merge | 直播实时合并 | (开关) |
--live-record-limit | 录制时长上限 | 02:00:00 |
--live-catchup | 回看起点 | 01:00:00 |
-H/--cookies | 自定义请求头 / Cookie 文件 | User-Agent: ... |
--custom-proxy/--interface | 代理 / 指定出口网卡 | http://127.0.0.1:8888 |
调优思路:--thread-count默认 10,先按带宽和磁盘余量往上加,线程并非越多越好,弱网环境反而建议配合--download-retry-count提高单分片重试容忍度。超时方面,--http-request-timeout只约束单次请求和分片连续无数据的时间,不限制总下载时长,直播场景未手动指定时会自动调整。
下载异常时的排查路径
下载直接返回 403 或 404。多数是服务器要求完整请求头。用-H "User-Agent: Mozilla/5.0 ..."补上浏览器标识;需要登录态时,从浏览器导出 Netscape 格式文件再传--cookies cookies.txt,手动 Cookie 头优先于文件。
直播录制卡住、长时间不增长。流可能已经停更,用--live-idle-timeout 120在无新分片超过 120 秒时自动结束;刷新太慢则把--live-wait-time调小。
加密分片下载完却放不了。说明没传密钥或 KID 对不上,回到--key或--key-text-file核对;解密失败也先运行N_m3u8DL-RE doctor确认解密工具本身可用。
合并阶段报 FFmpeg 相关错误。先doctor看 FFmpeg 是否被找到,找不到就装一份,或--ffmpeg-binary-path "C:/Tools/ffmpeg.exe"显式指路。
多轨道视频选错或音频缺失。加--auto-select让程序自动挑每类最佳轨道;想精确控制就用-sv res=3840*:codecs=hvc1:for=best这类条件显式锁定。
项目会随新平台和加密方式持续更新,常用参数可以存进本地配置文件,下次直接生效。遇到问题先运行N_m3u8DL-RE doctor --json导出环境信息,反馈给维护者时定位会快很多。最后提醒:只下载你拥有合法权限的内容,并遵守所在平台的使用条款。
【免费下载链接】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),仅供参考