2005年11月30日

MEncoder経由でAVC/H.264.mp4を作る上での問題点

【概要】2005年10月から11月までのまとめ。
【タグ】[.mp4][x264][MEncoder]

10 月初旬から、MEncoder,ffmpeg,mp4boxの設定をいろいろ試して来たが、以下の2点に付き進展が無い。
この間、知識は増えたが、、、実益のない知識など駅の名前を全部言えるガキも同然ッ!!。無駄無駄無駄ァッ!!。
と、Dioってもしょうがないので脳内を整理せねば。

I. B-frameを使うとQuickTime Player 7 Proで加工不能になる。

再生はOK。ffmpegX0.0.9tでもBを使えば同様。
当初はQuickTime Player のBサポートを疑ったが、MPEGstreamclipでB付きエンコードを指定した場合は発生しない。
従って、MEncoderが最も疑わしい。

A. 以下、いずれも同じ結果。
  1. MEncoderで-of rawvideoで吐いたx264 rawvideo(.264)。
  2. MEncoderで.aviを吐き、
    1. -ovc copyでx264 rawvideo(.264)抽出
    2. mp4boxでx264 rawvideo(XXX_video.h264)抽出。
*MEncoderの AVC -in- AVI は、mkvmergeでMKV化する際に、 "--engage allow_avc_in_vfw_mode" なるオプションを要求するとの情報有り(MEncoder user Mailing List)。、、、vfw mode...orz、、、どっちだ。packed B-frameか、それともdelay frameか。それでなんで再生できるんだ?

B. 以下、未試験項目。
  1. ffmpegでBフレーム付きエンコード。:コマンド未詳。MEncoder -lavfオプションを読めばなんとなりそう。
  2. x264cliでエンコード。:巨大な中間生成物が必要(raw yuv4:2:0)。かつ、.mpegからyuv4:2:0の 生成過程で色空間がおかしくなる点が未解明。コマンド習得は容易。
  3. MPlayer/MEncoderでフィルタのみ適用、上記いずれかにpipeで繋ぐ:未成功。いや、ファイルでなく stdoutに出せばいいのか?
  4. MEncoderでフィルタのみ適用、MPEG2に出力の上、1.でエンコード:中間生成物は素材同等で済み、 シェルスクリプト化も容易。画質劣化有り。MEncoderでMPEG2に出力する際にpp 系の習得必須?

II. 映像と音声の再生時間が0.15〜0.2sec異なる。

GV-1394TV/M2でTV録画 &QT/3ivxに詳しいMyCometG3さんのエントリ、ffmpegなどで音が短くなる問題 から。
29.97fpsの映像と、44.1KHz/48KHzの音声。それぞれフレームと呼ばれるデータの固まりでまとめ られていくのだが、映像と音声の周波数 が違うから、フレームごとに含まれるデータの量は「うるう年のように」定期的に増減させる「べき」ということみたいだ。

だので、音声と映像が、根本的に違う周波数でエンコードされるために、これを合成(Mux)するときには、ずれを補正する処理を組み込まないといけないよ うなのだ。
いずれはMEncoderがAVI作成時にやっている補正処理をMP4に対しても行えるようになるとは思う。しかし、MEncoderはAVI作成に特化 してきた経緯から、かなりの時間を要するだろう。
当分の間、QuickTime Player 7 Pro上で音声を映像に合わせてscalingするなり、映像を音声に合わせてトリミングするなりで解決可能と思われる。0.15〜0.2secと言え ば、23.976fpsでは3〜5フレーム程度。QTCoffeeがあるのでシェルスクリプト化も容易だ。
いずれにせよ、Bフレーム付きエンコードでQT加工可能な.mp4を生成するのが先という事。

以下はちらしの裏。

他のプラットフォームの状況概観

