如何下载 Blob URL 视频

539

我想下载一个视频,它的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下载视频?


309
为什么每一个回答这个问题的人都默认文件扩展名是.m3u8?题目中从未指定过。 - numbermaniac
2
你好@SidD,你解决了这个问题吗?如果是的话,能否告诉我哪个解决方案对你有用? - hagrawal7777
8
我没有.m3u8请求,我该怎么办? - mishap
4
通常情况下,需要理解“Blob URL”是什么(请参考https://dev59.com/1F0Z5IYBdhLWcg3w-EPS)。然后,就可以拦截创建 Blob URL 的调用并获取源数据。 - user202729
4
虽然这个问题与编程无关,但它在“超级用户”网站上是相关的:如何使用Blob网址下载视频?- 超级用户 - user202729
显示剩余6条评论
9个回答

553

我刚想到了一个通用解决方案,可以在大多数网站上使用。

我只在Chrome浏览器上尝试过,但是这种方法应该适用于任何其他浏览器,因为它们的开发者工具基本相同。

  1. 打开浏览器的开发者工具(通常是F12Ctrl-Shift-I或右键点击,然后在弹出菜单中选择检查),进入你感兴趣的视频所在的页面。
  2. 转到网络选项卡,然后重新加载页面。该选项卡将显示请求列表(可能有100个或更多)。
  3. 通过请求名称搜索并找到扩展名为.m3u8的请求。可能会有很多这样的请求,但最有可能的是第一个或最大的那个。它可以有任何名称,例如playlist.m3u8
  4. 单击其名称以打开该请求。在标头子部分下,您将在请求URL字段中看到请求的完整URL地址。复制它。 enter image description here
  5. 从m3u8中提取视频。有许多方法可以做到这一点,我将给您尝试过的那些方法,但您可以通过“下载m3u8视频”的谷歌搜索获得更多方法。
    • 选项1。如果您已经安装了VLC播放器,请使用“打开网络…”菜单选项将URL输入到VLC中。我不会在这里详细介绍此部分内容,因为在许多地方都有包含详细指南的全面指南,例如这里。如果该页面不起作用,您可以通过搜索“vlc download online video”来找到其他网站。
    • 选项2。 如果你更喜欢使用命令行,可以使用FFMPEG或者自己的脚本,按照这个SuperUser问题中的指示操作。

88
选项三是:直接使用播放列表URL与youtube-dl一起使用,非常简单! - Arnaud Tournier
16
youtube-dl 也可用于 mpd 文件。 - Gibado
5
每次下载m3u8时我都得到403的错误。我已经尝试使用youtube-dl、火狐扩展和vlc播放器了。我该怎么办? - patricK
14
你可以尝试添加Referer,例如:youtube-dl --add-header Referer: https://www.google.com/referer-page https://google.com/video.m3u8 - Searene
6
选项4:使用 JDownloader 2 下载播放列表的 URL,我认为这是最简单的方法。 - Robin Hartmann
显示剩余17条评论

130
使用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"

命令行选项的说明:

  • -f mp4 = 输出格式为mp4

  • --all-subs = 下载所有字幕

  • -o "file-name-to-save-as.mp4" = 视频保存的文件名。

  • "https://link-from-Google_Chrome-HLS_Downloader_extension" = 这是你从HLS下载器扩展程序复制的播放列表链接。

如果您经常使用相同的配置选项进行youtube-dl,您可能想看一下youtube-dl的配置选项,因为这可以节省大量打字。

HLS Downloader扩展程序是免费且开源的,根据MIT许可证发布,如果您想查看代码,可以在Github上的项目页面找到。


4
我没有遇到过这种情况。这可能与你正在下载的文件有关。我相信mp4标准支持多个音轨。请检查是否还有其他音轨,而第一个音轨是否是静音。 - frederickjh
2
很棒的扩展!比起自己处理m3u8文件和纯粹的blob文件要容易得多。不过我不需要那个YouTube的东西。HLS下载器可以直接给我视频文件。 - Justin Emlay
2
在我的情况下,我尝试了使用 HLS Downloader 下载 Twitter 视频,结果和 @Justin 说的一样:直接获取到了视频文件。但是我也尝试了 @Vlad 在另一个回答中提出的建议——基本上手动操作所有步骤——并获得了同样的结果(即获得一个可以工作的 .MP4 文件)。 - Gwyneth Llewelyn
2
如果没有音频,我建议在“-f”参数中设置视频+音频。例如,“-f bestvideo+bestaudio”,这对我解决了问题。您可以通过“-F”参数检查可用的视频和音频选项。一些网站有不同视频质量的视频,但音轨与视频分离。 - emazzotta
1
谢谢@KingRider,我已经在我的回答中更新了上面的链接。 - frederickjh
显示剩余12条评论

72

有多种方法可以获取 .m3u8 的 URL,可以查看网页源代码、在 Chrome 开发者工具的 Network 选项卡中查找,或使用插件如 HDL/HLS 视频下载器

有了 .m3u8 的 URL,然后可以使用 ffmpeg 将视频下载为文件,操作如下:

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

1
请注意,此扩展程序需要25美元的费用才能使用。而Video DownloadHelper是免费的,并且在大多数情况下都可以使用。 - Sire

59
这是我如何“下载”它的方法:
  1. 使用检查元素功能识别M3U播放列表文件的URL。
  2. 下载M3U文件。
  3. 使用VLC读取M3U文件,流式传输并将视频转换为MP4格式。

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

enter image description here

M3U文件内容应如下所示:

打开VLC媒体播放器,使用“媒体”=>“转换”选项。 使用您保存的M3U文件作为源:

enter image description here


3
太棒了!看起来不需要下载m3u8文件 - 只需将外部URL粘贴为源即可。 - user993683
2
在网络选项卡上有一个名为“媒体”的次级选项卡。从几个项目中获取m3u8文件更加容易。 - pcarvalho
迄今为止最好的方法。我遇到的唯一缺点是,8分钟的m3u8被分成了5秒步长,并且存在SSL证书问题,因此我不得不多次按下“接受证书”... - Canelo Digital
2
在Chrome的“开发者工具”中未找到任何m3u8文件。有什么建议吗?谢谢。 - Kamlesh
有时候下载不了完整的视频,可能是超时阈值太小了,我也不知道在哪里可以调整。 - Wiktor Stribiżew
这些步骤需要更详细的说明才能遵循。 - 2540625

54

视频下载的具体流程取决于视频托管的位置和方式。了解这一点有助于更详细地回答该问题。

以 Vimeo 上带有 blob 链接的视频为例,以下是如何下载:

  1. 查看视频播放器 iframe 的源代码
  2. 搜索 mp4
  3. 复制带有 token 查询参数的链接
  4. 在令牌过期前下载

点击此处获取源码和逐步说明。

输入图像描述


3
即使 url 中的文件类型不是 .mp4,此方法仍然有效,只需检查文件头并重命名即可。 - eapo
1
没有找到mp4关键词。未解决我的问题。 - Kamlesh
1
有时候甚至你都不需要令牌;)——我是指一些网站。顺便说一下,这真的很酷,我不知道在查看页面源代码中我可以找到直接链接。 - undefined

