论如何下载一个在线的m3u8文件到本地成为一个mp4!

开发 开发工具
现在比较常见的视频流媒体,大部分都是 m3u8 格式的,而对于 m3u8 格式的视频而言,如果你下载过,你会发现它就是一个文本文件,大概也就只有几十 kb,从磁盘大小来看,应该也知道它并不是一个直接的视频文件。

[[210882]]

一、前言

现在比较常见的视频流媒体,大部分都是 m3u8 格式的,而对于 m3u8 格式的视频而言,如果你下载过,你会发现它就是一个文本文件,大概也就只有几十 kb,从磁盘大小来看,应该也知道它并不是一个直接的视频文件。

而假如我们想要下载对应的视频文件,直接下载 m3u8,当然是达不到目的的,那么本文就来说说,如何直接下载一个网上的 m3u8 文件,保存成一个比较常规的 mp4 文件。

这个在 Windows 下,应该是有现成的工具可以完成,但是 Mac 就没有了,我也没试过 Windows 的工具,有需要自行搜索。

二、下载一个 m3u8

2.1 什么是 m3u8

说到 m3u8 就要先说说 HLS(HTTP Live Streaming)。HLS 是 Apple 公司针对 iPhone、iPod、iTouch 等移动设备,而研发的基于 HTTP 协议的流媒体解决方案。在 HLS 技术中,Web 服务器可以向客户端提供接近实时的音视频流,但是它又是使用的标准的 HTTP 协议。所以基本上,比较大型的点播直播类服务,都是基于 HLS 的。

而该技术的原理,就是将视频文件或者视频流,进行切片(ts文件),并建立索引文件(m3u8),它支持的视频流编码为 H.264,音频流编码为 AAC。

简单来说,基于 HLS 的视频流,会将完整的视频,切割成一个个比较小的视频片段(ts 文件),然后根据协议组合成一个 m3u8 文件。这些比较小的 ts 文件,是可以单独播放的。而视频播放器,拿到 m3u8 文件之后,根据对其内 ts 片段的索引,连续播放不同的视频片段,来达到流畅的播放效果。

2.2 下载的 m3u8 文件

说这些概念都没用,我们来看两个真实的被下载的 m3u8 文件。

这种 m3u8 文件就还是比较清晰的,能看到它一个个的片段。但是需要注意的是,这里的片段,全部是基于域名的相对地址,也就是说,这样一个 m3u8 文件,你丢到播放器里,是无法播放的,但是如果你记录了原始下载这个 m3u8 的链接,它在播放器里是可以正常播放的。

当然,如果你修改这个 m3u8 文件,将它相对路径拼接上域名地址,也是可以达到播放的效果的。

再来看看另外一种 m3u8 文件,它其内的 ts 片段,都是完整地址。

像这种具有完整地址的 ts 片段,哪怕你将它保存成一个本地的文件,播放器依然是可以直接播放的,不过这里本质上依然是在在线播放。

这两中 m3u8 文件,虽然有细微的差别,但是它们都是基于标准的协议。

简单总结一下:

  1. m3u8 不是视频内容的文件,它占用的磁盘空间非常的小。
  2. m3u8 文件,如果其内的 ts 片段,是完整地址,则可以保存后播放,否者只能在线播放。
  3. 播放器播放 m3u8 文件的时候,实际上,还是在线从线上获取的视频流进行播放,所以是存在失效的情况的。

暂时知道这三点就可以了,接下来我们再看如何将一个 m3u8 文件,下载成一个 mp4 视频文件。

三、ffmpeg

好了,不卖关子了,这里下载 m3u8 会需要使用 ffmpeg。

ffmpeg 是一套可以用来记录、转换音视频,并将其转化为流的开源程序,采用 LGPL 或 GPL 协议许可证书,很多大型的音视频软件,内部都是基于 ffmpeg 的。不了解不要紧,总之知道它对操作 ffmpeg 非常的方便。

如果本机上没有,就需要安装了。在 Mac 下,使用 homebrew 下载 ffmpeg 非常的方便。

  1. brew install ffmpeg 

等待安装成功的提示就好了。

如果已经安装的,***也使用 brew 命令确认一下,有以下输出,表示没问题。

工具配置没什么好说的,没安装的可以借助搜索引擎。

配置好 ffmpeg 的环境之后,只需要一行命令,就可以自动下载一个远端的 m3u8 文件,并且以一个 mp4 格式保存。

  1. ffmpeg -i "m3u8_file_uri" "save_video.mp4" 

到此,如果 m3u8 的链接正确可播放,就会开始下载,等待下载完成就可以了,最终会在指定目录下,保存 save_video.mp4 文件,它就是最终我们下载的离线视频文件。

四、you-get

大部分情况下,我们没办法直接获取到 m3u8 的链接,一般通过浏览器的调试工具,或者抓包的方式来获取。

而如果我们只是需要下载一些常见的视频网站的视频的话,Github 上,还有一个开源库,soimort/you-get ,就可以解决你的需求。

它只需要传递一个视频的地址,就会全自动下载。它的原理是去解析视频网站,拿到真实的播放地址,进行下载。而且例如 YouTube 等视频网站,如果有带有字母,能识别的话也会自动识别一同下载,最终以 SubRip 格式保存字母。

而 you-get 依赖 Python 和 ffmpeg 的,所以要提前安装它们。

如果你已经配置好 Pyhone3 的环境,安装 you-get 非常的简单。

  1. pip3 install you-get 

安装之后,就可以通过 you-get 命令进行下载了。

显示的信息还是很完整的,而且有标准的下载进度。跟多细节,可以直接看 Github 上的文档。

  1. you-get:  
  2. https://github.com/soimort/you-get 

如果是比较知名的视频网站,还是推荐使用 you-get ,它本身支持的网站也很多(文档上有支持的标识),基本上做到了一键下载,支持的网站太多了,这里就不一一截图了,基本上国内外的大点的视频网站都有,不过具体哪些能下载,就要具体问题具体分析了。

【本文为51CTO专栏作者“张旸”的原创稿件,转载请通过微信公众号联系作者获取授权】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2022-10-28 21:11:52

m3u8网络

2011-09-06 16:42:30

FFmpegUbuntu

2011-06-17 11:35:09

夏普复印机

2015-05-13 14:06:03

程序员糟糕的程序员

2009-07-02 09:42:34

JSP程序员

2010-12-27 09:24:45

JSP程序员

2015-06-25 19:23:03

JavaScript程序员

2015-08-24 09:02:49

前端工程师

2015-06-25 09:53:13

JavaScript程序员

2011-06-13 20:44:06

SEO

2015-08-17 10:32:06

前端工程师优秀

2009-01-11 09:52:14

Windows 7微软补丁

2015-06-25 09:32:55

JavaScript程序员

2022-02-10 07:03:32

流量应用架构数据交换

2014-02-27 09:39:30

PHP技巧

2012-11-20 09:33:02

2015-04-30 10:51:37

程序员高效快乐

2015-04-30 08:41:04

程序员高效健康

2010-08-24 08:58:42

开发者

2013-07-18 09:58:18

C++程序员
点赞
收藏

51CTO技术栈公众号