|
|
|
|
公众号矩阵
创建专栏

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

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

作者:张旸|2017-11-22 15:36

一、前言

现在比较常见的视频流媒体,大部分都是 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专栏作者“张旸”的原创稿件,转载请通过微信公众号联系作者获取授权】

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

【编辑推荐】

  1. Linux文件系统之sparse文件处理与传输
  2. 一文贯通python文件读取
  3. Paradox 的数据文件格式
  4. 给Python新手的一道面试题:如何正确读写文件
  5. 搜索那点事儿:Lucene 文件存储和读取技术详解
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