有效去除视频中无用的信息

时间:2018-12-17 14:11:12

标签: python video

我有一个视频,其中有很多无用的帧(即几秒钟/几分钟没有移动)。我只想保留一些带来新信息的框架。我目前最好的解决方案是逐帧读取一个帧,并仅保留从上一个保存的帧开始其ssim-index低于0.99的帧:

#basic package
import numpy as np
import tqdm
import os

#work with image/videos
import cv2
import imageio
from skimage.measure import compare_ssim
import matplotlib.pyplot as plt
import skvideo.io 

#open video
vid = imageio.get_reader('path/filename.mp4')

#create a director if not existing to save each image
p = os.path.join(path_output, video_name.split('.')[0])
if not os.path.exists(p):
    os.makedirs(p)

#register only informative images
li_images = []
im_compared = color.rgb2gray(vid.get_data(0))
t = 0
T = vid.get_meta_data()['fps']
for num, im in tqdm.tqdm(enumerate(vid.iter_data())):
    try:
        #converting to grayscale to gain time
        im = color.rgb2gray(im)
        #SSIM: smaller values indicate less similarity (but rayon de soleil can bring the 0.98 drop to 0.78)
        sim = compare_ssim(im_compared, im)

        #if not that similar
        if sim<0.99:
            #save image
            li_images.append(im_compared)
            scipy.misc.imsave(os.path.join(p,str(round(t,3)).replace('.','-')+'.jpg'), im_compared)
            #updated benchmarking image
            im_compared = im.copy()
            t = float(num)/ T
    except:
        print(i)

但是,这确实效率不高,因为一小时的视频需要1小时才能输出要保存为视频的图像列表。帧非常小(大约200x200),因此我希望有一个解决方案,而不是简单地减小尺寸。 有人有什么建议吗?任何帮助都非常感谢。

0 个答案:

没有答案