我在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)像素,被标记的边界不存在(可能改变)。所以,我不能执行解密.你知道为什么会发生这种情况,我怎么能得到帧没有任何像素的损失?或者有什么其他方法可以做到这一点?由于项目提供的一些限制,我不能在外部文件中存储坐标。
该 禽类 文件格式是一种容器格式,允许各种音频和视频编码格式。这些格式中有些是无损的,有些是有损的。
有损格式试图通过部分丢弃 "不必要的 "数据来压缩数据。你的(0,0,0)像素被适当地优化掉了。
你需要调查一下底层的编解码器(如指定的那样) VideoWriter_fourcc(...)
)你应该使用服务器你的目的。这个选择取决于它是否是无损的以及你的环境所提供的支持。