在Python中为OpenCV视频对象指定压缩质量
我必须创建低分辨率AVI视频使用大量的jpeg图像包含在各个目录。我有将近一百个目录,每个目录可能包含数千个图像 为了使这个过程自动化,我使用OpenCV编写了一个python脚本来创建一个视频对象,从给定目录加载每个图像,并将每个图像写入该目录的特定视频文件。所有这些都很有效。我的问题是如何控制视频对象的压缩质量 VideoWriter模块接受5个参数。第二个参数“fourcc”设置压缩代码 打开(文件名,fourcc,fps,frameSize[,isColor]) 我们可以使用“四字符代码”(即fourcc)在cv2.VideoWriter中指定压缩代码 fourcc=cv2.cv.cv_fourcc('M','S','V','C')#Microsoft视频1 除了视频对象的压缩质量始终设置为最大值外,此方法有效 如果我们让fourcc=-1,将打开一个Windows视频压缩对话框,允许用户选择视频压缩并将压缩质量(或时间质量比)设置在0和100之间 每个视频必须是AVI,并且必须满足特定的文件大小要求。如果使用最大压缩质量,则视频文件太大。但是,要求用户为每个视频选择视频压缩和压缩质量会破坏脚本的自动化 那么,在不使用Windows视频压缩对话框的情况下,如何指定视频对象的压缩质量 我的全部代码发布在下面在Python中为OpenCV视频对象指定压缩质量,python,opencv,compression,avi,fourcc,Python,Opencv,Compression,Avi,Fourcc,我必须创建低分辨率AVI视频使用大量的jpeg图像包含在各个目录。我有将近一百个目录,每个目录可能包含数千个图像 为了使这个过程自动化,我使用OpenCV编写了一个python脚本来创建一个视频对象,从给定目录加载每个图像,并将每个图像写入该目录的特定视频文件。所有这些都很有效。我的问题是如何控制视频对象的压缩质量 VideoWriter模块接受5个参数。第二个参数“fourcc”设置压缩代码 打开(文件名,fourcc,fps,frameSize[,isColor]) 我们可以使用“四字符代码
import cv2, os
Workspace = "J:\jpg to AVI test"
year = "2014"
file_extension = "avi"
Image_file_dir = Workspace + "\\12 - ECD-BONNETT CREEK Y INT (" + year + ")"
print Image_file_dir
Image_file_list = os.listdir(Image_file_dir)
print "Image_file_list: " + str(Image_file_list)
img_cnt = 0
for Image_file in Image_file_list:
if Image_file.split(".")[-1] == "jpg":
Image_file_path = Image_file_dir + "\\" + Image_file
print Image_file_path
img1 = cv2.imread(Image_file_path)
height , width , layers = img1.shape
break
fourcc = cv2.cv.CV_FOURCC('M','S','V','C') #Microspoft Video 1
##fourcc = -1
video_object = Workspace + "\\12 - ECD-BONNETT CREEK Y INT (" + year + ")." + file_extension
video = cv2.VideoWriter(video_object,\
fourcc,\
9,\
(width,height))
for Image_file in Image_file_list:
if Image_file.split(".")[-1] == "jpg":
img_cnt += 1
Image_file_path = Image_file_dir + "\\" + Image_file
print str(img_cnt) + ") " + Image_file_path
img1 = cv2.imread(Image_file_path)
video.write(img1)
cv2.destroyAllWindows()
video.release()
对不起OpenCV没有用于配置压缩率的接口 我最近需要做一件类似的事情。我的操作过程是以编程方式调用
ffmpeg
,并使用它将OpenCV创建的AVI转换为MP4文件
这将一个100MB的文件变成小于900KB的文件我感谢您的回复。我用手刹把AVI换成了MP4。我认为如果我不致力于AVI,您的ffmpeg解决方案将是最佳选择。ffmpeg可以转换为任何类型的容器(AVI、mp4等),您甚至可以指定所需的编解码器。太棒了。