CutFast CutFast
教程指南

m3u8 是什么文件?打开、下载、转换 MP4 一站讲透(2026 版)

发布于 · 作者: CutFast Team
把 CutFast 设为 Google 优先来源 在热门报道和 AI 概览里看到更多 CutFast。

你点了一个视频的下载按钮,结果硬盘里出现了一个 4 KB 的 .m3u8 文件——双击 Windows Media Player 报错,扔进微信发不出去,甚至连大小都不对劲。这不是文件损坏,而是你下载到了”目录”,没下载到”内容”。

m3u8 是 HTTP Live Streaming(HLS)协议的播放列表索引,里面只有一串文本和分段地址。要正常播放或保存为 mp4,需要先理解它的结构,再选对工具。这篇文章把「是什么 → 怎么播 → 怎么下 → 怎么转」四件事一次讲清楚,自媒体剪片或学生扒课件都能直接套用,不需要装 ffmpeg、不需要 Python 环境,浏览器里点几下就能走完全程。

m3u8 文件到底是什么

m3u8 是一个 UTF-8 编码的纯文本播放列表,全称 “M3U for UTF-8”,是苹果在 2009 年提出的 HLS 协议的核心载体。它本身不含一帧视频,只记录视频被切成的若干分段(通常是 .ts.m4s)的 URL、时长、加密信息和码率。播放器读它的时候,会按顺序依次拉取分段、拼接、解码、播放,整个过程对用户透明。

打开任何一个 m3u8 文件(用记事本/VS Code 即可),你看到的是这种结构:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:6.000,
segment_000.ts
#EXTINF:6.000,
segment_001.ts
#EXTINF:6.000,
segment_002.ts
#EXTINF:5.834,
segment_003.ts
#EXT-X-ENDLIST

每行的含义:

  • #EXTM3U — 文件头,不写就不是合法 m3u8
  • #EXT-X-VERSION:3 — 协议版本号,3 是最常见的兼容版本,7 之后才支持 fMP4 分段
  • #EXT-X-TARGETDURATION:6 — 每个分段最大时长(秒),是分段切片的”红线”
  • #EXT-X-MEDIA-SEQUENCE:0 — 第一个分段的序号,直播流会一直递增
  • #EXT-X-PLAYLIST-TYPE:VOD — VOD 表示点播完整列表;直播流没有这一行
  • #EXTINF:6.000, — 单个分段的实际时长,浮点数
  • segment_000.ts — 分段文件名,可以是相对路径也可以是完整 URL
  • #EXT-X-ENDLIST — 列表结束标志,VOD 必须有,直播流没有

如果你打开的 m3u8 里写的是另一份 m3u8 而不是 ts,那就是一个”主播放列表”(master playlist),它指向多个不同码率的”媒体播放列表”(media playlist),让播放器根据网速自动切换。这就是 HLS 自适应码率(ABR)的实现方式——一个站点同时挂 480p / 720p / 1080p 三条流,弱网自动降级到 480p,强网自动切到 1080p,对用户表现为”画质会自己变”。

简单总结:m3u8 = 索引文本,分段(ts/m4s)= 视频本体。两者必须一起存在才能播放,单独保存 m3u8 等于只拿到了菜单没拿到菜。

为什么我下载视频会拿到 m3u8 文件

99% 的 m3u8 下载困惑都来自同一个误会:你以为点的是「下载视频」,但浏览器实际上把它当成了「下载播放列表」。原因是现代视频站普遍采用 HLS 流式分发——视频被切成几百个 6 秒小片段在 CDN 上分布,播放器边下边播,比一个 2 GB 大文件在用户那里”一口气下完”体验好得多。当你右键保存或者扩展抓流时,最容易拿到的就是入口的索引文件。

具体哪些场景会下到 m3u8?

典型一:浏览器右键「另存为」。你在 Safari 或 Chrome 看到一个嵌入式播放器,右键→视频另存为,结果存下来的是 m3u8 而不是 mp4。这是因为 video 标签的 src 属性指向的是 m3u8 链接,浏览器只能保存它能拿到的资源——索引本身。

典型二:F12 抓网络请求。开发者工具 → Network → 过滤 m3u8,能看到第一个请求是 master.m3u8 或 index.m3u8。复制链接粘到地址栏,下载下来还是文本。这时候你需要的不是这个 m3u8,而是它指向的所有 ts/m4s 分段,外加一个能把它们拼起来的工具。

