如何获取openCV来保存对视频所做的更改

时间:2019-07-10 11:43:54

标签: python opencv ubuntu

我正在尝试编写一个程序,将一组目录中所有视频的大小从448x800调整为480x640,但是由于某些原因,OpenCV不会进行更改,尽管不会抛出任何错误。我正在使用OpenCV 4.1.0和Python 3.7。当我在单个文件上运行mediainfo时,分辨率看起来相同。如果有任何区别,我可以在Ubuntu上运行它。

从打印语句可以看出,它可以很好地调整各个帧的大小,但是问题在于实际保存完成的视频。

import cv2
import os

dirs = ['group 3','group 4','group 5','group 6','group 7','group 8']

#cycles through the directories
for i in dirs:
    files = os.listdir(i)
    print (i)
    #cycles through the files in each directory
    for j in files:
        if j.endswith('.avi'):
            cap = cv2.VideoCapture(i + '/' + j)
            fourcc = cv2.VideoWriter_fourcc(*'XVID')
            out = cv2.VideoWriter('output.avi', fourcc, 15, (640, 480))
            while True:
                ret, frame = cap.read()
                if ret==True:
                    print(frame.shape)
                    b = cv2.resize(frame, (640,480), fx=0, fy=0, interpolation = cv2.INTER_CUBIC)
                    out.write(b)
                    print(b.shape)
                else:
                    break
            cap.release()
            out.release()
            cv2.destroyAllWindows()

这不会引发任何错误,但实际上不会更改文件。有什么想法吗?我想念一些简单的东西吗?

1 个答案:

答案 0 :(得分:1)

out = cv2.VideoWriter('output.avi', fourcc, 15, (640, 480))行定义了一个视频编写器,它将写入您工作目录中名为output.avi的文件中。由于您始终使用相同的文件名,因此结果将是最后找到的视频,并重新调整大小。

要解决此问题,只需将上面的行更改为: out = cv2.VideoWriter(j.replace(".avi", "_resized.avi", fourcc, 15, (640, 480))

然后将获得诸如myvideo_resized.avi之类的文件名,其中“ myvideo”是旧文件名的示例。

如果您要正确检查文件是否为视频文件,请尝试this

HTH