python拼接大量ts文件_Python爬取.ts文件,合并为mp4

目标:爬影视网站ts文件到本地,合并成mp4文件

下载ts文件

本着不重复造轮子的精神(好吧其实是我懒),想用迅雷批量下载爬取,但是迅雷提供的通配符过于简单无法构造URL,只能自己写脚本

如下:

# -*- coding: utf-8 -*-

import os

import requests

from multiprocessing import Pool

OVER_INDEX = 1600

L = 6

def download(url, n):

try:

r = requests.get(url)

if r.status_code != 200:

print("Requests Failed Code:{},Msg:{}".format(r.status_code, r.text))

print("{}.ts DownLoading...".format(n))

with open("./video/{}.ts".format(n), "wb") as f:

f.write(r.content)

print("{}.ts DownLoad Over...".format(n))

except Exception as e:

print(e)

if __name__ == '__main__':

po = Pool(100)

for i in range(OVER_INDEX):

distance = L - len(str(i))

n = "{}{}".format("0" * distance, i) if distance != 0 else i

url = "https://youku.cdn7-okzy.com/20200204/16986_7277c4b6/1000k/hls/ac79fd06c1b{}.ts".format(n)

po.apply_async(download, args=(url, n))

po.close()

po.join()

print("Over File DownLoad...")

异常

爬取二进制文件使用

r.content()

多进程池爬取后期表现为,顺序执行(跟单进程无异)

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}

查看发现 TIME_WAIT 79,查看监视器,并不是网络资源耗尽,查看multiprocessing发现,猜想池中维持指定个数进程,一个任务结束才会执行下一个任务,如果达到平衡状态,一段时间内进程池内只有一个空位,那么表现就会想像同步执行。尝试扩容进程池改,运行正常

po = Pool(100)

爬取文件结束,开始合并

因为是Mac环境,无法使用Win自带copy命令,各脚本不是失效就是报错,软件也寥寥无几

经查文档,采取如下方案

安装 FFmepg

brew install ffmpeg

各种库一堆装,忘记了换源,下载编译了好几小时,还好没报错。

合并

ffmpeg -f concat -i file_list.txt -c copy output.mp4

其中file_list为如下格式文本文件

file 'input1.ts'

file 'input2.ts'

file 'input3.ts'

采用脚本生成

filePath = "/Users/ls/project/DownVideo/video"

file_list=sorted(os.listdir(filePath))

with open("./video/file_list.txt","w+") as f:

for file in file_list:

f.write("file '{}'\n".format(file))

结束

到这里倒腾结束了,写脚本没有花太多时间,主要查找合并ts到mp4的办法,如果是win copy是真的简单,格式工厂这类软件也多,但在Mac下就要自己动手丰衣足食,各有各的好处。后面可以利用tqbm扩展进度条,和利用retry增加爬取异常时重试机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android学习笔记之ProgressDialog的使用

在很多PC软件或手机软件中,我们都会看见 “加载中...” 类似的对话框,当然,在android应用程序中也是如此。如果我们想在android应用程序中使用这样的效果,那么就需要用到ProgressDialog。首先,我们来看一下ProgressDia…

asterisk 互联问题

asterisk A 和asterisk B互联。 A下面有账户1001,B下面有账户2001 当1001呼叫2001时,B的sip.conf里不能有1001。 当2001呼叫1001时,A的sip.conf里不能有2001。 否则,呼叫无法呼叫成功。 下面为截图 实际和在振铃时&#xff0…

清除python shell中的内容_如何使用python脚本定时清空文件内容?

我们一直在对大家强调关于python脚本的使用,但是有部分同学提出疑问,就是关于上期跟大家说的shell脚本没有实质性的使用效果,如果在实际应用里,要怎么使用这个脚本,它又能实现什么效果,其实针对这个内容&am…

ACCESS中不支持left join解决方案

今天在做基于 access数据库项目中,做外连接时,发现Access不支持两个以上的 left join 在网上查一下,有哥们说每个 left join 要加 () 在修改之前(不能执行,ms sql 里执行以通过) select table1.fildes1, table1.fildes2,table2.fildes1, table2.fildes2,table3.fildes…

docker mysql主从_使用docker 实现MySQL主从同步/读写分离

1. 利用 docker 实现 mysql 主从同步 / 读写分离为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个。最近重构论坛,想来改成主从吧。担心失误,就先拿 docker 练练手。通过本文实际你会操作到。mysql 的主从同步…

