爬取时间2022/8/19
在上上篇示例中,大量乱序ts文件合并成mp4文件虽然示范了如何合并乱序文件,
由于os模块合并文件有上限(650左右),对于动辄几千ts文件的电影来说,如果不采用循环太费时间.
本文示范如何利用循环合并文件,再也不用每次手动修改合并程序.
还是以结合下载大量ts文件为例:
直接找一个视频网站,找到爬取目标,以下代码直接忽略拿m3u8文件链接的过程,直接从下载到m3u8文件开始
代码1-25行
代码26-52行
代码53-77行
不断调试后的运行结果:
最终成功合成157分钟的视频文件
代码中merge合并函数合并4430个ts文件所花的时间为5秒
合并的操作在代码第18-44行,也就是定义的marge函数下
思路:
1>>>读取m3u8文件(因为里面的内容都是有序的),取出做成列表
2>>>把有序的文件名列表(4429个元素)进行切片操作,
3>>>每次切出600个文件,去合并
4>>>把步骤3合并的片段mp4文件合并成一部整体的电影文件
5>>>打开最终合并的文件检查有无错误
m3u8文件,内含4439个ts文件下载链接
------------------------------------------
本次下载4429个ts文件过程中遇到的问题:
最开始线程池设置的是39个线程,运行过程中,下载2000左右ts文件后就变成单程下载了.只能停止程序运行.
经后面调试过程中,确定该网站是有限制的...只能是另起排查文件程序....
经历此次事件,在之后利用异步协程或者多线程下载电影;小说时(特征是文件多,乱序文件,一旦中途出错,如网站限制响应等,后期没法合并,重新下载耽误时间不说,还大概率遇到同样的问题),
>>>非常有必要在下载过程中设置检测(将要下载的文件本地是否存在,如果存在就跳过下载,如果不存在,就下载下来),设置这个检测代码不耗时间,0.0几秒程序就能运行出结果
总结:
1>对于新手来说,代码最开始奔着要达到的目标就行了,不需要代码排版有多好看,也不需要考虑程序运行过程中可能会遇到的错误
类似"先生存,再求发展",
2>达到目标后,思考程序是否够自动化?能否再减少人的时间?奔着这个目的去完善代码.
3>不要怕2繁琐,精益求精,才能不断提升,而不是成为"固化的打字机器".
------------------------
结尾:如需要源代码或者电影文件的可以私信,就不留阿里网盘的分享了.
分辨率1920*1080
,