- 【開発】 TS関連ソフトウェア総合スレ Part13
790 :名無しさん@編集中[]:2014/08/20(水) 13:01:52.15 ID:nhJNpziC - 面白いのは、TSをTSmuxeRでdemuuxして.mpvと.aacをgetし、これを再度TSMuxeRして得た新TSは
開始(第1フレーム映像)PTS = 先頭音声PTS=10:00:00.000となり、TSmuxeRに読ませると audio-delay=0.0msecであるが、MediaInfoに読ませるとaudio-delay = -67msec(バグのため 「-67秒」と表示)されてしまう。 67msecは映像2フレーム相当なので、Mediacoderでは先頭の 2フレーム(B-frame)は変換非対象として捨て、対応する音声も捨てる、即ち 「 video-delay = audio-delay = -67msec 」と考えるようだ。 この-67msecを補正値として 使うべきか、defaultの補正値(=0)を使うべきかは、使うエンコーダーソフトで異なってくるはずである。 但し、このように先頭2フレーム映像を捨てると思われる結果になるのは、demux-muxで作った 10:00:00.000開始の全てのTSでみられるのだが、開始PTSがHH:MM:SS.xxxで 「TSMuxer版audio-delay=数msec」のテストファイルを作って調べると、「MediaInfo版audio-delay」と 「TSMuxer版audio-delay=数msec」は±1msecでほぼ一致するので、必ずしも常に先頭2フレーム分の映像を 捨てているというわけではないようだ。 何れにせよ、最終目的は音ヅレのない出力ファイルを得ることなので、 この辺ははっきりさせたいと思う。 調べきってはいないが、関連部分の一部を記すと \MediaInfo_GUI_GNU_FromSource\MediaInfoLib\Source\MediaInfo\Audio\File_Mpega.cpp の中の if (BitRate) { Fill(Stream_General, 0, General_Duration, VBR_FileSize*8*1000/BitRate, 10, true); Fill(Stream_General, 0, General_OverallBitRate, BitRate, 10, true); Fill(Stream_Audio, 0, Audio_BitRate, BitRate, 10, true); if (CalculateDelay && Buffer_TotalBytes_FirstSynched>10 && BitRate>0) { Fill(Stream_Audio, 0, Audio_Delay, Buffer_TotalBytes_FirstSynched*8*1000/BitRate, 0, true); Fill(Stream_Audio, 0, Audio_Delay_Source, "Stream", Unlimited, true, true); } }
|