确定连续的视频剪辑

时间:2011-07-17 09:57:48

标签: image-processing image-manipulation video-processing

我是一个很长的视频流,但不幸的是,它是1000个15秒长的随机命名剪辑。我想基于两个这样的15个剪辑的“相似性”的一些度量来重建原始视频,回答“剪辑2中的活动看起来像剪辑1的扩展”的问题。剪辑之间有小的间隙 - 每个几百毫秒左右。如果结果足够好,我也可以手动修复结果,因此结果不一定非常完美。

1 个答案:

答案 0 :(得分:0)

一种非常简单的方法可以是:

(a)创建一个自动过程,以已知图像格式(例如JPG)提取每个视频片段的第一帧和最后一帧,并根据视频片段名称命名它们,例如:如果你有视频剪辑:

clipA.avi,clipB.avi,clipC.avi

您可以创建以下帧图像:

clipA_first.jpg,clipA_last.jpg,clipB_first.jpg,clipB_last.jpg,clipC_first.jpg,clipC_last.jpg

(b)排序“算法”:

1. Create a 'Clips' list of Clip-Records containing each:

(a) clip-name (string)
(b) prev-clip-name (string)
(c) prev-clip-diff (float)
(d) next-clip-name (string)
(e) next-clip-diff (float)

2. Apply the following processing:

for Each ClipX having ClipX.next-clip-name == "" do:
{
    ClipX.next-clip-diff = <a big enough number>;
    for Each ClipY having ClipY.prev-clip-name == "" do:
    {
       float ImageDif =  ImageDif(ClipX.last-frame.jpg, ClipY.first_frame.jpg);
       if (ImageDif < ClipX.next-clip-diff)
       {
           ClipX.next-clip-name = ClipY.clip-name;
           ClipX.next-clip-diff = ImageDif;
       }
    }
    Clips[ClipX.next-clip-name].prev-clip-name = ClipX.clip-name;
    Clips[ClipX.next-clip-name].prev-clip-diff = ClipX.next-clip-diff;
}

3. Scan the Clips list to find the record(s) with no <prev-clip-name> or 
   (if all records have a <prev-clip-name> find the record with the max <prev-clip-dif>.
   This is a good candidate(s) to be the first clip in sequence.

4. Begin from the clip(s) found in step (3) and rename the clip-files by adding 
   a 5 digits number (00001, 00002, etc) at the beginning of its filename and going 
   from aClip to aClip.next-clip-name and removing the clip from the list.

5. Repeat steps 3,4 until there are no clips in the list.

6. Voila! You have your sorted clips list in the form of sorted video filenames! 
   ...or you may end up with more than one sorted lists (if you have enough 
   'time-gap' between your video clips).

非常简单......但我认为它可以有效......

PS1:关于ImageDif()函数:你可以创建一个新的 DifImage ,这是Images ClipX.last-frame.jpg,ClipY.first_frame.jpg然后汇总所有的差异 DifImage 的像素为单个浮点 ImageDif 值。如果您的总和大于某个限制,您还可以优化流程以中止差异(或总和流程):您实际上对小差异感兴趣。 ImageDif 值大于(实验)限制,意味着2个图像差异太大,以至于2个剪辑不能彼此相邻。

PS2:复杂度的排序算法顺序必须大约为O(n * log(n)),因此对于1000个视频剪辑,它将执行大约3000个图像比较(如果优化算法并且允许它,则可以多一点)找不到某些片段的匹配)