python爬取m3u8格式的视频,python在线播放m3u8

  python爬取m3u8格式的视频,python在线播放m3u8

  1.机会是朋友最近给我发了个小电影

  地址是3359xxxxx

  X.m3u8我直接用微信打开就可以玩,但是用edge打开之后只能直接跳转到下载连接,下载m3u8文件。

  首先,我们简单说明一下m3u8的视频格式是什么。

  根据维基百科的解释,

  M3U8是M3U的Unicode版本,由UTF-8编码。文件“M3U”和“M3U8”是Apple使用的HTTPS (HLS)协议格式的基础,可以在iPhone和Macbook等设备上播放。

  如果用Visual Studio代码或者其他编辑器打开m3u8文件,你会发现它其实是一个utf-8编码的播放列表。

  用播放器播放的时候,这些地址的视频片段其实都是在加载的。我们直接访问的时候也可以访问这些链接。然而,它看起来并不舒服。我们习惯看MP4的完整视频。然后,我希望将它保存在本地NAS中。那样的话,就不能再生很久吗?

  2.为了方便,我先下载了优雅的冷风m3u8下载程序,但是免费的东西总是有局限性的。虽然这些下载工具的UI制作的很精美,但是在尝试了其中的一些之后,发现完全无法使用。其中一人成功下载了每个片段的文件。然后在合并的时候,明明合并失败了,但是之前下载的文件都被删除了。

  不然自己体会吧。

  只是一个小函数,对性能要求不高,所以决定用python快速解决。

  突然,我在pypi上发现了一个很棒的图书馆。

  import m 3 u8 _ to _ MP4 m3 u8 _ to _ MP4 . download( http://视频server.com/playlist.m3 u8)、tmpdir=/tmp/m3U8)

  根据提示,您可以下载只有两种语言的视频文件,并使用ffmpeg将其打包成Mp4文件。这个包必须首先在计算机上配置ffmpeg。这意味着您必须运行“ffmpeg -version”命令并生成结果。

  于是我兴奋地试了一下,结果很失望。果然轮子一定是自己做的。

  3.造轮子造轮子不是从种树开始的。虽然有方便的工具,但是我们使用的Pypi中名为m3u8的库可以立即解析m3u8文件的内容,同时还使用了名为pycryptodom的库的AES解密。(其实在这个案例中并没有用到。

  # encoding=utf-8 import m3 u8 importrequestsimportdatetimeimportsfromcrypto . cipher importesfromcrypomportrandommportglob seewebsitechangeheaders={ user-agent : Mozilla/5.0(windows nt 10.0;WOW64 ) appleWebKit/537.36(khtml,像壁虎一样)chrome/86 . 0 . 4240 . 198 safari/537.36 } def download(ts _ u URLs,kys=[]:ifno tos . path . exists(download _ path):OS . mkdir(download _ path)decrypt=True iflen)keys MMS decrypt=false foriinrange(len(ts _ URLs)(3360 ts _ URL=ts _ URLs(I)))))filets。format)I)if decoration . read(AES . block _ size)cryptor=AES . new)key . encode)、AES。MODE_CBC ) withopen ) ts_path wb )作为文件:forchunkinresponse。ITER内容(块大小=1024 ) 30 te(块)结束=日期时间.日期时间.现在)。replace)微秒=0) print)总时间:% s source _ path,deleted Rb )asfr:fw . write(fr . read))print(f(r { file }合并!Total:{len(files)} ,end= )if delete:OS . remove(file)if _ name _= _ main _ 3360 URL= tell video . keys)merge _ to _ MP4))结果。MP4), tmp )将步骤分成两部分,)

  1) ts文件下载ts文件下载比较简单。根据m3u8数据库解析的地址,我们直接发出请求request得到相应的响应。此时,如果m3u8解析的文件包含密钥,则该文件用密钥值进行AES加密,响应必须解密保存。如果没有,可以直接保存。

  在m3u8文件的m3u8库分析中,如果文件没有密钥,由于得到的keys=[None]的长度为1,无法判断密钥长度是否为0来确定是否需要解码。

  2)合并到Mp4文件中

  合并的步骤比较简单,就是依次读取ts,写入同一个文件。这需要注意。Ts文件是按照一定的顺序保存的,合并的时候也会用到这个顺序。不然会觉得插错了。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: