AviUtl総合スレッド36

このエントリーをはてなブックマークに追加
103名無しさん@お腹いっぱい。
>>101
それと、これは「うんちく」になるので面倒な方は読み飛ばしちゃってください。

本来のDTS、CTS、CTS_Offsetの意味と関係を書くとこうなります。
DTS:ピクチャをデコードしメモリに配置する時刻。
CTS:ピクチャを表示する時刻。イコール「PTS」
CTS_Offset = CTS-DTS、つまり、ピクチャがメモリに存在する時刻。

なのでDTS、CTS_Offsetの設定は“本来であれば”
CTS_Offset = Current_Frame.PTS - Before_Frame.PTS
DTS = Current_Frame.PTS - CTS_Offset
となると思います。

でも、この通りに値を設定すると先頭ピクチャのバッファリングはいつするの?って問題が発生します。
というわけで、あえて先頭1ピクチャをずらして値を設定しています。そのため、
DTS = Current_Frame.PTS
CTS_Offset = Next_Frame.PTS - Current_Frame.PTS
となるわけです。これによって実際に表示される映像は、タイミングが1ピクチャ分後ろにずれていきます。
ただし、ピクチャ間の表示間隔は正しいので、見た目は大丈夫ってことです。
音声との同期に関しては、おそらく厳密に処理をするのであればこの映像表示までの間を音声のディレイとして
結合する必要がありますが、たとえtimeBeginPeriodでタイマー精度を上げていても、サウンドデバイスバッファ
やドライバの処理もろもろで完全な同期再生は出来ないので、まぁ気にしなくて問題ないレベルだと思っています。

tc2mp4の作者さんにもこの辺の見解を聞いてみたいところですが、mp4からnhmlを取り出してみると
同じ解釈でタイムコードを埋め込んでいるようですので、私もそれに倣う事にしたというお話でした。

結構スレ違いですね。申し訳ない。orz