此教程为只是合并ts文件,前提必须已经下载好m3u8文件和ts文件才能进行合并。windows代码稍微有改动需要看注意事项 具体看 2.合并ts文件
mac操作系统
python3.9
pycharm
import os
我们下载 的ts文件保存下来一般顺序都是乱的所以我们需要先读取m3u8中的文件按顺序给合并
import os
# 获取正确的播放顺序
name_list = []
with open('m3u8.txt', 'r') as f:
for list in f:
if list.startswith("#"):
continue
list = list.strip()
file_name = list.split("/")[-1]
name_list.append(file_name)
print(name_list)
进入到存放的ts文件的目录进行合并为防止合并文件命令太长导致报错设置成一百个ts文件合并一次
注意
。windows需要将下面这行代码修改为
#修改前
names = " ".join(temp)
os.system(f"cat {names} >{n}.ts")
#修改后
names = "+".join(temp)
os.system(f"copy {names} >{n}.ts")
# 记录当前目录
now_dir = os.getcwd()
# 进入存放ts文件的目录,可以使合并的时候文件名长度缩短
os.chdir('./挥斧头的搭车人_解密')
# 一次性合并一百个文件,最后将文件在同一合并
temp = []
n = 1
for i in range(len(name_list)):
print(i)
name = name_list[i]
temp.append(name)
if i != 0 and i % 100 == 0: # 每一百个合并一次
# 合并
names = " ".join(temp)
os.system(f"cat {names} >{n}.ts")
n += 1
temp = []
# 合并最后剩下没有合并的
names = " ".join(temp)
os.system(f"cat {names} > {n}.ts")
最后将批次整合的文件在整合为MP4文件就大工告成
temp_2 = []
# 把所有的n进行循环
for i in range(1, n):
temp_2.append(f"{i}.ts")
names = " ".join(temp_2)
os.system(f"cat {names} > movie.mp4")
os.chdir(now_dir)
import os
def merge_ts():
# 获取正确的播放顺序
name_list = []
with open('m3u8.txt', 'r') as f:
for list in f:
if list.startswith("#"):
continue
list = list.strip()
file_name = list.split("/")[-1]
name_list.append(file_name)
# 记录当前目录
now_dir = os.getcwd()
# 进入存放ts文件的目录,可以使合并的时候文件名长度剪短
os.chdir('./挥斧头的搭车人_解密')
# 一次性合并一百个文件,最后将文件在同一合并
temp = []
n = 1
for i in range(len(name_list)):
print(i)
name = name_list[i]
temp.append(name)
if i != 0 and i % 100 == 0: # 每一百个合并一次
# 合并
# cat a.ts b.ts c.ts
# copy a.ts+b.ts+c.ts
names = " ".join(temp)
os.system(f"cat {names} >{n}.ts")
n += 1
temp = []
# 合并最后剩下没有合并的
names = " ".join(temp)
os.system(f"cat {names} > {n}.ts")
temp_2 = []
# 把合并后的ts文件进行最后的合并
for i in range(1, n):
temp_2.append(f"{i}.ts")
names = " ".join(temp_2)
os.system(f"cat {names} > movie.mp4")
os.chdir(now_dir)
merge_ts()