吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16320|回复: 33
收起左侧

[其他转载] m3u8文件下载合并的一种方法

[复制链接]
炎爷123 发表于 2018-3-14 17:39
本帖最后由 炎爷123 于 2018-3-21 17:19 编辑

现在很多视频网站都把整个视频文件拆分成一个个视频流文件(ts),这些视频流文件的下载地址会放在一个文件中,通常叫做*.m3u8。
我们要想下载整个视频文件可以先把这些视频片段下载下来,然后进行拼接,合成一个大的视频文件。
最先想到的一个想法就是用迅雷的批量下载,如下图所示:

迅雷批量下载

迅雷批量下载

但是这样会存在一个问题,因为下载视频后还有进行视频的合并,所以视频的文件名必须是以一定的顺序进行排序才好合并,事实是文件名大多是乱序的,这很限制操作,你总不能一个一个去吧?

由于本人水平不佳,想了两三天才想到好的解决方法,就是用python调用aria2进行下载(其实是花了两三天才找到python调用aria2的方法,网上一直没教程,最后是去官方文档那里找到的教程,地址如下:https://aria2.github.io/manual/en/html/aria2c.html),教程中提到:

官方文档

官方文档
这是python2的用例,本人用的是python3,根据官方文档中的思路其实是给'http://localhost:6800/jsonrpc'发送一个请求,在python3中应该用requests.post()方法来实现。
但是遗憾的是,官方文档中并没有给出如何修改任务的名称,只是教了你如何新建任务。
我们知道,aria2有一个webUI的界面,http://aria2c.com/,在新建任务时通过抓包发现这样一个语句,这个语句是post的数据:

[{"jsonrpc":"2.0","method":"aria2.addUri","id":1,"params":[["http://aria2c.com/"],{"out":"12.html","split":"5","max-connection-per-server":"16","seed-ratio":"0"}]}]:


很熟悉对不对,比教程中多了这么一项"out":"12.html","split":"5","max-connection-per-server":"16","seed-ratio":"0" nice baby!
我们就加这一句就OK啦!
下面是我的代码,运行前确保你电脑安装了requests库还有aria2:

# -*- coding: utf-8 -*-
"""
Created on Wed Mar 14 15:09:14 2018

@author: Y
"""

import requests
import json

path = "" #m3u8的文件路径
file = open(path,'r')
links = []
for i in file:
    if '#' not in i:
        i = i.strip()
        links.append(i)
file.close()
length = len(str(len(links)))
n = 0
for link in links:
    n = n + 1
    if len(str(n)) < length:
        name = '0'*(length-len(str(n))) + str(n)
    else:
        name = str(n)
    jsonreq = json.dumps({'jsonrpc':'2.0', 'id':1,
               'method':'aria2.addUri',
               'params':[[link],{"out":name+".ts","split":"5","max-connection-per-server":"16","seed-ratio":"0"}]})
    c = requests.post('http://localhost:6800/jsonrpc', jsonreq)
    print(c.text)


nice baby!
老规矩,代码依然传上了我的github:https://github.com/xyy55/Python/blob/master/python3/download_video.py
用copy /b方法合并ts文件时间会错乱,目前还没有解决的方法,有经验的可以传授一下。

免费评分

参与人数 4吾爱币 +3 热心值 +4 收起 理由
123012a + 1 + 1 这种合并方法有问题,如果序列是001-100 中间的001 011会成为第二个被合并.
JACKLI71 + 1 谢谢@Thanks!
孤独的明月 + 1 + 1 我很赞同!
科目呵 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

逍遥一仙 发表于 2018-3-14 21:11
LostVic 发表于 2018-3-14 20:00
见过一些 m3u8 文件里面放的不是绝对地址,貌似还要自己加前缀?

相对地址的话,需要改成绝对地址,或者我的工具添加下域名参数就可以了
 楼主| 炎爷123 发表于 2018-3-14 19:42
chinafei1 发表于 2018-3-14 19:36
感谢分享,学习了,但是怎么用呢,我不会编程

不会编程你可以去看看逍遥一仙的帖子
wxchello 发表于 2018-3-14 17:51 来自手机
逍遥一仙 发表于 2018-3-14 17:52
本帖最后由 逍遥一仙 于 2018-3-14 18:14 编辑

我用E做的,也是调用的Aria2来下载(不过不是用的post,而是websocket)。并且支持加密TS,来试试呐
https://www.52pojie.cn/thread-675494-1-1.html

嘿,,,刚又看了眼,我说id这么眼熟呢,尴尬
孤独的明月 发表于 2018-3-14 18:05
谢谢,学习了
非常猥锁 发表于 2018-3-14 18:11
不错!!!
〇一〇 发表于 2018-3-14 18:13
终于有人说方法了,以前想下载视频碰到ts类型,都是直接放弃的
 楼主| 炎爷123 发表于 2018-3-14 18:34
逍遥一仙 发表于 2018-3-14 17:52
我用E做的,也是调用的Aria2来下载(不过不是用的post,而是websocket)。并且支持加密TS,来试试呐{:301_978 ...

哈哈!大佬,你那个迅雷是怎么调用的?
souls 发表于 2018-3-14 18:46
我直接调用IDM下载
逍遥一仙 发表于 2018-3-14 19:07
炎爷123 发表于 2018-3-14 18:34
哈哈!大佬,你那个迅雷是怎么调用的?

有模块。不过迅雷的效果不是很好,还不如aria2
chinafei1 发表于 2018-3-14 19:36
感谢分享,学习了,但是怎么用呢,我不会编程
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 05:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表