50

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

1)转到网络选项卡并按 媒体 进行排序

Sort by media

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

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

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

4) 根据编码方式,您可能需要将音频和视频文件拼接在一起,但这取决于每个视频的情况。


这对于 O'Reilly Live Events 完美运作。 - AFK
@rick,Rick在这里。什么是youtube-dl?我的视频不在Youtube网站上。请给予建议。谢谢。 - Kamlesh
@Kamlesh,youtube-dl 可以通过brew进行安装,它适用于一般的块,不仅仅是来自YouTube的。 - 2540625

27
  1. 使用开发者工具的网络选项卡找到播放列表/清单。一定会有一个,因为它就是这样工作的。它可能带有m3u8扩展名,你可以在筛选器中输入。(youtube-dl工具还可以自动找到m3u8工具,只需给它一个直接链接到正在显示视频的网页即可。)
  2. 将其提供给youtube-dl工具 (下载)。它不仅可以下载YouTube,还可以下载更多内容。它会自动下载每个片段,然后使用FFmpeg组合所有内容,再丢弃那些部分。它很可能原生支持您想要从中下载的站点,您甚至不需要执行第1步。
  3. 如果您发现某个站点很顽固,遇到403错误... Telerik Fiddler来救援。它可以捕获并保存传输的任何内容(比如视频文件),因为它充当本地代理。除了Spotify等DRM内容外,你可以下载你看到/听到的一切。

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

