mac或linux环境下用python爬取m3u8格式视频并将其ts文件合成转存为mp4文件

需求:有时看到网上的视频并不是引用mp4链接播放的,而是src=’'blob:xxx"这种引用,无法直接用爬虫直接爬取

<video  ... src="blob:https://www.finger66.com/4b1aa32e-602c-4211-a557-87f7adccdb5e"></video>

分析真实的资源:F12打开调试工具,点击播放并查看NetWork下访问的链接,会发现有个会访问xxx.m3u8的m3u8文件格式的地址,以及在播放的过程中会陆续访问xxx.ts,而xxx.m3u8接口返回的就是ts文件参数列表,ts文件就是m3u8格式的视频资源分片(每个ts文件可以单独用播放器播放),网页播放的内容就是按照顺序从ts读取的,而这些ts文件可以通过合成变为一个完整的视频资源

爬取资源思路:

1.先找到*.m3u8接口,并爬取里面的ts文件参数列表
2.通过*.ts链接下载所有ts文件到本地
3.调用ffmpeg将本地的ts文件合成mp4文件

本次测试的环境配置

系统: mac OS
爬虫语言:python
视频处理工具:ffmpeg (可以直接通过命令brew install ffmpeg安装)

关键代码

下载ts文件到本地

#视频页面vedioSRC = 'https://www.finger66.com/mobile/post/5109165?channel=wechatSession&from=singlemessage&isappinstalled=0'
#放置ts文件所在目录
tsPath = "mp4/"
#获取ts文件参数
hostname = 'https://media.finger66.com'
tsParamUrl = hostname + '/posts/84222300000/MTU1NjEwNDU0ODI2Nw==.mp4.m3u8'
import urllib.request
tsParamData = urllib.request.urlopen(tsParamUrl).read().decode('utf-8')
# print(tsParamData)
import re
pat = '/(.*?).ts'
tsParamArr = re.compile(pat).findall(tsParamData)
#爬取ts文件到本地
for n in range(0,len(tsParamArr)):
    strArr = tsParamArr[n].split('/')
    localTSFileName = strArr[len(strArr)-1]+'.ts'
    tsLink = hostname + '/' + tsParamArr[n] + '.ts'
    urllib.request.urlretrieve(tsLink, tsPath+localTSFileName )
    # print(tsLink)

将下载到本地的ts文件合成mp4文件


import os
#获取所有的ts文件
path_list = os.listdir(tsPath)

#对文件进行排序并将排序后的ts文件路径放入列表中
path_list.sort()
li = [os.path.join(tsPath,filename) for filename in path_list]
#将ts路径并合成一个字符参数
tsfiles = '|'.join(li)

#print(tsfiles)

#指定输出文件名称
saveMp4file = tsPath + 'target.mp4'

#调取系统命令使用ffmpeg将ts合成mp4文件
cmd = 'ffmpeg -i "concat:%s" -acodec copy -vcodec copy -absf aac_adtstoasc %s'%    (tsfiles,saveMp4file)
os.system(cmd)

完整代码:

在mac上将上面两段代码合二为一就可以成功运行
源码下载地址https://download.csdn.net/download/jo_andy/11192083

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值