トップページ > DTV > 2014年08月20日 > nhJNpziC

書き込み順位&時間帯一覧

4 位/191 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000301001000005



使用した名前一覧書き込んだスレッド一覧
名無しさん@編集中
【開発】 TS関連ソフトウェア総合スレ Part13

書き込みレス一覧

【開発】 TS関連ソフトウェア総合スレ Part13
789 :名無しさん@編集中[]:2014/08/20(水) 13:00:39.45 ID:nhJNpziC
>>773
あげ足を取るつもりはないのだが、大多数の人が誤解しているので、強調しておきます。
「正しい音声delay値を取得するようにする」といっても、「正しい音声delay値」というのは
元々ありません。 .mpegなどのPSファイルにはストリームヘッダに定義された「audio-delay」
が存在しますが、TS型ファイルについては「audio-delay」というのは定義されておらず、
映像/音声を分離してエンコード(Codec変換)したのちmuxする場合を含め、エンコーダーに対して
与えるべき、A/Vズレ補正値を「audio-delay」と呼んでいるようです。 同じTSでも通す
エンコーダーソフト毎に用いるべき補正値の適正値が違いますので(大半は同一)、報告される
TSの「audio-delay」が使うエンコーダーに適したものかどうかを知っておくことは重要です。
正しくは「自分の処理の都合上で適切な音声delay値」と言うべきなのです。
 
(1)TSMuxeR
  最初に出現するGOPの中で最初に含まれる音声パケット(payload-start)のPTS値とGOP中の
 第1フレーム映像( GOP先頭から最初に出現するのは第3フレーム映像であり、第1フレームは
 2番目のビデオパケット )のPTS値との差、(最初の音声PTS−第1フレーム映像PTS)を報告する。
 ソースが入手できないので完全解明ではないが、100個以上のTSで調べたが、当てはまらない
 TSは発見できなかった。

(2)MediaInfo
  TS先頭から映像/音声の同期がとれるようになるまでの音声パケットのバイト数を調べ、
 音声bit-rateで割って、audio-delay値とする。 >>778さんのいうように「先頭まで
 順番にADTSフレームを遡って」いるのとは方向が逆ですが、同じ考えです。
【開発】 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);
}
} 
【開発】 TS関連ソフトウェア総合スレ Part13
791 :名無しさん@編集中[]:2014/08/20(水) 13:09:54.18 ID:nhJNpziC
ごめん。 「10:00:00.000」じゃなくて、「00:10:00.000」だった。
【開発】 TS関連ソフトウェア総合スレ Part13
794 :名無しさん@編集中[]:2014/08/20(水) 15:05:36.44 ID:nhJNpziC
>>793
なんで「ズレ」じゃなくて、「ヅレ」を使っているのか。 そこには理由がある。
【開発】 TS関連ソフトウェア総合スレ Part13
797 :名無しさん@編集中[]:2014/08/20(水) 18:07:37.26 ID:nhJNpziC
無劣化では原理的にフレーム単位での編集はできません。
フレーム単位で選択しようとすると、領域先頭部と領域末尾部では
エンコードしなおす必要がありますので、「無劣化」にはなりません。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。