谢谢


3
你可以使用youtube-dl来完成这个任务,只需要运行命令 youtube-dl https://....m3u8" 即可。 - azizj
1
还有,这对私人视频有效吗? - azizj
2
@AzizJaved,就像那样。我还没有在私人视频上测试过它,但是如果您可以看到它们所在的页面,那么它们的工作方式与公共视频完全相同。重要的是您在浏览器上看到的内容:如果您可以看到它,您就可以复制它。简单! - Gwyneth Llewelyn
你们想要我写一篇关于下载加密的HLS视频的文章吗?它基本上就是第三步,但使用FFmpeg来解密和合并ts分段。 - Firsh - justifiedgrid.com
youtube-dl 把下载完成的文件放在哪里? - 2540625

24

我已经在其他网站上发布过这篇内容,现在与stackoverflow的各位分享一下。

  1. 在Firefox浏览器上安装Video DownloadHelper扩展程序。
  2. 启用DownloadHelper后,导航到包含您想要下载的视频的网页。
  3. 一旦视频开始播放,点击DownloadHelper图标。它会显示当前视频提供的所有文件格式列表。
  4. 滚动到您想要下载的文件格式处
  5. 在右侧,您会看到一个箭头
  6. 点击该箭头以获取有关当前视频和选定格式的更多信息
  7. 从该箭头末尾显示的窗口中,向下滚动并选择“详情”
  8. 现在,您已经获得了有关当前视频和选定格式的所有详细信息。 它类似于这个样子。

单击“详情”⊗
_needsAggregate _needsCoapp actions bitrate chunked descrPrefix durationFloat extension frameId fromCache group
hls id isPrivate length masterManifest mediaManifest originalId referrer size status title topUrl url urlFilename

  1. 现在,查看Hit Details中的referrer的具体信息。那就是您想要的URL。将其复制并粘贴到您喜欢的下载器上。

8
当你收到一个带有 m3u8 的 URL 后,这是如何下载的——只需运行 ffmpeg -i "http://example.com/video_url.m3u8" -c copy -bsf:a aac_adtstoasc "output.mp4"(显然需要安装它)。 - godblessstrawberry
1
@godblessstrawberry 谢谢!你应该把这个发表为一个答案。 - Ryan
您好,这个不适用于events.on24,但它是一个很棒的扩展,帮助了我很多。 - André M. Faria
1
@godblessstrawberry,我在Chrome浏览器的“开发者工具”中的“网络”选项卡中没有找到任何m3u8扩展名的文件。你能否建议一下问题出在哪里?谢谢。 - Kamlesh
@Kamlesh,也许这可以帮助您 https://dev59.com/N1gQ5IYBdhLWcg3wWCrP#55071769 - godblessstrawberry
谢谢 @godblessstrawberry,我已经尝试过这个解决方案,但还没有解决我的问题。再次感谢。 - Kamlesh

0
如果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)

你甚至可以在一个 Web 服务器上运行它,使用请求和查询字符串:?manifest=[清单 URL]

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接