多个视频ts文件合并

多个视频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())

'''

你可能感兴趣的:(python,python,os,快速排序)