tutorials

如何从视频直链下载 MP4 视频

学会识别 MP4、WebM 视频直链,用 FlowPick 一键下载,并逐个拆解 403、404、CORS、文件不完整这些最常见的坑。
FlowPick 团队
9 分钟阅读
# 视频下载 # MP4 # WebM # 视频直链 # 教程

如何从视频直链下载 MP4 视频

看到一个视频,右键没有"另存为",浏览器地址栏里也没有 .mp4。你八成遇到的是两种情况之一:要么是 M3U8/MPD 这种分片流,要么就是直链但被藏起来了。这篇文章只讲后者:怎么把藏起来的直链挖出来,怎么判断它是不是真的能下,以及下不动的时候到底卡在哪。

先搞清楚:什么叫视频直链

直链就是那种"一个 URL 直接指向一个文件"的下载。你拿到地址,丢进下载器,一个请求就把整个 MP4、WebM、MOV、MKV 拉下来。不像 HLS、DASH 那样要先拼清单再逐片下载。

视频直链HLS / DASH 流
地址指向单个文件清单 + 分片
下载方式一个请求先解析清单,再逐片下载合并
失败表现403 / 404 / 空文件花屏、无声、合并失败

下面这些内容都围绕直链展开。如果你拿到的其实是 .m3u8.mpd 地址,别在这篇里耗——去看 M3U8/HLS 流媒体下载入门 或者 如何下载带声音的 DASH 视频,方向不对,方法全是白搭。

如何确认它是视频直链

只看 .mp4 后缀不够,很多网站会在 CDN 后面加一堆签名参数,甚至把后缀藏掉。判断标准就一个:请求返回的 Content-Type 是不是 video/*

方法一:开发者工具看 Network

打开视频页面,F12 进开发者工具,切到 Network 面板,筛选 mp4webm,开始播放视频:

  1. 找到一个 URL 里带 .mp4 / .webm 的请求。
  2. 点开看响应头的 Content-Type
  3. video/mp4video/webm,这就是直链。

方法二:curl 直接验证

拿到疑似地址后,用 curl 看它到底返回什么(把地址换成你自己的):

curl -sI "https://cdn.example.com/course/lesson1.mp4" | head -n 10

重点看两行:

HTTP/1.1 200 OK
Content-Type: video/mp4
Content-Length: 52428800

Content-Typevideo/mp4 说明地址是对的。如果返回的是 text/html,说明这根本不是视频,是一个网页——你复制错地址了。直链的检测原理和格式支持范围,见 视频嗅探 — 支持的视频格式

用 FlowPick 扩展下载

第 1 步,打开视频实际播放的页面,播放几秒,让直链真的被请求一次。 第 2 步,打开 FlowPick 扩展,在资源列表里筛选"视频",挑出 video/mp4video/webm 类型的条目,别选缩略图或封面图。 第 3 步,确认右侧预览能正常播放,格式无误后点下载。 第 4 步,下载完成后打开文件,确认能播放再关掉原页面。

扩展跑在源页面上下文里,Referer、Cookie 自动带上,大部分防盗链校验直接过。这是扩展比在线工具强的地方,在线工具跑在自己域名下,带不了目标站点的登录态。两者差异见 在线工具 — 与扩展的区别

如果你只是偶尔下一个、没有防盗链校验,也可以用 在线视频下载器,粘贴直链地址就能下。

常见错误逐个拆

403 Forbidden:请求头不对

视频很少真的"没权限",更多是校验没过:

  • Referer 校验:要求请求来自特定页面,空 Referer 直接拒绝。
  • Cookie / 登录态:没带登录 Cookie,或已过期。
  • 临时令牌:URL 里的 ?token= 过期了。

用 curl 复现一下,确认是不是 Referer 的问题:

# 不带任何头,看裸请求返回什么
curl -s -o /dev/null -w "%{http_code}\n" "https://cdn.example.com/course/lesson1.mp4"

# 带上页面 Referer 再试
curl -s -o /dev/null -w "%{http_code}\n" \
  -H "Referer: https://www.example.com/course/123" \
  "https://cdn.example.com/course/lesson1.mp4"

带 Referer 就好了,说明是防盗链。换扩展下,扩展在源页面里跑,Referer 自动补齐,v1.1.1 之后还内置了防盗链代理,预览和下载都会自动带上正确请求头。在线工具做不到这点。代理细节见 FlowPick v1.1.1 更新

404 Not Found:地址过期或拿错了

直链最烦的就是"昨天还能下,今天 404"。常见三种:

  • 临时签名 URL 过期:云存储(OSS、COS 等)的直链带有效期,过几分钟到几小时就失效。
  • 文件被清理:上传者删了文件,或 CDN 缓存被清。
  • 复制错地址:你复制的是播放页地址,不是文件直链。

地址真失效就没救——回到原视频页面重新检测一次,拿新的直链再下。

CORS 错误:在线工具特有的坑

如果你在用在线工具下载且报 CORS 错误,这不是你操作的问题,是工具本身的限制:在线工具跑在 flowpick.com 域名下,浏览器同源策略会拦跨域读取。换扩展,扩展有独立权限,不受同源策略限制,检测范围和成功率都高一截。细节见 视频嗅探 — 扩展与在线工具的检测差异

文件不完整:服务器不支持断点续传

下载能开始,但暂停后从 0 重来,或者下到一半失败——这跟服务器支不支持 HTTP Range 有关。Range 允许客户端只请求文件的一部分,断点续传全靠它。

测一下服务器支不支持:

curl -s -o /dev/null -w "%{http_code}\n" \
  -H "Range: bytes=0-1023" \
  "https://cdn.example.com/course/lesson1.mp4"
# 206 = 支持 Range,可以断点续传
# 200 = 返回完整文件,说明不支持

返回 206 没问题;返回 200(完整文件)说明不支持 Range,那就别中途暂停,一次下完。这是服务器能力问题,换工具也一样。

下载下来打不开怎么办

文件下下来了、体积也正常,但播放器报"格式不支持"或黑屏。这里要分清两个概念:容器编码.mp4 是容器,里面装的可能是 H.264,也可能是 H.265/HEVC 或 AV1。容器支持不等于编码支持,播放器得能解码里面那层编码才能放出来。

遇到编码不支持,用 格式转换 转成兼容性更好的 H.264 MP4 就行。你的浏览器到底能播什么格式,参考 浏览器兼容性

大文件(几百 MB)下载到一半页面卡住,是浏览器把文件暂存在内存里的原因。FlowPick 优先走 File System Access API(选目录后流式写入,不占内存),不支持时退回 Blob 模式,大文件就可能卡。对策很简单:优先选"选择保存目录",别用默认下载;实在不行就下低画质版本。Blob 模式的硬限制见 已知限制

分不清直链、M3U8、MPD 怎么办

拿到的地址后缀带 .m3u8.mpd,那根本不是直链,是流媒体清单。别硬下:

小结

直链下载就四步:找到视频真正播放的页面 → 从 Network 或 FlowPick 里挖出 video/* 的地址 → 用 curl 验证没拿错 → 下载完先测再走。遇到 403 换扩展、404 重新检测、CORS 别用在线工具、文件不完整先查 Range。剩下那些疑难杂症,视频直链下载失败排查 里按症状全列出来了。请只下载你有权保存的视频。


相关文章

推荐阅读