背景
在爬取視頻時(shí)偶爾會(huì)遇見m3u8格式的視頻鏈接,視頻下載后為多個(gè)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)
下載完成后是多個(gè)ts文件,播放器也是可以播放的,可以將多個(gè)ts文件合成一個(gè)mp4文件。
Linux下合并ts文件
在windows下可以直接使用copy,將ts合成mp4,但如果要部署到服務(wù)器就不行了,下面介紹使用ffmpeg進(jìn)行合并(windows和Linux下都可使用),如何下載安裝請(qǐng)自行搜索。
#ts文件絕對(duì)路徑
ts_path = xxx/xxx
#讀取ts文件夾下所有的ts文件
path_list = os.listdir(ts_path)
#對(duì)文件進(jìn)行排序
path_list.sort()
#將排序后的ts的絕對(duì)路徑放入列表中
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文件已經(jīng)刪除')
except:
print('ts文件刪除失敗')