典型三:在线课程 / 录播平台。慕课、网易公开课、各种付费课程的”下载”按钮经常给出 m3u8 直链,因为他们的转码 pipeline 输出就是 HLS。要么用平台官方 App(DRM 保护内),要么走 m3u8 公开链(无 DRM 的版本)。

典型四:Twitter / X 视频。Twitter 视频从 2020 年开始全面切到 HLS。任何抓取 X 视频的工具,本质都是先解析推文的 m3u8,再下载分段拼接为 mp4。

典型五:Twitch / YouTube Live 直播切片。直播流的 m3u8 是滚动更新的,序号 MEDIA-SEQUENCE 会一直增,老分段从列表里被移除——所以下载直播 m3u8 不能事后再下,必须录制中实时抓。

如果你下到的是一个 4 KB 左右的小文件,扩展名 .m3u8,记事本打开能看到 #EXTM3U 头,那 100% 是索引文件。下一步不是删了重下,而是选对工具去解析它。

怎么打开 / 播放 m3u8

最快的方式:浏览器里直接播。Safari 原生支持 HLS,把 m3u8 链接粘进地址栏就能放;Chrome/Firefox 需要借助 hls.js 类库,所以本地双击打不开但在网页内可以播。如果是本地文件,VLC 是命令行老兵,cutfa.st 这类浏览器播放器则做到零安装、隐私不外泄。

四种主流方案对比:

方案一:Safari 直链播放。macOS 和 iOS 的 Safari 原生支持 HLS 解码(Apple 自己的协议),把 m3u8 的完整 URL 粘到地址栏,回车,视频就开始播。免费、快、画质原生。缺点是 Windows 没有 Safari,且本地 m3u8 文件没有 CORS 头时还是放不出来。

