当前位置:   article > 正文

opencv批量图片合成视频,生成mp4/avi/flv格式,cv2.VideoWriter_fourcc()_cv2.videowriter合成视频

cv2.videowriter合成视频

1.主要利用OpenCV中cv2.VideoWriter_fourcc()函数合成视频

     1.1VideoWriter_fourcc()常见的编码参数
cv2.VideoWriter_fourcc('M', 'P', '4', 'V')MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc('X','2','6','4')MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc('I', '4', '2', '0')该参数是YUV编码类型,文件名后缀为.avi 
cv2.VideoWriter_fourcc('P', 'I', 'M', 'I')该参数是MPEG-1编码类型,文件名后缀为.avi
cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小
cv2.VideoWriter_fourcc('T', 'H', 'E', 'O')该参数是Ogg Vorbis,文件名后缀为.ogv
cv2.VideoWriter_fourcc('F', 'L', 'V', '1')该参数是Flash视频,文件名后缀为.flv

此处参照博主

2.代码

将某个文件夹中的所有图片,合成为一个视频。

  1. import cv2
  2. import os
  3. from natsort import natsorted
  4. # jpg2mp4
  5. def merge_image_to_video(folder_name,output_format):
  6. output_folder = "G:/Germany/Photo/G222Ptest/mp"
  7. if not os.path.exists(output_folder):
  8. os.makedirs(output_folder)
  9. fps = 120
  10. file_list = natsorted(os.listdir(folder_name), key=lambda y: y.lower()) # 使用natsorted进行自然排序
  11. total_files = len(file_list)
  12. video = None # 初始化视频写入器
  13. frame_index = 0 #初始化索引
  14. for idx, f1 in enumerate(file_list):
  15. filename = os.path.join(folder_name, f1)
  16. print(f"当前位置{filename}")
  17. frame = cv2.imread(filename)
  18. if frame is None: # 检查为空
  19. print(f"无法读取图片:{filename},跳过该图片")
  20. continue
  21. #奇技淫巧(%n按照n间隔生成)
  22. if frame_index % 1 !=0:
  23. frame_index +=1
  24. continue
  25. # 将图像转换为彩色图像
  26. #color_frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) 原图不需要转换
  27. if video is None or not video.isOpened(): # 如果视频写入器未初始化,则进行初始化
  28. first_frame = cv2.imread(filename)
  29. img_size = (first_frame.shape[1], first_frame.shape[0])
  30. # fourcc = cv2.VideoWriter_fourcc(*'FLV1') #mp4v/mp4 XVID/avi FLV1/flv 修改编码格式
  31. # output_path = os.path.join(output_folder, "output.flv")
  32. if output_format == 'mp4':
  33. fourcc = cv2.VideoWriter_fourcc(*'mp4v')
  34. elif output_format == 'avi':
  35. fourcc = cv2.VideoWriter_fourcc(*'XVID')
  36. elif output_format =='flv':
  37. fourcc = cv2.VideoWriter_fourcc(*'FLV1')
  38. elif output_format =='ogv':
  39. fourcc = cv2.VideoWriter_fourcc(*'THEO')
  40. else:
  41. print("不支持的视频格式,自行添加")
  42. return
  43. output_path = os.path.join(output_folder, f"output.{output_format}")
  44. video = cv2.VideoWriter(output_path, fourcc, fps, img_size, isColor=True)
  45. video.write(frame) #color_frame
  46. print(f"进度: {idx+1}/{total_files}")
  47. frame_index +=1
  48. if video is not None and video.isOpened(): # 确保视频写入器已打开
  49. video.release() # 释放视频写入器
  50. print("视频已成功生成")
  51. else:
  52. print("视频生成失败,查看文件路径")
  53. if __name__ == '__main__':
  54. folder_name = r"G:/Germany/Photo/G222Ptest"
  55. merge_image_to_video(folder_name,output_format='avi')

3.参数略述


filename 是要保存的文件的路径        folder_name为待合成图片文件夹
fourcc 指定编码器,切换不同格式        output_format为转换格式
fps 要保存的视频的帧率                     frameSize 要保存的文件的画面尺寸,
isColor 指示是黑白画面还是彩色的画面

fps:可指定大小合成高刷帧,frame_index抽帧合成,略有不同

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/841365
推荐阅读
相关标签
  

闽ICP备14008679号