问题:
是否有任何软件、源代码或有据可查且易于实施的研究(我不怕一点 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 和信号 2 的,
- 在映射中添加该长度的高斯,幅度作为相位差(以适当的间隔),
最后,我将映射应用于视频。
这是两个时间序列之间的最终拟合(每个点代表一个帧):
这是一个表示视频之间延迟(以帧为单位)的图表:
为什么我想要这个:
我的目标是找到来自 VHS 的南非荷兰语配音视频与同一视频的外语 DVD/蓝光之间的映射。我想根据这个获得的映射拉伸南非荷兰语音频以适应 DVD/蓝光的视频,然后混合视频和音频轨道。因此,我将获得带有南非荷兰语音轨的卓越视频质量(与原始 VHS 视频相比)。
可预见的问题之一是引入了一些不连续性(例如 VHS 录制中的广告,其中直接场景转换将出现在 DVD 中)。我将通过在一种情况下用空白噪声(或者可能是一点白噪声)填充中断的音频或在另一种情况下切断一些音频来克服这个问题。
我曾经通过手动对音频进行时间扭曲来完成此操作,但我目前有一个包含此类类似视频的整个文件夹,并认为可能编写一些代码来自动执行此操作。