最近遇到个客户需求,需要将多个mp4视频文件和图片文件重新按照顺序合成一个视频,如图所示,这是我获取的视频和图片数据,里面有mp4文件和图片文件链接,其中,里面还包含duration这个参数,这个参数表示视频或图片在最终合成的视频中停留播放时长,我的目的是要根据上面图片的顺序一一将多个视频和图片进行合成为一个视频,完整代码如下所示
num = 0
clips = []
# 对每个文件
is_first_file = True
width, height = None, None
for da in r:
mp4_url = da['url']
duration = da['duration'] / 1000
if 'mp4' in mp4_url:
num += 1
urlretrieve(mp4_url, rf"C:\Users\14499\Desktop\mp4\{num}.mp4")
clip = VideoFileClip(rf"C:\Users\14499\Desktop\mp4\{num}.mp4")
if is_first_file:
width, height = clip.size
is_first_file = False
if clip.size != (width, height):
clip = clip.resize((width, height))
clip = clip.set_duration(duration)
clips.append(clip)
else:
num += 1
urlretrieve(mp4_url, rf"C:\Users\14499\Desktop\mp4\{num}.jpg")
img = cv2.imread(rf"C:\Users\14499\Desktop\mp4\{num}.jpg")
if img.shape[:2] != (height, width):
img = cv2.resize(img, (width, height))
img_clip = ImageClip(img)
img_clip = img_clip.set_duration(duration)
clips.append(img_clip)
print(f'第{num}个下载完成!')
print(da)
# 使用concatenate_videoclips函数将所有clip合并成一个clip
final_clip = concatenate_videoclips(clips)
# 生成目标视频文件
final_clip.write_videofile(rf"C:\Users\14499\Desktop\mp4\end.mp4", codec='libx264')
end_time = time.time()
print(f'总共花费了{end_time-start_time}秒')
完美解决!
点击此处登录后即可评论