合成后的时长1:41
没有合成前是50个电影切片
注明:电影切片不是真实的切片名称而是自定义从0-50的数字
import requests
# with open("电影.m3u8","r") as f:
# n=0
# for line in f:
# if line.startswith("#"):
# continue
# line=line.rstrip('\n')
# url = 'https://m3u8i.vodfile.m1905.com/202408031023/c223719502f4f3e2d4f49e3e5118cab5/movie/2019/07/17/m201907170JDB59JXFDRK2YS3/'+line
# res1=requests.get(url)
# open(f'ts/{n}.ts','wb').write(res1.content)
# n += 1
以上代码是打开本地m3u8文件,按行对文件内容进行数据处理,去掉带#开头的,还是对每个视频地址进行去掉末尾的\n,用到rstrip(),得把切片地址补全,然后请求得到响应把内容保存到本地ts文件夹下。
import os
# os.system(f"copy /b {s} dianyi.mp4")
个别视频讲解在window中可以利用os模块中的system,发现不能执行。
对于MAC os.system(f"cat {s} > dianyi.mp4")
因为没有平板没有验证
这里设计到{s}中将视频地址连接
s=" ".john(list) s="+".join(list)
#合成视频用到moviepy 中的VideoFileClip,concatenate_videoclips
from moviepy.editor import VideoFileClip,concatenate_videoclips
#定义了一个合成的函数
def merge_ts():
list = []#定义一个空列表存放地址
with open("电影.m3u8","r",encoding="utf-8") as f:
i=0
for line in f:
if line.startswith("#"):
continue
list.append(f"ts/{i}.ts")
i += 1
if i==50: #因为下载了50个切片到50结束循环
break
#
# os.system(f"copy /b {s} dianyi.mp4")
# print(s)
print(list)
clips=[VideoFileClip(path) for path in list]
fina_clip=concatenate_videoclips(clips)
fina_clip.write_videofile("第.mp4")
print(“合成成功”)
if __name__=="__main__":
merge_ts()