映射两个相似视频之间的时间差

信息处理 互相关 视频处理
2022-02-19 11:23:56

问题:

是否有任何软件、源代码或有据可查且易于实施的研究(我不怕一点 Python)来执行以下操作:

从不同来源获取两个相似的视频(例如从 VHS 获得的视频文件和从 DVD 中翻录的视频文件)并绘制视频之间的估计时间差(这可能不是基于音频):

video1 : video2   (in seconds)
0.00   : 2.00
1.00   : 3.10
2.00   : 4.20
3.00   : 5.25
4.00   : 6.30
5.00   : 7.33
6.00   : 8.38
7.00   : 9.40
8.00   : 10.50

可能的实施途径:

将视频转换为一维时间信号:

一个简单的解决方案可能是通过取每帧的平均值来创建一维信号。然后可以将来自每个视频的每个信号拆分为窗口并进行相关以找到相位差(两者之间的映射)。

我们可能会首先标记视频的相同“开始”和“结束”(显然与我们的信号具有相同的时间戳)并应用转换将 video-signal-2 缩放到与 video- 相同的时间大小-信号-1。然后我们可以继续进行上述窗口匹配,找到我们正在寻找的映射,然后在映射的视频 2 侧应用变换的逆。

以下是一些结果。您可以清楚地看到两个视频之间的相关性。

两个相似视频信号之间的比较(帧#作为 x 轴): 在此处输入图像描述

视频帧比较:

在此处输入图像描述

我在这个例子中使用的视频来自Heidi: girl in the alps系列。左边的框架来自国外的翻录,而右边的框架来自我在南非购买的南非荷兰语 DVD ( http://www.takealot.com/afrikaanse-kinder-bundel-met-heidi-pinocchio- en-nils-holgersson/PLID32819763)。

请注意南非荷兰语 DVD 的质量极差。

它还不起作用:

关于这种方法的一个问题是我们如何关联这些信号?我尝试了正态相关(fft 路线),但不幸的是信号不是零均值,因此很难获得正确的相移。

我也试过高通滤波这个结果,但产生的信号很乱,仍然没有很好的相关性。

编辑:(我得到它的工作)

我对帧使用了一个新指标——我现在使用帧右半部分的平均值减去左半部分的平均值(现在我的数据更接近零平均值)。我标准化我的数据并使用高通滤波器将我的信号转换为零均值信号(三阶巴特沃斯滤波器)。这是结果

视频帧数据经过高通滤波和汉明窗

我启动了一个映射range(length)(1:1 映射)并根据全局相移(从信号相关的相位)移动映射。

然后我通过重复以下几次来更新映射:

  1. 选择任意大小(每次迭代都会改变)时间窗口将两个信号分成n等份,
  2. 使用相位相关来获得零件之间的相位差i信号 1 和信号 2 的i1,2,...,n,
  3. 在映射中添加该长度的高斯,幅度作为相位差(以适当的间隔),

最后,我将映射应用于视频。

这是两个时间序列之间的最终拟合(每个点代表一个帧): 在此处输入图像描述 在此处输入图像描述

这是一个表示视频之间延迟(以帧为单位)的图表: 在此处输入图像描述

为什么我想要这个:

我的目标是找到来自 VHS 的南非荷兰语配音视频与同一视频的外语 DVD/蓝光之间的映射。我想根据这个获得的映射拉伸南非荷兰语音频以适应 DVD/蓝光的视频,然后混合视频和音频轨道。因此,我将获得带有南非荷兰语音轨的卓越视频质量(与原始 VHS 视频相比)。

可预见的问题之一是引入了一些不连续性(例如 VHS 录制中的广告,其中直接场景转换将出现在 DVD 中)。我将通过在一种情况下用空白噪声(或者可能是一点白噪声)填充中断的音频或在另一种情况下切断一些音频来克服这个问题。

我曾经通过手动对音频进行时间扭曲来完成此操作,但我目前有一个包含此类类似视频的整个文件夹,并认为可能编写一些代码来自动执行此操作。

2个回答

为了计算第一张图像中两个信号之间的偏移,我认为相位相关会给你带来更好的结果,而不是简单的基本相关。

您可以重复使用 fft 代码,但必须在反 fft 之前将 fft 系数归一化为单位幅度,因此相位相关仅基于相位信息,并且对幅度/强度的变化不敏感。

天真的问题:两个时间戳序列(“扭曲函数”)之间的关系不是线性函数是否很常见?我假设它几乎总是线性的,在这种情况下你只需要匹配两个点(比如第一个和最后一个非黑色帧),然后你可以在它们之间进行插值。

如果您想针对不同类型的翘曲函数做一些更强大的事情,那么通过从视频中提取一维信号,您就走在了正确的轨道上。我建议采用以下标准化方案:xnorm(t)=x(t)μ(t)σ(t)在哪里μ(t)σ(t)是以时间为中心的 5s 或 10s 长窗口中信号的平均值和标准偏差t(如果您的数据太嘈杂,请用中位数和四分位数范围替换平均值和标准差)。这用作高通滤波​​器,并确保您比较具有相似幅度的两个信号。然后,您可以使用动态时间规整(DTW)找到两者之间的最佳对齐方式。如果您知道两个信号之间的翘曲函数是分段线性的(时间偏移和速度差),您可以通过 DTW 找到的最佳路径段拟合一条线,以获得每个段的时间偏移和速度比.