您现在的位置是:首页 >技术交流 >Python - 批量下载ts文件并合并为mp4网站首页技术交流

Python - 批量下载ts文件并合并为mp4

Gosick_Geass_Gate 2024-07-03 00:01:02
简介Python - 批量下载ts文件并合并为mp4

(一)ts文件下载

网页文件下载其实都可以通过requests.get以文件流的形式获取,并以字节的形式写入本地文件即可。
代码如下:

import os
import requests
def download(url, filenames, dirname):
	session = requests.Session()
	for filename in filenames:
		print(u"downloading: %s" % filename)
		r = session.get(url + filename, stream=True).iter_content(chunk_size=1024 * 1024)
		filepath = os.path.join(dirname, filename)
		print(u"saving: %s" % filename)
		with open(filepath, 'wb') as f:
			for chunk in r:
				chunk and f.write(chunk)
		print(u"finished: %s" % filename)

我发现在保存这一步会存在性能卡点(打印saving之后等了很久都没有生成文件),暂时没有想到很好的优化方法,不过下载这一步其实可以借用迅雷来批量处理,步骤如下:

  1. 点击新建。
  2. 切换为批量任务,这样就可以使用通配符去批量下载文件了。
    在这里插入图片描述
    在这里插入图片描述

(二)ts文件合并为mp4

这个需要借助ffmpeg工具去实现。Windows平台可以直接到官网下载压缩包,解压之后把bin目录加入到环境变量中即可。
在这里插入图片描述
在这里插入图片描述
最后使用ffmpeg合并ts文件的代码如下:

import os
def merge(filenames, dirname, video='video.mp4'):
	# 先用一个文件保存所有的文件路径(格式:file '***.ts')
	path = os.path.join(dirname, 'path.txt')
	with open(path, 'w+') as f:
		for filename in filenames:
			f.write("file '%s'
" % os.path.join(filename))
	
	os.chdir(dirname)
	os.system('ffmpeg -f concat -safe 0 -y -i %s -c copy -strict -2 %s' % (path, os.path.join(dirname, video)))

【参考资料】
[1] python中将已有链接的视频进行下载
[2] 小技巧:大幅度提高requests的访问速度
[3] 下载网页视频并自动合成视频
[4] 结合python使用ffmpeg将批量ts文件合成mp4。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。