背景
在爬取视频时偶尔会遇见m3u8
格式的视频链接,视频下载后为多个ts文件,下面分享如何下载m3u8
格式视频以及在Linux下将ts文件合成mp4
文件。
m3u8格式链接解析
url = xxxxx.m3u8
#获取m3u8文件的文本信息
all_content = requests.get(url=url, verify=False).text
#解析文本信息
file_line = all_content.split("\n")
if file_line[0] != "#EXTM3U":
raise BaseException(u'非M3U8的链接')
else:
unknow = True
for index, line in enumerate(file_line):
try:
if "#EXTINF" in line:
unknow = False
pd_url = 'http://v2.ricebook.com' + '/' + file_line[index + 1]
res = requests.get(pd_url, verify=False)
c_fule_name = str(file_line[index + 1]).split('/')[-1]
with open(download_path + '/' + c_fule_name, 'ab') as f:
f.write(res.content)
f.flush()
print('下载完成')
except Exception as e:
print(e)
下载完成后是多个ts文件,播放器也是可以播放的,可以将多个ts文件合成一个mp4文件。
Linux下合并ts文件
在windows下可以直接使用copy,将ts合成mp4,但如果要部署到服务器就不行了,下面介绍使用ffmpeg进行合并(windows和Linux下都可使用),如何下载安装请自行搜索。
#ts文件绝对路径
ts_path = xxx/xxx
#读取ts文件夹下所有的ts文件
path_list = os.listdir(ts_path)
#对文件进行排序
path_list.sort()
#将排序后的ts的绝对路径放入列表中
li = [os.path.join(ts_path,filename) for filename in path_list]
#类似于[001.ts|00.2ts|003.ts]
input_file = '|'.join(li)
#指定输出文件名称
output_file = ts_path + '.mp4'
#使用ffmpeg将ts合并为mp4
command = 'ffmpeg -i "concat:%s" -acodec copy -vcodec copy -absf aac_adtstoasc %s'% (input_file,output_file)
#指行命令
os.system(command)
得到mp4文件之后原来ts文件夹不需要也可以删除
def delete_ts(ts_path):
try:
shutil.rmtree(ts_path)
print('ts文件已经删除')
except:
print('ts文件删除失败')