7

2 つのオーディオ トラックと 1 つのビデオ トラックを持つ AVMutableComposition があります。このコンポジションを使用して、.mov ファイルから約 40 個の異なるビデオ クリップを並べ、各クリップのビデオ コンテンツをコンポジションのビデオ トラックに、オーディオをオーディオ トラックに配置しています。音楽に使用する 2 番目のオーディオ トラック。タイトル グラフィック用の同期レイヤーもあります。

AVPlayer を使用してこのコンポジションを再生すると、オーディオがゆっくりと同期しなくなります。目立ち始めるまでに約4分かかります。ほんの一握りの長いクリップをつなぎ合わせるだけでは、問題はそれほど明白ではないように思えます.短いクリップがたくさんある場合(私のテストでは〜40)、それは本当に悪くなります.

一時停止と再生はオーディオを再同期しませんが、シークは再同期します。言い換えれば、ビデオを最後まで再生すると、一時停止して最後まで再生しても、最後に向かってリップシンクが著しくオフになりますが、最後に向かって時間を探すと、オーディオは同期に戻ります.

今のところ私のハッキーな解決策は、1 分ごとに currentTime + 1 フレームをシークすることです。これにより、シーク操作の遅れによってビデオに不快なジャンプが発生するため、良い解決策ではありません。

ExportSession を使用したエクスポートでは、この問題は発生しません。オーディオは出力ムービーで同期されたままです。

AVPlayer の新しい masterClock プロパティがこれに対する答えであるかどうか疑問に思っています。そうである場合、どのように使用されますか?

4

1 に答える 1

2

私は同じ問題を抱えていて、他の多くのオーディオとビデオの問題の中で、次の方法で時間のタイムスケールを指定することで修正しました。

CMTime(seconds: my_seconds, preferredTimescale: CMTimeScale(600))

以前、私のタイムスケールは でしたCMTimeScale(NSEC_PER_SEC)。そのため、別のフレーム レートでクリップを作成するときに、震えが生じました。さらに、Eddy がここで言及しているこのオーディオの同期がずれていました。

魔法の数のように見えますが、600 は 24、30、60、120 の公倍数です。これらは、さまざまな目的の通常のフレーム レートです。公倍数は、複数のクリップを構成するときに丸めの問題を回避するのに役立ちます。

于 2018-09-11T01:02:29.623 に答える