2005年11月16日

mencoderでx264は使い物にならない?

【概要】Doom9--bond氏の実験。
【タグ】[x264][.mp4][MEncoder]
ネタもと:Doom9's Forum > MPEG-4 and Co.  > MPEG-4 AVC以下の、mencoder+x264スレ。

当該スレは2004/9月27日に立てられた。mencoderでx264書き出しに関するカキコは2005/2月20日の発言番号#145(bond 氏)が最 後。スレは現存するが、以後、事実上、無人状態(最終カキコは2005/7月9日だが)。2005秋現在、DTV板、Doom9ともにx264cliが主 流。

結論としては、AVC-in-AVIのみならず、AVC.mp4の作成ルートにMEncoderを参加させるのは大きな困難 が伴う。という事になる。

スレ自体それなりに長く、自分の知識・経験では難しい。bond氏の使用ツールも正確には不明だ。んが、#145までを抜粋訳(それでも長い)。次に #145の訳を試みる。

  1. #145 までの流れ
    1. 人 名
    2. おもな発言
    3. こ こまでのまとめ
  2. #145 -- bond氏の実験 -- 2005/02/20

#145 までの流れ

人 名

  • bond:Doom9,MPEG-4 AVC板のモデレータ。P-3,800mhz使用。自力ビルドはできない。
  • akupenguin:x264開発者。学 生。アニメにハマってコデック開発に手を出す。元々デー タ圧縮が専門。ffmpeg/MEncoder のDEVにも関係あり。

おもな発言

  • bond -- 2004/12/27--#81
    • mencoderが出力するフレーム枚数が2枚多い(avi2raw で見ても two zero length frames と表示)。.logのフレーム数は正しいようだ。
    • 2パス、コマンド例。--#88
    • "C:\path to\mencoder.exe" -ss 00:00:00.400 -frames 1000 -sws 9 -vf crop=720:416:0:82,scale=640:256,harddup "C:\path to\source.vob" -ovc x264 -x264encopts pass=1:qp_constant=22:cabac:deblock:frameref=3:subq=4 -o NUL: -passlogfile "x264_2pass.log"
      "C:\path to\mencoder.exe" -ss 00:00:00.400 -frames 1000 -sws 9 -vf crop=720:416:0:82,scale=640:256,harddup "C:\path to\source.vob" -ovc x264 -x264encopts pass=2:bitrate=650:cabac:deblock:frameref=3:subq=5 -of avi -ffourcc VSSH -o output.avi -passlogfile "x264_2pass.log"
    • *映像を 0.4sec無視している、、、。
  • akupenguin --#96
    • mencoder のでのエンコードで常に冒頭に "1 duplicate frame(s)!" が出るのはmencoder の A/V sync algorithmの問題。VOB素材で多い。x264の問題ではない。素材に問題が無い事が確実 なら、"-noskip -mc 0" を、mencoder のA/V sync補正が必要なら、"-vf harddup"を。 (ゆくゆくはx264に skip-frame encoding を付けたい)。
  • bond 
    • ではmpeg4ipの言う "zero length frames" は実は存在しない?(彼はサンプルファイルをアップ済み)。
  • akupenguin --#98
    • zero length framesは入ってる。mencoderが付加するもので、x264のせいじゃない。 mencoder doc にはavi中の zero frameは問題無いが、remuxする予定ならharddupで発生を回避せよと ある。
  • bond --#99
    • -noskip, -mc 0, harddupを使っても、zero frameが2枚残る。
    • ツールはmpeg4ipの h264.exe。raw avc streamを分析。
    • コマンド:
    • "C:\path\mencoder.exe" -ss 00:00:00.400 -noskip -mc 0 -sws 9 -vf crop=720:416:0:82,scale=640:256,harddup "C:\path\matrix1.vob" -ovc x264 -x264encopts pass=1:qp_constant=22:cabac:deblock:deblockalpha=-3:deblockbeta=-3:frameref=3:subq=4 -o NUL: -passlogfile "x264_2pass.log"
  • akupenguin --#100
    • mpeg2 decoder delayだ! これは "-vfm ffmpeg" で1フレームに減らせる。(デフォルトのlibmpeg2はこの他にシークに問題が生じる(produces garbage for the next B-frame)。なんでこれがまだデフォルトなのか解らない)。自分は huffyuv (now ffvhuff)を常用するから手許では気が付かなかった。
  • bond --#101
    • "-vfm ffmpeg": 3 zero length frame発生
    • libmpeg2  : 2 zero length frame発生
    • コマンドは同じ: ("noskip, harddup.."などでも差は無し)
      mencoder.exe -ss 00:00:00.400 -frames 100 -noskip -mc 0 -sws 9 -vf crop=720:416:0:82,scale=640:256,harddup "C:\path\matrix1.vob" -ovc x264 -of avi -ffourcc VSSH -o mencoder.avi
  • akupenguin --#102
    • -noskip が (B-frames使ったとき?) 冒頭に null frameを入れる事があるようだ。harddup-mc 0 有り、-noskip抜きで試してみて。
      バグリポートにすべきかもしれないが、開発者の大半はmencoderに触れたがらないし、 自分にも直せるかどうか。
  • bond --#130  
    • (*他のソフトとかも試した後に*)
    • 問題はx264 なのか、vfw interfaceが b-frameを正しく扱えないせいなのか、それとも virtualdub (which always had a problem with outputting frames at the end of the stream, i assume its the same here too)なのか、わからない。

