【问题标题】:How do we download a blob url video [closed]我们如何下载 blob url 视频 [关闭]
【发布时间】:2017-08-11 15:11:52
【问题描述】:

我想下载一个视频,其 URL 不是简单的 MP4 文件,而是 blob 类型,例如:

<video id="playerVideo" width="450px" autoplay="autoplay" height="338px" 
       style="height:100%;width:100%;" class="mejs-rai-e"
       src="blob:http://www.example.com/d70a74e1-0324-4b9f-bad4-84e3036ad354">
</video>

是否有任何 chrome 扩展程序或软件可用于从 blob URL 下载视频?

【问题讨论】:

  • 为什么这个问题的每个答案都假设文件扩展名是.m3u8?问题中从未指定过。
  • 你好@SidD,你能解决这个问题吗?如果是这样,您能否告诉我哪种解决方案适合您?
  • 我没有 .m3u8 请求。我该怎么办?
  • 一般情况下需要了解what blob URL is。然后可以拦截对 blob URL 创建的调用并获取源数据。
  • @numbermaniac 我遇到了同样的问题,并且没有 .m3u8 文件。我的解决方案:找到视频元素并在控制台中运行代码 sn-p,即:1. 使用 r=new MediaRecorder(s) 播放视频并记录 s=video.captureStream(),2. 将记录的数据转换为使用 URL.createObjectURL(blob) 的 objectURL,以及 3. 添加一个可见且可点击的链接,用于使用 objectURL 进行下载。不过,我从未尝试从 video.src 中的 blob URL 创建下载链接。 developer.mozilla.org/en-US/docs/Web/API/…

标签: video browser blob youtube-dl


【解决方案1】:

我刚刚提出了一个通用解决方案,它应该适用于大多数网站。 我只在 Chrome 上尝试过,但是这种方法应该适用于任何其他浏览器,因为开发工具在它们中几乎相同。

步骤:

  1. 打开浏览器的开发工具(通常是F12,或Ctrl-Shift-I,或右键单击然后在弹出窗口中Inspect菜单)在您感兴趣的视频的页面上。
  2. 转到网络标签,然后重新加载页面。该选项卡将填充一个请求列表(可能多达一百个甚至更多)。
  3. 搜索请求的名称并找到扩展名为.m3u8 的请求。其中可能有很多,但最有可能的是第一个或最大的就是您要查找的那个。它可以有任何名称,例如playlist.m3u8
  4. 单击其名称以打开请求。在 Headers 小节下,您将在 Request URL 字段中看到请求的完整 URL。复制它。
  5. 从 m3u8 中提取视频。有很多方法可以做到,我会给你我试过的,但你可以通过“从 m3u8 下载视频”来谷歌更多。
    • 选项 1. 如果您安装了 VLC 播放器,请使用“打开网络...”菜单选项将 URL 提供给 VLC。这部分我这里就不赘述了,很多地方都有很多综合攻略,比如here。如果该页面无法正常工作,您可以随时通过“vlc 下载在线视频”搜索另一个页面。
    • 选项 2。 如果您更喜欢命令行,请使用 FFMPEG 或您自己的脚本,如 this SuperUser question 中所述。

【讨论】:

  • 选项3是:直接用youtube-dl使用播放列表URL,很简单!
  • youtube-dl 也适用于 mpd 文件。
  • 我在下载 m3u8 时一直得到 403。尝试使用 youtube-dl、firefox 扩展、vlc 播放器。我该怎么办?
  • @patricK 可以尝试添加referer,例如:youtube-dl --add-header Referer: https://www.google.com/referer-page https://google.com/video.m3u8
  • 和选项4:使用JDownloader 2下载播放列表URL,在我看来这是最简单的方法。
【解决方案2】:

使用HLS Downloader Google Chrome 扩展程序获取指向 M3U 播放列表的链接。它在浏览器栏中的图标将显示在当前网页上找到的播放列表的数量。单击该图标,您可以看到播放列表链接列表,然后使用链接旁边的复制按钮进行复制。

然后使用youtube-dl程序下载文件。

youtube-dl --all-subs -f mp4 -o "file-name-to-save-as.mp4" "https://link-from-Google_Chrome-HLS_Downloader_extension"

命令行选项说明:

如果您一直为 youtube-dl 使用相同的配置选项,您可能需要查看configuration options for youtube-dl,因为这可以为您节省大量输入。

