5

背景: ビデオと同期したいビデオ クリップとオーディオ トラックがあります。

ビデオ クリップから、リファレンス オーディオ トラックを抽出します。また、参照トラックと同期させたいトラックがもう 1 つあります。非同期は、各カットシーンの間隔を変更した編集に起因します。

ターゲット トラックを操作して、トラックのように見えるようにする (この場合は音のように聞こえる) 必要があり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 と同様の手法を使用できるため、これは素晴らしいことです。

チャンク サイズとしていくつかのサンプルを選択し、参照オーディオ データを一定の間隔で進めます。(これを「チャンク サイズ」と呼びましょう。) ゼロクロッシング メジャーを計算します (単純なゼロクロッシング カウントの対数 (または高速近似) が必要になる可能性があります)。時間とゼロクロッシング メジャーに基づいて、チャンクを 2D 空間構造に格納します。

次に、実際のオーディオ データを一度にかなり細かいステップで進めます。(おそらく、1 つのサンプルほど小さくする必要はありません。) チャンク サイズ全体の測定値を再計算する必要がないことに注意してください。チャンクに含まれなくなったゼロクロッシングを差し引いて、新しいあるもの。(対数またはその近似を計算する必要があります。)

十分に近い頻度で「次の」チャンクを探します。探しているのは最初から最後までの順序であるため、すべてのチャンクを調べる理由はないことに注意してください。実際、誤検知が発生する可能性がはるかに高いため、そうしたくありません。

チャンクが十分に一致する場合は、無音まで完全に一致するかどうかを確認します。

唯一の懸念点は 2D 空間構造ですが、厳密な近似ウィンドウを許すことができれば、正直なところ、これははるかに簡単に行うことができます。次に、重複するビンを持つことができます。そうすれば、特定の時間後にすべての値について 2 つのビンをチェックするだけで済みます。基本的には、検索構造を介した 2 つのバイナリ検索です。

これらすべての欠点は、正しく行うために微調整が必​​要になる可能性があり、実証済みの方法ではないことです。

于 2012-04-10T23:06:08.063 に答える
0

あなたが示唆するように無音と非無音を確実に区別でき、唯一の違いが無音の挿入である場合、自明ではない唯一のケースは、以前は無かった場所に無音が挿入されることです。

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

チャンクサイズを無音に適応させることができれば、アルゴリズムはうまくいくはずです。つまり、上記の例でチャンク サイズが 2 文字に相当する場合、アルゴリズムは "pa" が "pa" に一致し、"rt" が "rt" に一致することを認識しますが、3 番目のチャンクでは無音を認識しsyn、 "1p" と "1-" の代わりに "1" と "1" を比較するためのチャンク サイズ。

より複雑な編集の場合は、加重最短編集距離アルゴリズムを適用して無音を削除し、コストを 0 にすることができる場合があります。

于 2011-03-19T22:58:41.760 に答える