4

オーディオを 24p から PAL ビデオに変換するオーディオ ストレッチャーを作成しています。24p は 24000 / 1001 ~= 23.976 fps PAL は正確に 25 fps です。

私が使用するアルゴリズムは非常に単純です。'm' が出力サンプル番号で 'n' が入力サンプル番号の場合、m = floor(f(n + 0.5)) で、f は速度係数です。この場合、 f = 25 / (24000 / 1001) = 1001 / 960 です。はい、基本的には 30 程度のサンプルごとにサンプルをドロップしていますが、オーディオは同期している必要があり、さらに約 2kHz のリンギングが発生します。

ただし、結果のビデオでは、映画の 1.5 時間後に、おそらく 0.1 ~ 0.3 秒 a/v 同期がずれています。

double の代わりに long double を使用して計算の精度を上げようとしましたが、同じオーディオ オフセットが得られます。とにかく、48kHz でサンプリングされた 2 時間のフィルムには 345 600 000 のサンプルがあるため、シグフィグが 9 を超えている限り、これは問題にはなりません。

元のビデオをビデオとwavファイルに分割して一緒に再生すると、それらは完全に同期したままになるため、魔法の同期データを見逃しているとは思いません.

メディア コンテナ/ストリームは、おそらくフレーム レートを有理数、つまり 24000 / 1001 として格納しないことに気付きました (間違っていたら訂正してください!)。もしそうなら、私のスピードアップ係数は正しくありません。

さまざまなプレーヤーから fps を取得しようとしました: ffmpeg 23.98、vlc 23.976023。しかし、元のビデオの正確なフレームレートを知る必要があります。見た目では、小数点以下 5 桁 (0.2 秒 / 2 時間) です。vlc の fps を接続してみましたが、まだ少しずれていました。

全体として、mp4 ファイルから正確なフレームレートを抽出する方法はありますか?

または、ストリームの同期を維持するインターリーブのようなものがここにありません。

(コードはここにあります https://raw.github.com/rhlee/speed-alpha/22c28ddcb357649efd3dedd099e159ff024657fe/speed.c誰かが興味を持っている場合.)

4

0 に答える 0