【Python】用python合并多段视频,速度飞起来~

一、背景

昨天在网上看视频,奈何网速不太好,总是卡顿,就想下载下来慢慢看,结果搜遍众多网站没有能下载的资源,一气之下就想既然不给下载那我给抓下来吧,于是2个G的视频,1800多个ts文件被我爬了下来。

虽然很多播放器也能自动无缝连接的播放,但是强迫症让我想把这1800个视频文件合并成一个,于是我去找了找合并视频的软件,要么画质差,要么卡,甚至在我拖视频进入的时候直接卡死(jianyin)

然后我就思考为啥不直接用Python合并呢?

因为是初学者,没有考虑到可以这样操作,突然来了灵感,于是研究一下,没想到带给我了大大的惊喜,1800+ts文件,不用1分钟就合并完成!!!

这个效率简直太帅了!

好东西当然要分享啦~~

二、源码在这里

先把源码直接放出来,看懂的就不用往下看了,拿去就直接用吧,后面我给注释一下~

def merge_ts(self):
    print(">>>>>>开始合并视频!<<<<<<")
    ts_files = [file for file in os.listdir(self.files_path) if file.endswith('.ts')]
    sorted_ts_files = natsorted(ts_files)
    with open(f'{self.files_path}/merge_video.mp4', 'wb') as output_file:
        for filename in sorted_ts_files:
            with open(os.path.join(self.files_path, filename), 'rb') as input_file:
                output_file.write(input_file.read())
    print(">>>>>>视频合并完成!<<<<<<")

接下来逐句说明一下:

# 遍历目录下 .ts 结尾的所有文件,并将这些文件存档到列表 ts_files
ts_files = [file for file in os.listdir(self.files_path) if file.endswith('.ts')]

# 确保文件按自然排序:1,2,3...10,11,12..20,21,22,23...30,31....
# 否则排序可能失败,他会这样子:1,10,11,...19,2,20,21...
# 排序失败会导致合并的视频乱七八糟
# 确保你已经安装了natsort库,如果没有安装,可以通过pip install natsort进行安装。
sorted_ts_files = natsorted(ts_files)

# 打开一个新的目标文件"merge_video.mp4",准备写入合并后的视频内容。使用'wb'模式以二进制方式打开文件。
with open(f'{self.files_path}/merge_video.mp4', 'wb') as output_file:
    # 遍历经过排序后的视频文件列表
    for filename in sorted_ts_files:

        # 打开当前要合并的视频文件,使用'rb'模式以二进制方式读取文件内容
        with open(os.path.join(self.files_path, filename), 'rb') as input_file:

            # 将当前打开的视频文件的内容写入到目标文件中
            output_file.write(input_file.read())

# 最终,所有选定目录下的视频文件将按照自然顺序合并到一个名为"merge_video.mp4"的新文件中。

三、总结

合并多个视频的方法我尝试了几个网页看到的方法,合并运行过程中,总是出现乱码提示(中间几个代码本来有记录的,最后被我给删掉了,就懒得去回忆了,就记住有用的就行)。

最终找到这一个方法,用with open的方式写入,感觉很稳定,而且没有乱码提示,是否有视频数上限尚未可知。我测试下来,1800多个文件合并到一个文件,用了不到30秒,比市面上的视频合并软件效率高的不是一星半点!

真的很惊喜~

好东西要分享,希望你们也用得上~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值