我在python中工作,这就是我所尝试的-
然后将加密帧保存在目录中,以便我可以借助以下代码从这些帧中获取新视频-
pathIn= './frames/'
pathOut = 'videonew.avi'
fps = 15
frame_array = []
files = [f for f in os.listdir(pathIn) if isfile(join(pathIn, f))]
#for sorting the frame names properly
files.sort(key = lambda x: int(x[0:-4]))
for i in range(len(files)):
filename=pathIn + files[i]
#reading each files
img = cv2.imread(filename)
height, width, layers = img.shape
size = (width,height)
#inserting the frames into an image array
frame_array.append(img)
out = cv2.VideoWriter(pathOut,cv2.VideoWriter_fourcc(*'DIVX'), fps, size)
for i in range(len(frame_array)):
# writing to a image array
out.write(frame_array[i])
out.release()
这很好,创建了视频“videonew.avi”。现在,为了解密,我使用以下代码从“videonew.avi”中提取帧
vidcap = cv2.VideoCapture('videonew.avi')
success,image = vidcap.read()
count = 0
path = os.getcwd() + "/test"
os.chdir(path)
while success:
cv2.imwrite("%d.png" % count, image) # save frame as PNGfile
success,image = vidcap.read()
# print('Read a new frame: ', success)
count += 1
但是提取的帧会受到某种压缩,并且边界上标记的(0,0,0)像素不存在(可能会更改)。所以,我不能进行解密。 你知道为什么会发生这种情况吗?我怎样才能在不损失任何像素的情况下获得帧? 还是有其他方法可以做到这一点?由于项目提供的一些约束,我无法在外部文件中存储坐标
avi文件格式是一种容器格式,允许各种音频和视频编码格式。这些格式中有些是无损的,有些是有损的
有损格式试图通过部分丢弃“不必要的”数据来压缩数据。您的(0,0,0)像素已被适当优化
您需要调查应该使用哪个底层编解码器(如指定给
VideoWriter_fourcc(...)
)来实现您的目的。这种选择取决于它的无损性以及您的环境中提供的支持相关问题 更多 >
编程相关推荐