5

背景:我有想要与所述视频同步的视频剪辑和音轨。

从视频剪辑中,我将提取参考音轨。我还有另一个要与参考轨道同步的轨道。不同步来自编辑,它改变了每个过场动画的间隔。

我需要操纵目标轨道看起来像(在这种情况下听起来像)ref轨道。这相当于在正确的位置添加或删除静音。这可以手动完成,但会非常乏味。所以我希望能够以编程方式确定这些位置。

例子:

     0         1         2         
     012345678901234567890123
ref: --part1------part2------
syn: -----part1----part2-----
# (let `-` denote silence)

输出:

[(2,6), (5,9) # part1
 (13, 17), (14, 18)] # part2 

我的想法是,从头开始:

Fingerprint 2 large chunks* of audio and see if they match:
    If yes: move on to the next chunk
    If not:
        Go down both tracks looking for the first non-silent portion of each
        Offset the target to match the original
        Go back to the beginning of the loop

# * chunk size determined by heuristics and modifiable

这里的主要问题是声音匹配和指纹识别是模糊且相对昂贵的操作。

理想情况下,我希望他们尽可能少。想法?

4

2 回答 2

4

听起来您不想花大量时间研究音频处理/工程,因此您想要一些可以快速理解并且可以正常工作的东西。如果您愿意使用更复杂的东西,请参阅此处以获得非常好的参考。

在这种情况下,我希望简单的响度和过零测量足以识别声音的各个部分。这很棒,因为您可以使用类似于 rsync 的技术

选择一些样本作为块大小,并定期浏览您的参考音频数据。(我们称之为“块大小”。)计算过零度量(您可能需要一个简单过零计数的对数(或快速近似值))。基于时间和过零度量将块存储在二维空间结构中。

然后一次更精细地浏览您的实际音频数据。(可能不需要像一个样本那么小。)请注意,您不必重新计算整个块大小的度量——只需减去不再在块中的过零并添加新的那些。(您仍然需要计算其对数或近似值。)

寻找频率足够接近的“下一个”块。请注意,由于您要查找的是从头到尾的顺序,因此没有理由查看 -all- 块。事实上,我们不想这样做,因为我们更有可能得到误报。

如果块匹配得足够好,看看它是否一直匹配到静音。

唯一令人担忧的一点是 2D 空间结构,但老实说,如果您愿意原谅严格的近似窗口,这可以变得容易得多。然后你可以有重叠的垃圾箱。这样,您需要做的就是在一定时间后检查两个箱中的所有值——本质上是通过搜索结构进行两次二进制搜索。

所有这一切的缺点是它可能需要一些调整才能正确并且不是一种经过验证的方法。

于 2012-04-10T23:06:08.063 回答
0

如果您可以按照您的建议可靠地区分静默和非静默,并且唯一的区别是插入静默,那么似乎唯一不平凡的情况是在以前没有静默的地方插入静默:

ref: --part1part2--
syn: ---part1---part2----

如果你可以让你的块大小适应静音,你的算法应该没问题。也就是说,如果您的块大小等于上例中的两个字符,您的算法将识别“pa”匹配“pa”和“rt”匹配“rt”,但对于第三块,它必须识别静音syn并适应块大小比较“1”到“1”而不是“1p”到“1-”。

对于更复杂的编辑,您可能可以采用加权最短编辑距离算法,去除静音的成本为 0。

于 2011-03-19T22:58:41.760 回答