如何下载m3u8视频

admin 2023年12月20日09:17:35评论31 views字数 1411阅读4分42秒阅读模式

写在前面

最近网上冲浪时,看到些好玩的视频想下载,然后发现是m3u8格式的,于是便记录一下这种比较流行的视频格式的下载。

M3U8

由于音视频这种多媒体文件本身很大,单次完成加载很不现实,所以需要把视频分割成不同的小段来多次加载,(也就是缓冲)。这种技术用到了HLS,是一种流媒体传输协议和技术而M3U8文件描述了HLS流的结构。

下面是一个M3U8的文件示例:

#EXTM3U#EXT-X-VERSION:3#EXT-X-TARGETDURATION:10#EXT-X-MEDIA-SEQUENCE:0#EXTINF:10.0,http://test.com/video_1.ts#EXTINF:10.0,http://test.com/video_2.ts#EXTINF:10.0,http://test.com/video_3.ts...
  • EXTM3U: 是m3u8文件声明

  • EXT-X-VERSION: m3u8文件版本

  • EXT-X-TARGETDURATION: 指定每个分段视频的最大持续时间(以秒为单位)。

  • EXT-X-MEDIA-SEQUENCE: 指定第一个分段的序列号。

  • EXTINF: 指定下一个分段的持续时间和其他信息

再后面跟着的url就是分段视频的地址。

下载M3U8格式视频

那么就可以知道,要自己实现下载,只需要把所有的分段视频下载下来,然后给合并到一起就可以了。这里我用python实现个简单的demo,直接上代码

import requestsimport osimport subprocess
# 获取M3U8文件m3u8_url = "http://test.com/video.m3u8"
m3u8_response = requests.get(m3u8_url)m3u8_content = m3u8_response.text
# 下载分段视频文件segment_links = [line.strip() for line in m3u8_content.split('n') if line.startswith('http')]
for i, segment_link in enumerate(segment_links): response = requests.get(segment_link) with open(f'segment_{i}.ts', 'wb') as segment_file: segment_file.write(response.content)
# 合并分段视频文件ts_files = [f"segment_{i}.ts" for i in range(len(segment_links))]merge_command = f'ffmpeg -i "concat:{"|".join(ts_files)}" -c copy output.mp4'subprocess.call(merge_command, shell=True)
# 清理临时文件for ts_file in ts_files: os.remove(ts_file)

注释中已经写得很清楚了,并没有难度。说一下的是合并视频的时候,用到了ffmpeg这个神器,需要提前安装好这个工具。

写在最后

理论理解了之后,就不要重复造轮子了。m3u8这种技术很早之前就有了,所以早就有大佬搞好了下载工具了,github上随便一找都是。本篇文章只是简单记录一下。

 

END

 



原文始发于微信公众号(飞羽技术工坊):如何下载m3u8视频

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月20日09:17:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   如何下载m3u8视频http://cn-sec.com/archives/2318465.html

发表评论

匿名网友 填写信息