总结一下m3u8格式相关问题

烈酒焚心 提交于 2020-03-05 05:34:28

1.m3u8格式解读

本小节摘自:m3u8视频文件详解

m3u8不是一种视频格式,而是一种纯文本文件。

m3u8视频文件格式中 存放了视频的基本信息 和 分段视频的索引地址 (将一整个视频分成了时长不同的很多小段)。当播放m3u8视频时,就是按顺序下载播放索引列表的视频,从而完成一部完整视频的播放。

维基百科对m3u8的定义

M3U8: m3u8 是一种纯文本文件,采用UTF-8编码,是一种Unicode版本的m3u文件。
M3U : m3u 是一种播放多媒体列表的文件格式,可以指定一个或多个多媒体文件的位置,它的设计初衷是为了播放音频文件。比如MP3,但是越来越多的软件现在用来播放视频文件列表。
M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。
HLS :m3u 和 m3u8 文件都是苹果公司使用的HLS (HTTP Live Streaming)格式的基础,这种格式可以在iPhone和Macbook等设备播放。——HLS 点播是常见的分段 HTTP 点播,就是将视频流分成不同的片段,客户端不断的去下载该片段,由于片段之间的分段间隔时间非常短,所以看起来是一条完整的播放流

2.m3u8格式怎么播放、播放原理

(1)只有m3u8文件的【链接】时,可以浏览器插件Native HLS Playback 或者 vlc播放器播放
https://blog.csdn.net/saddyyun/article/details/85157709
没有浏览器插件Native HLS Playback时在地址框输入m3u8的链接会默认是下载那个m3u8文件,有了插件则是播放。

(2)只有m3u8【文件】时
注意不要是“.local.index.m3u8”那种,否则你就像只拷贝出个快捷方式在另一台电脑上,详见(3)。

另外,视频如果挂了那也没辙,毕竟那只是存储在服务器的文件,不让访问就访问不了了。

用文本文档形式打开如果是 非本地的*.ts目录序列,注意还有一个坑,
是“M3U8批量下载器”教我的,叫做“相对链接”
在这里插入图片描述
下面截取一段那个m3u8片段

#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:3
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-ALLOW-CACHE:YES
#EXTINF:3.000,
/amplify_video/1228050294535282694/vid/0/3000/1280x720/_x6v6S8Jhz5tpqhM.ts
#EXTINF:3.000,
/amplify_video/1228050294535282694/vid/3000/6000/1280x720/7mwaVhHeIYdjPn48.ts
#EXTINF:3.000,
/amplify_video/1228050294535282694/vid/6000/9000/1280x720/-vhJ_5vdtWcl2Yjk.ts

我发现里面的片段直接复制到地址栏写找不到,我寻思着这也能访问啊,为啥下载不了?还有啥猫腻?
于是我搜索了其中一段(如下链接),发现老外这个有个我没有的【前缀】啊!
https://superuser.com/questions/1033563/how-to-download-video-with-blob-url

在这里插入图片描述
↑于是我回来再找那个视频,发现确实有前缀,这就是“相对链接”报错的原因吧。然后我加上了标红的这段,合成了个链接

https://video.twimg.com/amplify_video/1228050294535282694/vid/6000/9000/1280x720/-vhJ_5vdtWcl2Yjk.ts

输入地址框,果然能下载了!ts单个片段也可以播放!
在这里插入图片描述

其他方式:百度一下并使用专用工具(挺多的,自己百度吧)

(3)有【m3u8文件】又有【全是*.ts文件(或者没有后缀名时)的文件夹】时
这种情况一般就是我们手机下载下来的形式,用qq浏览器和UC下载经常有这种格式,m3u8这是播放列表文件,一般只能看出几十KB大小,用普通播放器却不能正常播放,带着的文件夹貌似全是缓存却束手无策(我们保存的视频不能永远放在同一个手机上不动吧……)
直接打开

用文本编辑器打开m3u8文件(我用的是vscode),会发现几个标签和一大串地址序列,这和我们之前介绍的“索引地址”一致。

【摘自:https://www.jianshu.com/p/e97f6555a070】
标签的类型可分为五种类型:基础标签(Basic Tags),媒体片段类型标签(Media Segment Tags),媒体播放列表类型标签,主播放列表类型标签 和 播放列表类型标签。其具体内容如下所示:
基础标签(Basic Tags):可同时适用于媒体播放列表(Media Playlist)和主播放列表(Master Playlist)。具体标签如下:
EXTM3U:表明该文件是一个 m3u8 文件。每个 M3U 文件必须将该标签放置在第一行。
EXT-X-VERSION:表示 HLS 的协议版本号,该标签与流媒体的兼容性相关。该标签为全局作用域,使能整个 m3u8 文件;每个 m3u8 文件内最多只能出现一个该标签定义。如果 m3u8 文件不包含该标签,则默认为协议的第一个版本。
…………(详情请参照源链接)…………

在这里插入图片描述
我用文本方式打开m3u8发现是一串目录,估计是拷贝到电脑上由于绝对目录发生改变导致无法播放了,在vscode里用【编辑】->【替换】,将其换成现在所在的真正位置目录,然后保存,发现可以播放了!!!
在这里插入图片描述
文件夹里的【.index.m3u8】和【.local.index.m3u8】应该是对应于【网络索引】和【本地索引】,
将改过的m3u8文件无论放在哪,只要是里面索引的东西位置是对的就都能播放。(其实ts单个片段也可以播放,m3u8只是相当于一个“播放列表”,想合成一个就用二进制的方法拼接一下即可,详见后面的“已经下载好的m3u8格式怎么合并转换成其他格式”)

在这里插入图片描述
播放成功!但是是一段段的,每段就【几秒】,会按照【播放列表】顺序播放下去(上图就是【47段中的第12段在播放,文件名为11.ts的】)
想要进行合并可以往下翻到“已经下载好的m3u8格式怎么合并转换成其他格式”那一节。

3.网页上是m3u8的源怎么下载成其他格式保存

(1)M3U8 Downloader:M3U8下载器 - Chrome插件

(2)GetThemAll - Chrome插件
这个插件获取各种王爷资源十分好用,图片支持批量打包成zip,视频也能抓到源链接,遇到m3u8文件也可以进行【录制】——点击【start record】等几秒之后就会弹出保存MP4文件的提示了(注意要验一下,有时候只录制了一部分)
在这里插入图片描述

4.网页上视频是m3u8的格式怎么直接下载

(1)一般是手机uc的视频缓存,这个我就不做解释了,视频播放时有个缓存箭头,然后在“已缓存”中找到并播放,不多讲了。

(2)播放完一整段后,网络设置,查看缓存……或者f12啊啥的找呗,这段以后再补……

5.已经下载好的m3u8格式怎么合并转换成其他格式(以MP4为例)

https://jingyan.baidu.com/article/00a07f380cd30f82d128dc4f.html
其中的关键命令行是

copy /b 0+1+2+3 new.ts

新建文本,输入相应的内容,然后保存,将文本文档后缀改成bat格式。打开即可将目录下的ts文件以二进制顺序合并为new.ts文件。

根据m3u8生成内容的序列(利用原序列)

百度经验那位提供的方法是用excel制表然后合成文本,我寻思,何不直接借助m3u8文件这个“播放列表”直接生成合并文本?
┏ (゜ω゜)=☞来,说干就干。
在这里插入图片描述
↑首先打开一个m3u8文件,发现简单的查找-替换是不行的,因为每行前的标签都不一样,于是我想到了正则表达式(vscode是支持正则匹配寻找的,文本文档不行……)
感谢这位老哥:正则表达式匹配两个特殊字符中间的内容

匹配两个字符串A与B中间的字符串包含A与B: 
表达式: A.*?B(“.“表示任意字符,“?”表示匹配0个或多个) 

于是为了匹配所有“#”和“,”之间的内容,正则表达式这么写

#.*?,

执行之后贼爽,全干净了
在这里插入图片描述
然后把那个长长的前缀查找-替换成“+”
在这里插入图片描述
注意,在命令行里换行就直接算执行了,我们需要把他们首尾相接去掉换行符(记得把最开始那几个头标签删掉)
在这里插入图片描述
这样就生成了我们需要的形式,处理完复制出来,粘到命令行后面再回车即可
总结一下:去不重复的标签、去前缀、去换行符。

执行一下:
在具体文件处呼出Powershell
在这里插入图片描述
先输入cmd换成命令行,否则不管用,【命令行】和【powershell】有些差别不能当做同一个工具来用

在这里插入图片描述

然后把命令输入(复制索引时不要把回车粘上,否则会当作已经输入完毕),执行。

重命名内容后根据以往做好的列表(改文件名)
另一种方法就是将文件改名:全选,右键第一个,重命名。这样会按照当前排序顺序命名,然后用你之前做好的长列表截取需要的一段当做中间的索引也可以。

6.其他

网上的“m3u8视频下载合并工具”不一而足,在这里也不多加介绍了
其中很多工具都是基于Ffmpeg做成的:http://ffmpeg.org/

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!