스토리
如何从直接视频 URL 下载视频
说明什么是直接视频 URL、如何在浏览器中保存 MP4 或 WebM,以及 CORS、HLS 或 DASH 为何会阻止下载。
有一个视频 URL,并不等于有一个视频文件。有的地址指向 MP4 或 WebM 资源。有的打开的是只包含播放器的 HTML 页面。有的加载由许多小片段组成的流媒体播放列表。
所以有的链接很快就能保存,有的链接能播放却无法下载。本文说明如何区分这些情况,以及只有在 URL 确实是视频资源时如何保存文件。
什么是直接视频 URL?
直接视频 URL 是指 HTTP 响应本身就是媒体资源,而不是包在外面的网页。最简单的例子如下:
https://example.com/video.mp4
浏览器请求该 URL 时,服务器可以返回视频文件字节,Content-Type 常常是 video/mp4 或 video/webm。中间没有 HTML 文档。这个 URL 就是文件。
扩展名只是提示,不是规则。路径里没有 .mp4 也可能是视频资源:
https://example.com/media?id=123
如果服务器返回 Content-Type: video/mp4(或其他 video 类型)以及真正的媒体数据,那仍然是直接视频 URL。反过来,以 .mp4 结尾也可能是重定向或 HTML 错误页。应以 HTTP 响应为准,而不是地址末尾的字母。
直接视频 URL 与视频网页
比较这两个地址:
- 直接文件:
https://example.com/files/movie.mp4 - 网页:
https://example.com/watch/movie
前者可以是单个视频对象。后者通常是 HTML 文档。该页面可能嵌入 <video>、加载播放器脚本,再从地址栏里看不到的另一个 URL 获取媒体。
把网页地址贴进下载工具,并不会把页面里的文件“抠”出来。浏览器请求的是 HTML。面向可公开访问的直接视频 URL 的工具需要的是媒体地址本身。
NEXNARA 的网页视频下载器针对的就是这种公开文件 URL,而不是观看页。它不会从网站提取视频、不会登录账号、也不会组装播放器里的流。
如何从直接 URL 下载视频
如果你已经有候选链接:
- 拿到直接 URL。 使用文件、对象或媒体 URL,而不是观看页。
- 确认它是视频资源。 新标签页应显示浏览器内置播放(或下载提示),而不是版式中间嵌着播放器的页面。
- 先用浏览器试试。 许多浏览器可通过视频的快捷菜单保存,或在服务器发送文件处置头时开始下载。
- 想先预览时使用基于浏览器的工具。 把同一 URL 贴进去,查看格式、时长或大小后再保存。
网页视频下载器就是最后一步。你粘贴直接视频 URL,浏览器向该主机发起请求。若资源可播放,会出现预览。视频服务器允许跨源读取时可以下载;不允许时,只要预览可用仍可打开该 URL。NEXNARA 不会把文件上传到自己的服务器。
可以下载哪些视频格式?
在浏览器里,“能否下载”接近于“这个浏览器能否解码这个文件?”单文件 URL 常见的容器有:
- MP4 — 常常是 ISO BMFF 容器中的 H.264 或 HEVC
- WebM — 通常是 VP8、VP9 或 AV1
- Ogg Video — 较少见,编解码器支持因浏览器而异
容器和编解码器不是一回事。.mp4 并不能保证在所有浏览器和设备上播放。HEVC 与 AV1 取决于操作系统、硬件和浏览器版本。使用 HTML5 video 的工具只预览当前浏览器能解码的内容。它不会转换或重新封装文件。
若浏览器提示格式不受支持,文件在别处仍可能能播,也可能是标错的对象,或根本不是单个文件而是播放列表。
为什么能播放却不能下载?
播放和保存使用不同的浏览器 API。
<video> 元素可以请求资源(常常带 HTTP range)并渲染帧。即使另一源上的 JavaScript 不被允许读取这些字节并做成用户可保存的文件,播放仍可能成功。
预览正常但下载失败的常见原因:
- CORS。 视频主机未允许本站脚本读取响应。见下一节。
- 跨源凭据。 原站上有效的 Cookie,除非双方都同意,否则不会随简单的跨站
fetch发送。 Content-Disposition。attachment或文件名影响的是顶级导航如何保存,而不是另一源的脚本能否读正文。- 服务器配置。 缺少 CORS 头或拦截
HEAD/GET组合,会让先检查资源的工具停住。 - 身份验证。 在主机上已登录才有效的 URL,从另一站点可能返回 401/403。
- 过期或签名 URL。 对象存储常带有时限查询字符串。过期后同一链接会失败。
这些并不表示“这不是视频”,只表示当前浏览器上下文没有复制权限。
什么是 CORS?
CORS(跨源资源共享)是浏览器规则:一个源上的 JavaScript 何时可以读取另一源的响应。它不是专门的“防下载技术”。目的是让 https://a.example 在未经 b.example 允许时,不能悄悄读取 https://b.example 上的邮件或文件。
video 标签仍可以向用户显示跨源文件。CORS 常常阻止的是另一网站用 fetch() 把原始字节做成 Blob 再弹出保存对话框。若视频服务器未发送包含该工具源的 Access-Control-Allow-Origin(或简单公开文件的 *),这次读取会被拒绝。
能播放并不等于允许另一站点的脚本保存副本。NEXNARA 不会为了绕过该检查而代理文件。若下载被拦,退路是在视频主机上打开 URL——且仅在你有权保存时。
HLS 和 DASH 呢?
许多播放器并不加载一个 MP4。它们先加载清单,再加载许多分段。
- HLS 常用以
.m3u8结尾的 URL。该文件是文本播放列表,不是一个完整影片对象。 - DASH 常用
.mpd,即指向表示和分段的 XML 清单。
直接 MP4/WebM URL 与 HLS/DASH 播放列表是不同资源。保存“那个 .m3u8”只会得到小文本文件,不是电影。把分段合成一个文件需要解析播放列表、下载分段,通常还要重新封装。网页视频下载器 不会组装 HLS 或 DASH 流。若工具提示这是流播放列表,这是预期行为。
受 DRM 保护的视频
商业播放器可能用 Widevine、FairPlay、PlayReady 等 DRM 包装媒体。样本被加密且需要许可证。那不是你可以抓取并保存的公开 video/mp4 对象。NEXNARA 不会解密或绕过 DRM。
如何识别直接视频 URL
按证明力大致排序:
- 路径以
.mp4、.webm、.ogv等媒体扩展名结尾。有用,但不充分。 - 在新标签打开后只看到视频(或下载),而不是整站界面。
- 发布方将其说明为文件或对象链接(CDN、存储桶、“直接下载”)。
- 响应头包含
Content-Type: video/*(例如video/mp4)。
浏览器开发者工具的网络面板可以显示你作为普通用户已经发出的请求的类型和 Content-Type。这有助于理解取回了什么。这不是抓取隐藏流或绕过登录的指南。若站点不提供公开文件 URL,此流程不适用。
扩展名和内容类型都可能作假。.mp4 URL 可能重定向到 HTML。video/mp4 仍可能是很小的错误正文。标签页里能播放才是实际确认。
常见问题
URL 打开的是网页。
不是直接视频 URL。你需要媒体资源地址,而不是观看页。
能播放但下载没用。
主机很可能禁止跨源读取(CORS),或文件对浏览器内保存来说太大。预览可用时用打开,或在有权限时于视频主机的顶级标签页保存。
以前能用的链接现在失败。
签名或限时 URL 会到期。请从原来获取链接的地方再要一条新的。
URL 以 .m3u8 或 .mpd 结尾。
这是流播放列表,不是单个 MP4/WebM 文件。此下载器不会把这些分段拼起来。
浏览器说格式不受支持。
该浏览器/操作系统可能没有对应容器或编解码器。换浏览器,或确认它确实是视频对象。
浏览器无法访问该 URL。
检查 https://、网络连接,以及主机是否允许公开访问。在 HTTPS 工具页上请求 HTTP 文件也可能因混合内容失败。
隐私
对本工具,NEXNARA 不会把视频文件上传到 NEXNARA 服务器。这并不等于声称“URL 从不离开你的浏览器”。
粘贴地址后,你的浏览器会直接向该外部视频主机发请求。 主机能看到一次普通的媒体请求。NEXNARA 并不在中间存储文件。字节来自对方的 URL,因此视频运营方仍会收到流量。
负责任的使用
只下载你拥有或有权下载的视频。公开 URL 不是复制许可。
FAQ
什么是直接视频 URL?
响应本身就是视频资源(例如 MP4 或 WebM 对象)的链接,而不是内嵌播放器的 HTML 观看页。
能从 URL 下载 MP4 吗?
可以,当 URL 是公开的 MP4(或类似)文件且浏览器能解码时。若地址是网页或播放列表,保存该地址得不到影片文件。
为什么能播放却不能下载?
播放器即使不允许另一网站的 JavaScript 读取字节,仍可显示媒体。常见原因是 CORS、身份验证和服务器策略。
能下载 m3u8 URL 吗?
用本工具不能得到完整的单个视频。.m3u8 是 HLS 播放列表。NEXNARA 不会组装 HLS 或 DASH 流。
NEXNARA 会上传我的视频吗?
不会。文件不会上传到 NEXNARA。浏览器与你输入的视频 URL 通信,因此外部主机仍会看到该请求。
为什么视频链接过期了?
许多主机给对象 URL 附上签名和过期时间。过时后同一字符串不再被授权。请申请新链接;改旧链接无法续期。