想问一下我在合并ts文件这步哪里出现了问题,跑出来是乱码而且也得不到合并后的文件(代码如下,完整文件代码在附件)#开始合并TS文件形成一个完整的电影
def merge():
file_names=[]
with open("ts_file.txt",mode="r",encoding="utf-8") as f:
for l in f:
if l.startswith("#"):
continue
else:
file_name = l.split('/')[-1].strip("\n")
file_names.append(file_name)
# print(file_names)
now_dir = os.getcwd()
os.chdir('./ts_s/')
temp = []
n = 1
for i in range(len(file_names)):
name = file_names[i]
temp.append(name)
if i != 0 and i % 100 == 0:
names ="+".join(temp)
os.system(f'copy /b {names} {n}.ts')
n = n+1
temp=[]
else:
continue
names = "+".join(temp)
os.system(f'copy /b {names} {n}.ts')
n = n + 1
temp_2 = []
for i in range(1,n+1):
temp_2.append(f'{i}.ts')
files = "+".join(temp_2)
os.system(f'copy /b {files} 素媛.mp4')
os.chdir(now_dir)
print("welcome to my wanderland!")
这段代码的主要问题在于你使用了 Windows 的 copy /b 命令来合并文件。Python 脚本应该是跨平台的,所以我们可以用 Python 自带的文件操作来实现合并功能。另外,注意在合并所有分段文件之前,先合并每100个分段文件的操作可能是多余的。你可以尝试以下修改后的代码:
import os
# 开始合并TS文件形成一个完整的电影
def merge():
file_names = []
with open("ts_file.txt", mode="r", encoding="utf-8") as f:
for l in f:
if l.startswith("#"):
continue
else:
file_name = l.split('/')[-1].strip("\n")
file_names.append(file_name)
# print(file_names)
now_dir = os.getcwd()
os.chdir('./ts_s/')
with open('素媛.mp4', 'wb') as output:
for name in file_names:
with open(name, 'rb') as input:
output.write(input.read())
os.chdir(now_dir)
print("welcome to my wanderland!")
这个修改后的代码使用了 Python 的 open() 函数来以二进制模式读取和写入文件。这样,你就可以在不同的操作系统上运行这段代码,而不仅仅是在 Windows 上。现在这段代码应该能够正确合并所有的 TS 文件,并将它们存储到一个名为 '素媛.mp4' 的文件中。
|