多个视频ts文件合并
前2天接到一个需求要把多个ts文件合并。
大致思路是:先下载需要的ts文件,放到一个目录中,修改文件名保持一致,合并成一个文件。
百度了一下有很多方法:
1.简单傻瓜式:下个360浏览器用猫爪插件下ts文件,下载专门的ts合成软件直接合成(比如:TS助手3.52(含注册机).7z)。(或者下载ffmpeg,在cmd中用命令合成,不推荐)
以下方法合并文件需要改文件名
文件名如不改成如1001.ts 1002.ts这种的话,合并后时间顺序会乱,不是一个正确的视频。
2.快速的cmd
cmd是我最先想到的方法,批量改名应该最方便,奈何for的改名实在是没想出来怎么弄,如果弄出来的话是最快的,改好名后直接合并就行。
copy/b *.ts all.ts
3.python排序改名
不得已换了python,好处是简单易懂。
import os
import re
import sys
#获取路径
currentpath = r"E:\1234"#os.getcwd()
print(currentpath)
#我这个目标文件(形如abc.asd.2-34.12.ts)是要先给ts文件list排序的,不排序的话改名会有问题,这里我也不会一次性排
#序,菜鸟没办法,只好多次排序了,目的是把ts文件list按照
#1.ts...2.ts...15.ts...123.ts 这种形式排序
fileList = sorted(os.listdir(currentpath),key = lambda i:(re.findall(r'\d(?:[0-9]{1,1}\.ts)',i)))
fileList2=sorted(fileList,key=lambda i:(re.findall(r'\d(?:[0-9]{2,2}\.ts)',i)))
fileList3=sorted(fileList2,key=lambda i:(re.findall(r'\d(?:[0-9]{3,3}\.ts)',i)))
print(fileList3)
# 输出此文件夹中包含的文件名称
print("修改前:" + str(fileList3[1]))
# 得到进程当前工作目录
# 将当前工作目录修改为待修改文件夹的位置
#os.chdir(r"./neteasy_playlist_data3")
# 名称变量
num = 1000
#定义是否是.ts的方法
def is_suffix_txt(suffix: str):
if suffix == '.ts':
return True
return False
# 遍历文件夹中所有文件
for fileName in fileList3:
# # 匹配文件名正则表达式
# pat = ".+\.(ts)"
# 进行匹配
# pattern = re.findall(pat, fileName)
# print(pattern)
# 文件重新命名
name, suffix = os.path.splitext(fileName)
if is_suffix_txt(suffix):
new_name = os.path.join(currentpath, str(num)) + '.ts'
old_name = os.path.join(currentpath, fileName)
os.rename(old_name,new_name )
# 改变编号,继续下一项
num = num + 1
print("***************************************")
# 改回程序运行前的工作目录
os.chdir(currentpath)
# 刷新
sys.stdin.flush()
# 输出修改后文件夹中包含的文件名称
print("修改后:" + str(os.listdir(currentpath)[1]))
#合并1234文件夹里的ts到当前目录下,但是我试了subprocess和os都不
#会执行,我也不知道为什么。我是做了2个py脚本然后用bat跑的。。。
'''
cmd = 'copy/b E:\1234\*.ts all.ts'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
print(proc.stdout.read())
'''