方案二:VLC Media Player。老牌跨平台播放器,菜单 Media → Open Network Stream → 粘贴 m3u8 URL。本地 m3u8 也支持,前提是同目录里要有它引用的 ts 分段。VLC 的优点是稳定、支持几乎所有编码;缺点是 UI 老旧,对 fMP4 / CMAF 分段偶尔会卡顿,加密 HLS(带 #EXT-X-KEY)默认不支持。

方案三:Chrome / Firefox 扩展。比如 Native HLS Playback、Play HLS M3u8。装上之后 Chrome 也能直接打开 m3u8 链接。优点是融入浏览器;缺点是扩展商店里大量”HLS 播放器”是钓鱼应用,会偷偷上传你的链接。

方案四:cutfa.st 在线播放器。打开 在线 m3u8 播放器,粘贴 m3u8 URL 或拖一个本地 m3u8 文件进去就开始播。零安装、零上传——视频流直接从源 CDN 进入你的浏览器,cutfa.st 的服务器只负责发 HTML/JS,看不到你的视频内容。基于 Mediabunny + WebCodecs,支持 H.264 / HEVC / AV1 / AAC / MP3 全套编码。

什么时候选哪种?

  • macOS / iOS 用户、链接公开可访问 → Safari 最快
  • Windows 用户、需要本地 m3u8+ts 一起播 → VLC
  • 想看一眼时长、码率、分段数等元数据 → 用 cutfa.st 的 m3u8 元数据查看,无需播完整个视频
  • 需要边看边考虑要不要存下来 → cutfa.st 浏览器播放器,看完一键转 mp4

如果链接里有 #EXT-X-KEY:METHOD=AES-128,说明这是带密钥加密的 HLS。没有密钥就播不了——VLC 也不行,cutfa.st 也不行。这是协议层的设计,不是工具的能力问题。能播放说明密钥要么在 manifest 里附带(少见且不安全),要么播放器从授权服务器自动取得(常见于付费课程,普通工具没权限)。

怎么下载 m3u8

下载 m3u8 = 下载它指向的所有分段 + 拼接为单文件。这一步是绝大多数用户卡住的地方,因为单存 m3u8 文本文件没用,必须把几百个 ts/m4s 也下回来。常见方案有 4 种,按门槛从低到高排:

方案一:cutfa.st 浏览器工具。访问 m3u8 转 mp4,粘 URL 或拖文件。浏览器自己拉所有分段、用 WebCodecs 解码、用 Mediabunny 重新封装为 mp4,全程不上传到任何服务器。流量走的是你的网络到原 CDN,cutfa.st 不在中间转发。1080p 30 分钟视频,10 兆光纤大约 4-6 分钟跑完。

适用:所有不带 DRM 的公开 HLS 流。门槛:会用浏览器即可。

方案二:ffmpeg 命令行

ffmpeg -i "https://example.com/path/playlist.m3u8" -c copy output.mp4

-c copy 表示直接复制流不重编码,速度最快(拷贝带宽,不消耗 CPU),输出体积和原 HLS 几乎一致。如果原 HLS 编码是 H.264 + AAC,那 mp4 是直接换壳;如果你想压缩,去掉 -c copy-crf 23 即可。

适用:服务器批量下载、有命令行基础的人。门槛:装 ffmpeg + 知道流过期 / Referer / Cookie 等参数怎么传(很多 m3u8 需要带 -headers "Referer: ..." 才能下)。

方案三:Chrome 扩展(FetchV / Stream Recorder 等)。打开页面 → 扩展自动嗅探 m3u8 → 一键下载为 mp4。优点是嵌入浏览器流程顺滑;缺点是隐私担忧——很多扩展会回传链接到自己的服务器做”统计分析”。装之前看一眼权限要求和评分。

方案四:桌面软件(IDM、JDownloader、Allavsoft)。装本地 App,粘链接,等几分钟出 mp4。免费版功能受限,付费版 30-50 美元。适合不想用浏览器、不想敲命令行、对网速要求高的批量用户。

横向对比:

方案安装隐私速度加密支持直播流
cutfa.st 浏览器免装视频不上传你的带宽决定
ffmpeg装命令行本地最快部分(需手动传 key)
Chrome 扩展装扩展链接可能上传部分
桌面软件装 App链接送服务端部分

如果你只是偶尔下一两个公开 HLS 视频做剪辑素材,cutfa.st 浏览器方案是最快的——打开网页就开干,不用配置任何东西。如果你是开发者要批量自动化处理一千个链接,ffmpeg 是唯一答案。

怎么把 m3u8 转 mp4

转换的本质是把分散的 ts 分段重新封装到一个 mp4 容器里,不需要重新编码(流复制 / remux)。两条主要路径:服务端 ffmpeg 和浏览器端 WebCodecs。前者占服务器算力,后者占用户 CPU——但隐私和操作门槛差异很大。

服务端 vs 浏览器端对比:

维度服务端转码(在线工具)浏览器端转码(cutfa.st)
上传视频文件全量上传不上传,浏览器直接拉源 CDN
隐私服务方能看到内容cutfa.st 看不到
速度服务器 CPU + 你的上传带宽你本地 CPU + 你的下载带宽
文件大小限制通常 500 MB - 2 GB实际无限制(受本机内存约束)
需要登录经常需要完全免费,不登录
算力成本服务方承担你自己电脑承担
弱机表现与本机无关老旧电脑 / 低端手机会卡
加密 HLS部分支持不支持(协议限制)

cutfa.st 实战流程,10 秒上手:

  1. 打开 m3u8 转 mp4
  2. 粘贴 m3u8 URL(支持 https 直链)或拖一个本地 m3u8 文件(同目录要有 ts 分段)
  3. 等浏览器自动下载分段并 remux
  4. 点”下载 mp4”按钮,存到本地

底层用的是 Mediabunny 1.44 的 HLS 输入流 + mp4 输出封装。原 HLS 是 H.264 + AAC 时,整个过程是流复制,不重编码——意味着画质 0 损失,速度只受网络和磁盘 IO 限制。如果原 HLS 是 HEVC 或 AV1,浏览器需要 WebCodecs 解码再封装,部分老电脑(2018 年前的 Mac)可能跑不动 HEVC,提示 “decoder not supported”,这时候要么换电脑、要么走 ffmpeg。

如果转换过程中提示”网络错误”或”分段下载失败”,最常见的原因是原 m3u8 链接需要 Referer 或 Cookie。浏览器端工具拿不到原页面的 Cookie,所以下载会被 CDN 防盗链拦截。这种情况只能走 ffmpeg 在命令行里手动传 headers,或者先在 Chrome DevTools 里复制 cURL 命令研究一下鉴权逻辑。

m3u8 vs mp4:什么时候要转、什么时候不必

m3u8 适合分发,mp4 适合存档。两者不是替代关系,而是协议链上不同位置的角色——网站内嵌播放器用 m3u8 是为了流式自适应,你存到本地用 mp4 是为了离线可播。理解这个分工,能帮你少干很多无效转换。

保留 m3u8 的场景

  • 你在做网站,想给访客提供视频播放——直接挂 m3u8 让 hls.js 流式播,比一个 1 GB 的 mp4 用户体验好 10 倍
  • 你的内容会被多端访问,需要自动适配 4G / WiFi / 千兆光纤——HLS ABR 自动切码率
  • 直播——只有 HLS 这种分段协议能边录边播
  • 你要做 DRM 保护的付费内容——HLS 的 EXT-X-KEY 是核心机制

必须转 mp4 的场景

  • 你要把视频上传到微信、抖音、B 站、YouTube——所有 UGC 平台只接受单文件容器
  • 你要剪辑——Adobe Premiere、Final Cut、达芬奇都吃 mp4,没有一个能直接吃 m3u8
  • 你要发邮件、丢网盘、塞 U 盘——单文件比”一个 m3u8 + 几百个 ts”好管理 100 倍
  • 你要本地长期存档,怕原网站删除分段(CDN 缓存清理)

典型自媒体工作流

  1. 在抖音 / 小红书 / Twitter 上看到一个素材短视频
  2. F12 抓出 m3u8 链接
  3. cutfa.st 浏览器端转 mp4,30 秒搞定
  4. 拖进剪映 / 达芬奇,剪辑、加字幕、加水印
  5. 导出 mp4,再上传到自己的账号

这个链路里,m3u8 → mp4 是关键一跃。没有这一跃,第 4 步就走不通,因为没有专业剪辑软件能直接处理 HLS。

如果你只是想在自己电脑里随便看一看,不剪辑、不上传、不存档,那别转——直接 cutfa.st 在线播放器看完关掉,省时间也省硬盘。

FAQ

Q1:cutfa.st 能下载付费课程的加密 m3u8 吗?

不能。如果 m3u8 里包含 #EXT-X-KEY:METHOD=AES-128 或更高的 SAMPLE-AES、DRM(FairPlay/Widevine/PlayReady),cutfa.st 无法解密——这是协议设计层面的限制。Mediabunny 1.44 当前对 DRM 是只读支持(能识别但不能解密输出),未来也不会加。要看付费课程,请使用平台官方 App。

Q2:cutfa.st 支持下载直播 HLS 吗?

不直接支持。直播 m3u8 是滚动列表(没有 #EXT-X-ENDLIST),分段会持续生成、老分段被移除。cutfa.st 的 hls-to-mp4 是为 VOD(点播完整流)设计的,不做长时间录制。如果要录直播,请用 ffmpeg 的 -t 3600 参数手动录制 1 小时,或者使用 OBS 的录制功能。

Q3:浏览器播放器在低端手机 / 老电脑上会卡吗?

会。WebCodecs 解码依赖 GPU 硬件加速,2018 年之前的 Mac 跑 HEVC 会非常吃力。如果原 HLS 是 H.264,绝大多数 2015 年后的设备都能流畅跑。判断方法:先用 m3u8 元数据查看 看一下编码是 avc1(H.264)还是 hvc1(HEVC),再决定要不要走浏览器方案。

Q4:m3u8 转 mp4 后字幕会保留吗?

不会。HLS 字幕用的是 WebVTT,作为独立的 m3u8 子轨道分发。Mediabunny 1.44 当前不支持 WebVTT 字幕混流到 mp4 容器中,所以 cutfa.st 输出的 mp4 是纯视频+音频,没有字幕轨。需要字幕的话,单独下载 vtt 文件,用剪辑软件硬烧上去,或者播放时挂载外挂字幕(mp4 同名 srt 文件)。

Q5:转出来的 mp4 文件会比原 HLS 大吗?

几乎一样。流复制(remux)只是把 ts 分段里的视频/音频流重新装到 mp4 容器,不重编码——文件大小差异主要来自容器开销,通常 ±2% 以内。如果你看到 mp4 比所有 ts 加起来明显大或小,可能是浏览器漏下了几个分段(网络抖动),或者下载时强制重编码了。

Q6:本地 m3u8 文件双击为什么打不开?

Windows / macOS 默认没有关联 m3u8 到任何播放器。即使关联了 VLC,VLC 也只能从 m3u8 里读相对路径找 ts 分段——如果 m3u8 是从网上下载的、ts 还在远端 CDN,本地打开会报”找不到分段”。正确流程:要么用 cutfa.st 浏览器播放器粘贴原始 URL(让浏览器去网络拉分段),要么先用 ffmpeg / cutfa.st 把整套下载下来再播。

查看「HLS、m3u8 与直播录制」全部 7 篇 →

试试这些 AI 工具