下载m3u8视频及在Linux下将ts合并为mp4格式

背景

在爬取视频时偶尔会遇见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文件删除失败')

你可能感兴趣的:(python,爬虫)