赞
踩
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 |
此处参照博主
将某个文件夹中的所有图片,合成为一个视频。
- import cv2
- import os
- from natsort import natsorted
-
- # jpg2mp4
- def merge_image_to_video(folder_name,output_format):
-
- output_folder = "G:/Germany/Photo/G222Ptest/mp"
- if not os.path.exists(output_folder):
- os.makedirs(output_folder)
-
- fps = 120
- file_list = natsorted(os.listdir(folder_name), key=lambda y: y.lower()) # 使用natsorted进行自然排序
- total_files = len(file_list)
-
- video = None # 初始化视频写入器
- frame_index = 0 #初始化索引
-
- for idx, f1 in enumerate(file_list):
- filename = os.path.join(folder_name, f1)
- print(f"当前位置{filename}")
-
- frame = cv2.imread(filename)
- if frame is None: # 检查为空
- print(f"无法读取图片:{filename},跳过该图片")
- continue
- #奇技淫巧(%n按照n间隔生成)
- if frame_index % 1 !=0:
- frame_index +=1
- continue
-
- # 将图像转换为彩色图像
- #color_frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) 原图不需要转换
-
- if video is None or not video.isOpened(): # 如果视频写入器未初始化,则进行初始化
- first_frame = cv2.imread(filename)
- img_size = (first_frame.shape[1], first_frame.shape[0])
- # fourcc = cv2.VideoWriter_fourcc(*'FLV1') #mp4v/mp4 XVID/avi FLV1/flv 修改编码格式
- # output_path = os.path.join(output_folder, "output.flv")
-
- if output_format == 'mp4':
- fourcc = cv2.VideoWriter_fourcc(*'mp4v')
- elif output_format == 'avi':
- fourcc = cv2.VideoWriter_fourcc(*'XVID')
- elif output_format =='flv':
- fourcc = cv2.VideoWriter_fourcc(*'FLV1')
- elif output_format =='ogv':
- fourcc = cv2.VideoWriter_fourcc(*'THEO')
- else:
- print("不支持的视频格式,自行添加")
- return
- output_path = os.path.join(output_folder, f"output.{output_format}")
-
- video = cv2.VideoWriter(output_path, fourcc, fps, img_size, isColor=True)
-
- video.write(frame) #color_frame
- print(f"进度: {idx+1}/{total_files}")
- frame_index +=1
-
- if video is not None and video.isOpened(): # 确保视频写入器已打开
- video.release() # 释放视频写入器
- print("视频已成功生成")
- else:
- print("视频生成失败,查看文件路径")
-
- if __name__ == '__main__':
- folder_name = r"G:/Germany/Photo/G222Ptest"
- merge_image_to_video(folder_name,output_format='avi')
filename 是要保存的文件的路径 folder_name为待合成图片文件夹
fourcc 指定编码器,切换不同格式 output_format为转换格式
fps 要保存的视频的帧率 frameSize 要保存的文件的画面尺寸,
isColor 指示是黑白画面还是彩色的画面
fps:可指定大小合成高刷帧,frame_index抽帧合成,略有不同
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。