と言ってもMacしか持ってないので拾った情報の寄せ集め。
Win
Avisynth+x264cli+mp4boxが主流。QuickTimeは存在するが、プロキー(Apple-H.264) にお金を出すくらいならNero Digitalの方が使いでがありそうだし、x264という無償の選択肢もある。
MacではAvisynthが動作しないため、同じルートは構築できな い。代替策はI.B.2.など。他にVPCやDarwineなども考えられる。
*nix
マルチメディア環境を提供する企業が無いため、動画再生・作成環境は全てユーザ自身の手で構築されてきた。
漏れのlinuxでDVD/AVIを見たい!とかから始まったので、一応、それらがインフラとなっているもより。
MEncoderはffmpegの助力を得てmp4出力をサポートしつつあるが、大手術ではある。安定まで数年は覚悟か。
メリットは速度。そして対応範囲の広さ。
linux界では最新のハードウェアの普及も、ドライバ類の整備も遅い。開発者だからってそうそう最新のCPUに買い替えられる ものでもないので(普通は20そこそこの学生さんだし)彼らの手許で満足のいく速度で動作するのが普通らしい。またニーズに対して正直だ。腕さえありゃ誰 でもパッチ送れるわけだし。その結果、MEncoderにせよffmpegにせよ、コマンドライン習得というカベを乗り越えれば、現在の QuickTimeベースでエンコードするより設定の自由度が高い。
弱点はQuickTimeが存在しない事だが、mp4boxの存在により大きな差は無い。
むしろコアな*nixユーザ がogg形式に愛着を持つように、MEncoderもMKVサポートを先にするかもしれない。
全てが自己責任の世界なので、wmv,mov,mp4といったプロプライエタリ形式(オープン規格を名乗っていても特許が絡むも の)に対しては若干揶揄的な口 調を使う人も見受けられる。中にはマカーとは別の意味で信者のように見える人も居る。D.I.Y.信者とでも言うべきか。でもあんだけ現実の役 に立ってんだしな。
Macでは基本的にほぼ同等のルート構築が可能。ほぼ、とはPPCを持つ開発者が圧倒的に少ないため、同じソースコードをビルド しても期待通り動作するとは限らない事。つうかビルド自体、自分には大変なのですけども。
Mac
QuickTime Player Pro+Apple-H.264が基本。.mp4作成において、QuickTimeに 比較優位がある事は確か。また、iPod/iTMSの勢いは、一種のチャンスではある。しかし、 QuickTime APIの未整備は長くOSXでの有効活用を阻み、TVキャプチャで有益なインタレ解除やデノイズといったフィルタはほぼ完成の域に達したWin (Avisynth/AviUtil)、それには劣るが素材に応じた多彩なフィルタが選択できる *nix (MEncoder/AviDemux)に比べればかなり寂しい(独力で作ってるJESはスゲェ)。ショーケースたるQuickTime Playerの不出来、MPEG2再生コンポーネントのややこしい仕様な ど、 技術面以外の、おそ らくはビジネスモデルに起因する障害が多い。
なかんずく、Apple-H.264は 手軽に使う事は想定していないと思われる。iChatに使えるのだから、例えばパス数/スレッド数指定などでx264並の速度にチューンする事など雑作も なかった筈だ。例えばDVDバックアップ用途に使われる事を全力で回避する決意の現れであろう。それわそれで理解できるが、現状はやや息苦しくも感じる。

ゲーマーとしての蛇足。

自社のプラットフォーム上で潰せるサードパーティはなるたけ潰した方が実入りは良い。一強皆弱体制を作って、潰せないとこからは絞れるだけ絞る。iPod 税とか、あれ、サードパーティに要求しだしても驚かないよあたしゃ。SFC時代の任天堂みたいだが、当時の任天堂ほど他社と懸絶してるわけでも無い。その 点、iTMSの勢いは自分には不安要素。Winか*nixに移行するには、G5買ったばかりだし、マッキンテルも気になるし、5年は様子見。とかいいつつ、結局信者なのだった^^;

幸いにも。
GUIを迂回すればそこにあるのは*nixの一種ではある、、、ってよくわかんねぇけど。こんなもん見ちゃうとなんかまた別の信者になりそうだな。
posted by ばる at 02:11| Comment(1) | TrackBack(0) | mencoder | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
QTPlayerで1フレーム目を切ると「そのまま」行ける様です。
Posted by Y at 2005年11月30日 14:12
コメントを書く
お名前: [必須入力]

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

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

コメント: [必須入力]

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


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

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

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