2005年12月04日

mencoder -of lavf -o *.mp4の将来性

【概要】[MEncoder-users] メーリングリストでも.mp4や.mkvで音ズレがでるよという話。
【タグ】[MEncoder][-of lavf -lavfopts format=mp4 ]
[MEncoder-users] Audio sync problems から。
MEncoderのmp4 muxer "-of lavf lavfopts format=mp4"が安定してくれたら、.mp4もmkvmergeでも安心して音ズレ無しで済むのになぁ、、、見たいな流れに対するお返事。
This is hopeless. mencoder knows nothing about pts, and thus lavf
muxing can NEVER work in the presence of B frames. We really need to
forcibly disable this since it's generating CORRUPT files. The only
solution is using rawvideo.
----
見込みが無い。mencoderはpts(*)の事を何も知らない。
だからBフレームがあると、lavfのmuxは決して動作しない、できない。
これ(*B?*)の使用を強制的に禁止する事は不可欠だ。
さもないとぶっ壊れたファイルができる。唯一の解決策はrawvideoを使う事。

*pts=Presentation Time Stampと思われる。
他にDTS(Decoding Time Stamp)というのもあるらしい。
11/3のエントリ「MPEG -4のB- frameを AVI/VFW に入れるハッキングについて」に以下の一節がある。
通常、コンテナの中のフレームは次のように 配置されている:
I P B B
ディスプレイは次の順番だ:
I B B P
んで、先にIとPをデコードしなきゃBのデコードはできな いからこうなってるんだよ、と。
これ、PTS/DTSと考えて良いと思う。たぶん。
エンコーダもIPBBの順にフレームを吐くが、これをmuxerに「再生はIBBPだかんね!ヘッダにそう書いといてね!」と伝える術が無い、って事か な。
素人考えではbframes=<0-16>の指定値を muxerが読めばなんとかなりそうなものだが、b_adaptがあるとダメか。
デコーダ内部でBがIとPに挟まれるように並べ替えるとしても、AVCではPもBも参照フレームになり得る。

ふぅーむ。なんか.mp4出力どころか、VFR困難な希ガス。

さらに。PTS/DTSってなそんなに新しい技術なのだろうか。一応調べてみる。
  • PTS/DTSの単語は「BSデジタル放送用スタジオシステム機器(東芝レビューVol.55No.12(2000))」なるpdfで見つけた。MPEG2-TSに関する内容。
  • MEncoderのファースト・リリースは、2002/1/3(MPlayer 0.60 "The RTFMCounter")
MEncoderの方が後だが、MEncoderのmpeg muxerから"experimental"が取れたのは今年の事だ。ましてやPTS/DTSが複雑なBにおいておや。
xvid.aviではストリームの中になんか無理矢理な仕掛けが、、、確か、どっかWin界の先人サイトで見たような。

やはりavi以外のものを作るのにMEncoderを使う際は、rawvideoで吐くか、AVIからきちんとrawを抽出できるツールを使った方が良い ようだ。
映像は-nosoundの固定fps,音声とmuxして先頭のdelay frame切り落とし、音ズレが気になったらストリームのトリム/スケール、といった感じか。
TimescaleをQTと同じ、 90000 にするのもやってみよう。
posted by ばる at 21:54| Comment(0) | TrackBack(0) | mencoder | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス: [必須入力]

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/10202770
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。