Linux中的EAGAIN含义

在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,…

mysql sys 数据库_mysql sys 数据库

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

python get方法请求参数_如何解决TypeError get()在使用get方法的Python请求中恰好接受2个参数(给定3个)...

在Python中使用Request对象时出现错误.下面是我的代码.class APIDOC(Document):def request_api(self):method_type self.method_typeapi self.apiparameters self.parameterssession_object requests.session()self.get_login(session_object)if method_type "POST&…

getsockname与getpeername

getsockname与getpeername是返回套接口关联的本地协议地址和远程协议地址。 int getsockname(int sockfd, struct sockaddr * localaddr, socken_t * addrlen); int getpeername(int sockfd, struct sockaddr * peeraddr, socken_t * addrlen); 返回0表示成功,返回1…

KingPaper初探ThinkPHP3.1.2之目录部署(二)

在我们使用Thinkphp搭建项目时,目录部署是必不可少的一个环节接下来我们来学习以下目录部署在APP目录下面现在项目目录下所拥有的文件 ThinkPHP目录 存放thinkphp框架系统目录Home 我们创建的应用目录index.php我们的入口文件 我们还需要创建Public 网站所有的公共…

mysql函数match_Mysql全文搜索match…against的用法 | 学步园

全文检索在 MySQL 中就是一个 FULLTEXT 类型索引。FULLTEXT索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在CHAR、 VARCHAR 或 TEXT 列上创建。对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中&#x…

华为手机可以安装python吗_何安装python2.6

由于机器上的python 版本比较高,需要安装一个低版本的python具体执行步骤:1. 使用如下命令下载到2.6版本wget http://www.python.org/ftp/python/2.6/Python-2.6.tgz2. 解压pythontar xzf Python-2.6.tgzcd Python-2.63. 编译安装python./configure --pr…

Linux串口编程

.串口概述 常见数据通信方式:并行通信,串行通信 UART的主要操作: >数据发送及接受 >产生中断 >产生波特率 >Loopback模式 >红外模式 >自动流控模式 串口参数的配置主要包括:波特率、数据位、停止位、流控协议…

[转]如何在.NET MVC中使用jQuery并返回JSON数据

本文转自:http://blog.sina.com.cn/s/blog_48e42dc90100xp1p.html 二、开始实践 - jQuery端 假设我们要从服务器端获取一个文章列表,并把文章条目显示在页面中,而加载的过程要用ajax实现,即实现异步加载。那么我们先来完成jquery向…

mysql查当前用户的的命令_mysql命令大全用户管理相关命令

grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。grant select on testdb.* to common_user’%’grant insert on testdb.* to common_user’%’grant update on testdb.* to common_user’%’grant delete on testdb.* to common_user’%’或…

ud分区删除工具_硬盘分区GPT分区怎么转MBR呢?硬盘分区GPT分区转MBR教程

很多用户的电脑预装的是win10系统,想要重装成win7系统。不过新电脑一般都是GPT分区,想要把win10重装成win7,首先需要将GPT分区转MBR。那么,硬盘分区GPT分区怎么转MBR呢?下面就让小编为大家带来硬盘分区GPT分区转MBR教程。提示:单…

串口

1. 5350串口可以设置阻塞模式,3352只能是非阻塞模式 2. termios结构体为全局变量或局部变量,5350分别为阻塞或非阻塞 3. termios结构体在使用前必须清0,否则会出现有时收不到数据的情况 4. termios结构体必须被设置,否则会出现发送…

python中的ix是啥_详谈Pandas中iloc和loc以及ix的区别

Pandas库中有iloc和loc以及ix可以用来索引数据,抽取数据。但是方法一多也容易造成混淆。下面将一一来结合代码说清其中的区别。1. iloc和loc的区别:iloc主要使用数字来索引数据,而不能使用字符型的标签来索引数据。而loc则刚好相反&#xff0…

mysql 结构体_mysql模块使用结构体生成数据库表,不识别long类型

windows环境:windows10,vs2017,编译器最新,支持c17.问题描述:例如结构体:struct test_create_table{//__int64 id; //可以long id; //不可以,编译报错string name;};REFLECTION(test_create_tab…

使用Preference保存设置

Android中有四种持久化数据的方法:SQLite数据库、文件存储、Preference、ContentProvider。 四种方法各有专攻,而其中Preference是以类似Map的键值对形式存储的,最适合用来保存用户个人设置之类的信息。 可以用一个xml文件来配置一个设置界面…