こ こまでのまとめ

  • mpeg2 decoder delay -- mencoderのmpeg2デコーダにも問題がある。
    • -vfm ffmpeg:ffmpegのmpeg2デコーダ、問題はあるがマシらしい。
    • -vfm libmpeg2:デフォのmpeg2デコーダ、問題が多いらしい。
    • $ mplayer -vfm help:選択肢一覧。mpeg2デコーダは上の2種のみ。
  • 開発者の大半はmencoderに触れたがらない
    • コア部分のコードはぐちゃぐちゃ。2003にMPlayer G2プロジェクトが発足しているが、開発はアクティブとは言えない。コデックとdemuxerはffmpegに移管の見込み。G2はコアとAPIの書き直 し。現行の-vfはそのままの予定。:参考記事
  • 冒頭に "1 duplicate frame(s)!" が出るのはmencoderの A/V sync algorithmの問題。VOB素材で多い。
    • 素材に問題が無いなら、"-noskip -mc 0"
    • mencoder のA/V sync補正が必要なら、"-vf harddup"。
  • その他、Tips。
    • -o /dev/null:出力ファイルを書かない(ブラックホールに書き出すようなもの)。UNIX系全般で使える。2パスの 1stでログだけ欲しい時に便利。winでは"mencoder -o NUL:"。
    • ffmpegの.mp4コンテナサポートはまだまだ。
    • h.264を.mp4コンテナに収めるやりかたはmpeg-4 part 15に定義有り。

#145 -- bond氏の実験 -- 2005/02/20

 実験1
  • -frames 100:100フレームだけエンコード
  • b-frames なし (default setting)
  • cdの最新コンパイル版 (最新アップデートではない):不明
  • .avi書き出し。
  • avi2raw(mpeg4ipの中の1ツール)で.264抽出:(rarewareのmpeg4ipツール(mac版)にはない。
MEncoder avi2raw
no. -vfm noskip harddup エンコード中の
 "1 duplicate frame(s)"
 message 
zero length frame 書き出しフレーム数
1 ffmpeg - 1 98
2 ffmpeg - 3 97
3 ffmpeg - - 2 97
4 libmpeg2 - 0 99
5 libmpeg2 - 2 98
6 libmpeg2 - - 1 98
分析
  • -noskip を使わないと、 1フレーム消失 (zero lengthではないもの)。  (エンコード中の "duplicate frame"と呼ばれるもの) 。zero frame問題とは無関係。ffmpeg、libmpeg2 とも出力は 1 frame 減る。
  • -noskip を使うと、zero length frameが2枚発生。ffmpeg、libmpeg2 とも同じ。
  • -noskip に無関係の事柄
    • -vfm ffmpegはzero length frameを2枚生成。
    • -vfm linmpeg2はzero length frameを1枚生成。
    • -vf harddupはzero length frameを1枚除去。ffmpeg、libmpeg2 とも同じ。
  • -mc 0はあっても無くても影響しない。
 実験2
  •  入力ファイルは、direct .avs
  • フレーム数50
  • 結果
    • b-frameの有無に関わらず、出力は常に1フレーム多い。(51 frame)
    • 最終フレームが重複しており、zerolength frameではない模様。
    • b-frame1枚設定では 1フレームが削られる。 (51-1 = 50 frames)
    • b-frame2枚設定では 2フレームが削られる。  (51-2 = 49 frames) 以下同様、、、
    • "-mc 0", "-noskip", "-vf harddup" を各個に切り替えても同様。
    • 出力形式が avi でも rawvideoでも同様。
mencoder は 100% 正しく動作していない気がする。

* * *
さて、どうしたものか。
posted by ばる at 01:05| Comment(0) | TrackBack(0) | mencoder-x264 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

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

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

コメント: [必須入力]

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


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

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

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