如果您想查看代码,可以在its project page on Github 上找到 HLS 下载器扩展程序在 MIT 许可下免费和开源。

【讨论】:

  • 这很好用,除了在我的情况下 MP4 没有声音?有没有办法解决这个问题?
  • 我没有遇到过他的情况。它必须与您正在下载的文件有关。我相信 mp4 标准支持多个音轨。检查是否没有其他音轨并且第一个音轨是静音。
  • 大扩展!然后用 m3u8 文件和海峡 blob 文件在你自己周围做所有的事情要容易得多。但是,我不需要 youtube 的任何东西。 HLS Downloader 直接给我视频文件。
  • 尝试在选项中添加 -x
  • 就我而言,我已经在 Twitter 上尝试了 HLS 下载器,它就像 @Justin 所说的那样工作:它直接提供了视频文件。但我也尝试了@Vlad 在另一个答案中提出的建议——基本上是手动完成所有步骤——结果相同(即获得一个有效的.MP4 文件)。
【解决方案3】:

有多种方法可以获取 URL .m3u8,方法是查看页面源代码、查看 Chrome 开发者工具中的“网络”选项卡,或使用 HDL/HLS Video Downloader 等插件。

有了 .m3u8 URL,您就可以使用ffmpeg 将视频下载到如下文件中:

$ ffmpeg -i 'https://url/to/some/file.m3u8' -bsf:a aac_adtstoasc \
    -vcodec copy -c copy -crf 50 file.mp4

