Python实现多个视频和图片合成

2023年10月29日 10:13 ry 503

最近遇到个客户需求,需要将多个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}秒')

完美解决!

如果上述代码帮助您很多,可以打赏下以减少服务器的开支吗,万分感谢!

欢迎发表评论~

点击此处登录后即可评论


评论列表
2023年10月29日 10:14 ry: 回复
需要数据采集,软件定制的可以联系我qq:1449917271 微信:liuyoudyping


赣ICP备2021001574号-1

赣公网安备 36092402000079号