ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

N_m3u8DL-RE:M3U8 下载与直播录制一次跑通

N_m3u8DL-RE:M3U8 下载与直播录制一次跑通

N_m3u8DL-RE: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 是跨平台流媒体下载工具,支持 DASH、HLS、Smooth Streaming 三种协议,点播和直播一条命令搞定:解析清单、并发拉取分片、合并回完整视频。

快速上手:一条命令跑通 M3U8 下载

先拿二进制:从项目 Releases 页下载对应平台版本放入 PATH;Arch 用户可从 AUR 安装 n-m3u8dl-re-bin;也可以 clone 仓库(https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE)后dotnet build。下面这条命令下载仓库测试清单里的公开 HLS 流,输出到./out,文件名 oceans:

N_m3u8DL-RE "http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes.m3u8" --save-dir "./out" --save-name "oceans"

跑完,out/里出现oceans.mp4,临时分片自动删除(--del-after-done默认 true),就算通了。

从 DASH 清单挑 1080p 视频和英语音轨

多清晰度多音轨,全下浪费空间。这条命令用正则选一条 1080p 视频、一条英语音轨,并带下全部字幕:

N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd" -sv "res=1920*:for=best" -sa "lang=en:for=best" -ss all --sub-format SRT

成功标志:输出目录里只有 1080p 视频、英语音轨和 SRT 字幕文件,没有其它分辨率。

  • -sv→ 正则选视频流,res=1920*匹配 1080p,for=best在匹配项里取带宽最高的一条
  • -sa→ 正则选音轨,lang=en匹配英语,for=best同理
  • -ss all→ 选取全部字幕轨道
  • --sub-format→ 字幕输出格式 SRT 或 VTT

容易踩的坑:不想写正则就直接加--auto-select,自动选各类型最佳轨道;要 4K 把res换成"3840*"。

录满两小时直播并实时合流

直播不能手动喊停,要定时收尾又不丢分片。这条命令录两小时直播流,分片边下边合,完成后混流成 mp4:

N_m3u8DL-RE "https://masterpl.hls.nhkworld.jp/hls/w/live/smarttv.m3u8" --live-record-limit "02:00:00" --live-real-time-merge -M "format=mp4" --save-dir "./live"

直播 URL 取自仓库测试清单,实际使用替换为你自己的地址。成功标志:./live里的文件持续增大,两小时后程序自动收尾并混流完成。

  • --live-record-limit→ 录制时长限制,HH:mm:ss格式,到点自动停止
  • --live-real-time-merge→ 分片实时合并,中途中断时文件仍可播放
  • -M "format=mp4"→ 所有工作完成后把分离的音视频混流成 mp4
  • --live-wait-time→ 手动设置直播列表刷新间隔(秒),流更新快就调小

容易踩的坑:--live-pipe-mux可再进一步走管道实时混流成 TS,但官方提示网络不稳时别开。

给加密流挂密钥解密

播放器能解、下载器报"无法解析",通常是缺密钥。这条命令给仓库测试清单里的一条 ClearKey 加密流挂上密钥:

N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p_ClearKey.mpd" --key "9eb4050de44b4802932e27d75083e266:166634c675823c235a4a9446fad52e4d"

成功标志:输出文件正常播放、画面声音无异常;仍报解密错误就是密钥不对。

  • --key→ 密钥格式KID:KEY,均为十六进制;多条密钥就写多个--key
  • --key-text-file→ 密钥文件,一行一条KID:KEY,程序按 KID 自动匹配
  • --decryption-engine→ 选择解密程序:FFMPEG、MP4DECRYPT(默认)或 SHAKA_PACKAGER

容易踩的坑:HLS 加密可用--custom-hls-method(如 AES_128_ECB)加--custom-hls-key(HEX、Base64 或文件路径)直接指定,--custom-hls-iv同理。

从长点播里只截取一段下载

两小时的课程只要其中一段。这条命令只下载某集第 5 到 20 分钟的内容:

N_m3u8DL-RE "https://masterpl.hls.nhkworld.jp/hls/w/202922320260226001/master.m3u8" --custom-range "05:00-20:00" --auto-select

成功标志:下载出的文件约 15 分钟长(边界按整段保留),而不是整集。

  • --custom-range→ 只下载时间范围内的分片,格式MM:SS或HH:MM:SS;-00:26表示只取前 26 秒,00:26-表示从 26 秒取到结尾
  • --auto-select→ 自动选各类型最佳轨道,免挑清晰度

容易踩的坑:按分片起始时间筛选、不精确裁切,实际文件会比时间范围略长。

下载失败如何排查

别急着怀疑流本身,先按表格动请求头和重试:

现象先查什么再试什么
403 或内容无法访问请求头是否带浏览器 UA、Referer、Cookie-H "User-Agent: Mozilla/5.0"补请求头,--cookies cookies.txt带登录态
分片连续失败、中途断流网络稳定性与重试、超时配置调低--thread-count,调高--download-retry-count,放宽--http-request-timeout
解密失败--key是否为KID:KEY格式、十六进制还是 Base64换--decryption-engine到另一个引擎;HLS 用--custom-hls-method+--custom-hls-key
磁盘被分片撑爆临时文件落在哪个盘--tmp-dir挪到空间大的盘,完成后自动删除
直播录制提前停止直播列表是否长时间无新分片核对--live-wait-time、--live-idle-timeout设置;网络不稳先关--live-pipe-mux

N_m3u8DL-RE 适合习惯命令行、要批量处理 DASH、HLS、Smooth Streaming 流的人,点播和直播一条命令都能覆盖。它不解决 DRM 保护和网页抓链问题,纯网页链接还是需要先自己找出流地址。完整命令行参数见 README.md,公开测试流清单见 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

延伸阅读

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