【讨论】:

    【解决方案4】:

    该过程可能会有所不同,具体取决于视频的托管地点和方式。了解这一点有助于更详细地回答问题。

    举个例子;这就是您可以在 Vimeo 上下载带有 blob 链接的视频的方法。

    1. 查看视频播放器iframe源码
    2. 搜索 mp4
    3. 使用令牌查询复制链接
    4. 在令牌过期前下载

    Source & step-by-step instructions here.

    【讨论】:

    • 即使url中的文件类型不是.mp4,这种方法也能正常工作,只需检查文件头并重命名即可。
    • 没有找到 mp4 关键字。没有解决我的问题。
    【解决方案5】:

    这就是我设法“下载”它的方式:

    1. 使用inspect-element识别M3U播放列表文件的URL
    2. 下载 M3U 文件
    3. 使用 VLC 读取 M3U 文件、流式传输并将视频转换为 MP4

    在 Firefox 中,M3U 文件的类型为 application/vnd.apple.mpegurl

    M3U 文件的内容如下所示:

    打开VLC medial player 并使用媒体 => 转换选项。使用您(保存的)M3U 文件作为源:

    【讨论】:

    • 很棒的提示!似乎不需要下载m3u8 文件 - 您只需将外部 url 粘贴为源即可。
    • 在网络选项卡上有一个“媒体”的辅助选项卡。从几个项目中获取 m3u8 文件更容易。
    • 最好的方法。我遇到的唯一缺点是 8 分钟 m3u8 分为 5 秒步骤,并且存在 SSL 证书问题,所以我不得不按很多次“接受证书”...
    • 在 chrome 中的 developer tools 中找不到任何 m3u8 文件。有什么建议吗?谢谢
    • 这个有时候会无法下载完整的视频,很遗憾,可能是超时阈值太小,不知道在哪里可以调整。
    【解决方案6】:

    如果您找不到 .m3u8 文件,您需要执行几个不同的步骤。

    1) 转到网络选项卡并按Media 排序

    2) 您将在此处看到一些内容并选择第一项。在我的示例中,它是一个 mpd 文件。然后复制请求 URL。

    3) 接下来,使用您最喜欢的命令行工具,使用步骤 2 中的 URL 下载文件。

    youtube-dl -f bestvideo+bestaudio https://url.com/destination/stream.mpd
    

    4) 根据编码,您可能必须将音频和视频文件连接在一起,但这取决于逐个视频的情况。

    【讨论】:

    • 这非常适合 O'Reilly 现场活动
    • @rick Rick 什么是 youtube-dl?我的视频不是 Youtube 网站的。请建议。谢谢
    • @Kamlesh youtube-dl 可以通过 brew 安装,它通常适用于 blob,而不仅仅是来自 YouTube。
    【解决方案7】:
    1. 使用开发者工具网络选项卡查找播放列表/清单。总是有一个,因为它是这样工作的。它可能有一个 m3u8 扩展名,您可以在过滤器中键入它。 (youtube-dl 工具也可以在一段时间内自动找到 m3u8 工具,给它一个指向正在显示视频的网页的直接链接。)
    2. 将其交给 youtube-dl 工具 (Download)。它可以下载的不仅仅是 YouTube。它会自动下载每个片段,然后将所有内容与 FFmpeg 结合起来,然后丢弃这些部分。它很有可能支持您要从本机下载的网站,您甚至不需要执行第 1 步。
    3. 如果您发现一个顽固的网站并遇到 403 错误... Telerik Fiddler 来救援。当它充当本地代理时,它可以捕获并保存任何传输的内容(例如视频文件)。您看到/听到的所有内容都可以下载,除非是 Spotify 等 DRM 内容。

    注意:在窗口中,您可以使用“命令提示符”或创建批处理文件来使用 youtube-dl.exe。即

    谢谢

    【讨论】:

    • 你会如何使用 youtube-dl 来做到这一点?只是youtube-dl https://....m3u8" ?
    • 另外,这对私人视频有效吗?
    • @AzizJaved 是的,完全一样。我没有在私人视频上测试过它,但如果你能看到它们所在的页面,那么它们的工作方式与在公共视频上完全一样。重要的是你在浏览器上看到了什么:如果你能看到,你就可以复制它。简单的! ?
    • 你们想要我的一篇关于下载加密 HLS 视频的文章吗?这基本上是第 3 步,但使用 ffmpeg 解密和组合 ts 段。
    【解决方案8】:

    我已经在其他一些网站上发布了这个,尽管为什么不在 stackoverflow 上与男生/女生分享。

    1. 在 Firefox 浏览器上安装 Video DownloadHelper 扩展。
    2. 激活 DownloadHelper 后,导航到包含您要下载的视频的网页。
    3. 视频流式传输后,单击 DownloadHelper 图标。它会为您提供当前视频中所有可用文件格式的列表。
    4. 滚动到您要下载的文件格式
    5. 在右侧,您会看到一个箭头
    6. 单击该箭头可获取有关当前视频和所选格式的更多信息
    7. 在该箭头末尾显示的窗口中,向下滚动并选择“详细信息”
    8. 您现在拥有有关当前视频和所选格式的所有详细信息。是这样的。

    点击详情⊗ _needsAggregate _needsCoapp 行动 比特率 分块 描述前缀 持续时间浮动 延期 帧 ID 从缓存 群
    hls ID 是私人的 长度 主清单 媒体清单 原始ID 推荐人 尺寸 状态 标题 顶部网址 网址 url文件名

    1. 现在,查看该命中详细信息中引用者的详细信息。这就是你想要的网址。复制并粘贴到您喜欢的下载器上。

    【讨论】:

    • 这里是当你使用m3u8 获取url 时的下载方式——只需运行ffmpeg -i "http://example.com/video_url.m3u8" -c copy -bsf:a aac_adtstoasc "output.mp4"(显然你需要安装它)
    • @godblessstrawberry 谢谢!您应该将此作为答案发布。
    • 您好,这不适用于 events.on24,但它是一个很棒的扩展,对我帮助很大
    • @godblessstrawberry 我在 chrome 浏览器的 Network 选项卡中没有找到任何 m3u8 扩展文件。你能建议我有什么问题吗?谢谢
    • @Kamlesh 也许这可以帮助stackoverflow.com/a/55071769/1665293
    【解决方案9】:

    如果 blob 是使用 F4M 清单中的数据实例化的(检查 Chrome 开发者工具中的网络选项卡),您可以使用此处发布的 php 脚本下载视频文件:https://n1njahacks.wordpress.com/2015/01/29/how-to-save-hds-flash-streams-from-any-web-page/

    通过放置:

      if ($manifest == '')
        $manifest = $_GET['manifest'];
    

    之前:

      if ($manifest)
    

    您甚至可以在网络服务器上运行它,使用带有查询字符串的请求:?manifest=[manifest url]

    请注意,您可能需要使用 FTP 客户端来检索下载的视频文件并在脚本之后进行清理(它会留下所有下载的视频部分)。

    【讨论】:

      猜你喜欢
      • 2018-06-10
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      相关资源
      最近更新 更多