![cover](https://img-blog.csdnimg.cn/img_convert/6caf7fbef0004759a791b91e9214ce6e.png)
opencv批量图片合成视频,生成mp4/avi/flv格式,cv2.VideoWriter_fourcc()
fps 要保存的视频的帧率frameSize 要保存的文件的画面尺寸,filename 是要保存的文件的路径folder_name为待合成图片文件夹。fourcc 指定编码器,切换不同格式output_format为转换格式。fps:可指定大小合成高刷帧,frame_index抽帧合成,略有不同。isColor 指示是黑白画面还是彩色的画面。将某个文件夹中的所有图片,合成为一个视频。
·
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.代码
将某个文件夹中的所有图片,合成为一个视频。
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')
3.参数略述
filename 是要保存的文件的路径 folder_name为待合成图片文件夹
fourcc 指定编码器,切换不同格式 output_format为转换格式
fps 要保存的视频的帧率 frameSize 要保存的文件的画面尺寸,
isColor 指示是黑白画面还是彩色的画面
fps:可指定大小合成高刷帧,frame_index抽帧合成,略有不同
更多推荐
所有评论(0)