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

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

一、前言

现在比较常见的视频流媒体,大部分都是 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专栏
相关推荐

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 09:53:13

JavaScript程序员

2015-08-17 10:32:06

前端工程师优秀

2011-06-13 20:44:06

SEO

2015-08-24 09:02:49

前端工程师

2015-06-25 19:23:03

JavaScript程序员

2015-06-25 09:32:55

JavaScript程序员

2022-02-10 07:03:32

流量应用架构数据交换

2009-01-11 09:52:14

Windows 7微软补丁

2014-02-27 09:39:30

PHP技巧

2010-08-24 08:58:42

开发者

2015-04-30 08:41:04

程序员高效健康

2015-04-30 10:51:37

程序员高效快乐

2011-04-07 12:52:13

项目经理项目

2013-07-18 09:58:18

C++程序员

2017-10-18 15:19:23

架构师技术开发
点赞
收藏

51CTO技术栈公众号