2006年05月31日

H264/AVC High profileの作成

【タグ】[mencoder][x264][mp4box][High profile]
【概要】QuickTime Player 非互換のH264/AVC High profileでmp4を作ってみた。
■MENCODER_PASS1
mencoder VIS24a_YumeTukai07.mpeg \
-nosound -ovc x264 -x264encopts \
threads=2:bitrate=1024:qp_min=15:qp_max=45:b_adapt:bframes=2:keyint=240:scenecut=55:cabac:deblock:direct_pred=3:qp_step=4:qcomp=0.6:psnr:\
pass=1:me=2:subq=2:frameref=1:no8x8dct:noi8x8:no8x8mv:nob8x8mv:noi4x4:no4x4mv \
-passlogfile VIS24a_YumeTukai07.264.log \
-vf pullup,softskip,crop=704:352:8:64,scale=640:352,hqdn3d=4:3:6,pp=l5,harddup \
-sws 9 -ofps 24000/1001 -of rawvideo -o /dev/null
※1stパスは従来通り。
■MENCODER_PASS2
mencoder VIS24a_YumeTukai07.mpeg \
-nosound -ovc x264 -x264encopts \
threads=2:bitrate=1024:qp_min=15:qp_max=45:b_adapt:bframes=2:keyint=240:scenecut=55:cabac:deblock:direct_pred=3:qp_step=4:qcomp=0.6:psnr:\
pass=2:me=3:subq=7:frameref=4:8x8dct:i8x8:8x8mv:b8x8mv:i4x4:4x4mv:\
nofast_pskip:weight_b:trellis=1:ratetol=4:mixed_refs:brdo:bime:b_pyramid:deblockalpha=0:deblockbeta=0 \
-passlogfile VIS24a_YumeTukai07.264.log \
-vf pullup,softskip,crop=704:352:8:64,scale=640:352,hqdn3d=4:3:6,pp=l5,harddup \
-sws 9 -ofps 24000/1001 -of rawvideo -o VIS24a_YumeTukai07.264
※High Profileの眼目は8x8dcti8x8はこれが無いと機能しな い。これでXvid同様、8x8のマクロブロックが使えるようになる。
b_pyramidのprofile は良く解らないが、ともかく使うとQuickTime Player が受け付けないのでせっかくだから、、、。
subq=6direct_predは2か1で ffmpegX版でも使える筈。
※2ndの結果は以下。
x264 [info]: using SAR=44/45
x264 [info]: using cpu capabilities Altivec
x264 [info]: slice I:353 Avg QP:18.57 size: 25758 PSNR Mean Y:46.32 U:46.39 V:47.67 Avg:46.51 Global:46.33
x264 [info]: slice P:15495 Avg QP:19.95 size: 8659 PSNR Mean Y:45.47 U:44.60 V:46.53 Avg:45.44 Global:45.20
x264 [info]: slice B:19377 Avg QP:21.21 size: 2313 PSNR Mean Y:44.81 U:43.72 V:46.02 Avg:44.75 Global:44.56
x264 [info]: mb I I16..4: 26.9% 59.5% 13.6%
x264 [info]: mb P I16..4: 6.4% 10.4% 2.5% P16..4: 52.9% 14.5% 6.3% 0.2% 0.1% skip: 6.8%
x264 [info]: mb B I16..4: 0.3% 0.6% 0.1% B16..8: 31.2% 0.9% 1.9% direct:13.8% skip:51.1%
x264 [info]: 8x8 transform intra:54.3% inter:58.4%
x264 [info]: direct mvs spatial:89.6% temporal:10.4%
x264 [info]: ref P 58.0% 24.0% 10.3% 7.7%
x264 [info]: ref B 71.9% 21.9% 3.9% 2.3%
x264 [info]: PSNR Mean Y:45.115 U:44.136 V:46.261 Avg:45.071 Global:44.846 kb/s:1024.10

Video stream: 1025.114 kbit/s (128139 B/s) size: 188264429 bytes 1469.218 secs 44033 frames
SEC ; 6243
TIME; 1:44.3
  1. 8x8dctを 使わない場合、mb I I16..4: 26.9% 59.5% 13.6%のうち2番目が0.0%になるので順番は16x16,8x8,4x4 かと。
  2. 続くP,Bは随分多いが、こちらはPフレームなのにマクロブロック・タイプi8x8を使うといった事ができる。さらに一辺16か ら一辺4までの順列組み合わせがある。規格上のマクロブロックをあらかたサポートしてるのはスゴいが、デフォルトで「妥当な判断」ができているのかどうか は判断材料が無い(もちろん自分の経験値不足)。少なくとも、とんでもねー量のチューニング作業が要りそうな印象を受けた。コマンドで調整できるものかどうかもナゾ。な んでそんな事気にするかというと、scenecutを55 まで上げても、数フレームしか無いシーンで激しいブロックノイズが見える事があるから。まぁ、素直にscenecut増やせばいーんだ けど、それぢゃ面白みが無い。
  3. skipはP,B専用。詳細不明だが、恐らく符号化を飛ばして参照フレームをそのまま表示するといったところだと思う。skip の判断の甘さが闇階調で出るブロックノイズの発生原因と思われる(フレーム単位で変化するので一般的なブロックノイズとはやや異なるが)。これはマルチパ スで分析を繰り返すApple-H264では出ない。しかし「時間がかかりすぎない事」も重視するx264はその方向へは進めないだろう。Pに関してはnofast_pskipで 判断精度を上げられる。まぁ、素直にビットレート増やせばいーんだけど、それぢゃ面白みが無い。
  4. directはB専用。direct_pred=3(auto) の結果、ダイレクトマクロブロック(Bフレーム専用)の動き予測情報を時間軸と空間軸から適した方を選択している。ハズ。いちいち動き情報を分析せず、符 号化済みのマクロブロックを元に生成しちまおうというもの。空間軸の方がゴーストが出にくいらしいが、動きの種類によっては時間軸の方が適切な場面もあ る。
  5. ref P、ref Bは参照フレームになっているP/Bと思われる。b_pyramidを 使わない限りref Bは出ない筈だ。
■FFMPEG_AUDIO
ffmpeg \
-i VIS24a_YumeTukai07.264 \
-i VIS24a_YumeTukai07.mpeg \
-y -vn -f mp4 -acodec aac -ar 48000 -ac 2 -ab 64 -map 1.1:0.0 \
VIS24a_YumeTukai07.aac.mp4
※これも従来通り

■MP4BOX_--mux
mp4box \
-fps 23.976025 \
-add VIS24a_YumeTukai07.264 \
-add VIS24a_YumeTukai07.aac.mp4 \
-new VIS24a_YumeTukai07.mp4
※「-fps 23.976025」を指定する事で以下のように映像のTimescaleが「24000」となる。24000/1001=23.97602397602 なので、ヘンな丸めかただが、、、
■MP4BOX_--info
mp4box -info VIS24a_YumeTukai07.mp4
* Movie Info *
Timescale 600 - Duration 00:24:29.175
Fragmented File no - 2 track(s)
File Brand isom - version 1

File has root IOD
Scene PL 0xff - Graphics PL 0xff - OD PL 0xff
Visual PL: AVC/H264 Profile (0x15)
Audio PL: AAC Profile @ Level 2 (0x29)
No streams included in root OD

Track # 1 Info - TrackID 1 - TimeScale 24000 - Duration 00:24:29.176
Media Info: Language "und" - Type "vide" - Sub Type "avc1" - 35225 samples
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
AVC/H264 Video - Visual Size 640 x 352
Self-synchronized

Track # 2 Info - TrackID 2 - TimeScale 48000 - Duration 00:24:28.949
Media Info: Language "und" - Type "soun" - Sub Type "mp4a" - 68857 samples
MPEG-4 Config: Audio Stream - ObjectTypeIndication 0x40
MPEG-4 Audio AAC LC - 2 Channel(s) - SampleRate 48000
Synchronized on stream 1
■再生
QuickTime Player Pro
映像白紙、音は出る。
従って、libavcodecコンポーネントが出れば再生可能と思われる。
冒頭のDelay Frameを「規格外」と認識し、様々な不具合がある(あたりまえ)。
映像のビットレートを取得できなかったり、冒頭フレームでシークするとムービー末端に飛ぶなど。
自分としては規格に拘るあまり使い勝手が悪いと思うが、自分で撮った映像を加工するプロ/セミプロにはむしろこうでなきゃ困る。とっつきも良いし。
MPlayer OSX または VLC 
無問題。
冒頭に入っている筈のDelay Frameを無視するようで、少なくとも自分の視覚では認識できず、再生/情報表示の問題もない。
x264cliで作成したrawvideo.264も冒頭にDelay Frameが入っていた事から、世間にあるもんはどーんと来なさい!な世界なのだろう。規格外でもなんでも再生 できませんじゃハナシにならない世界では、むしろこうでなきゃ困る。

■画質
闇階調のブロックノイズという点では僅かな向上があった、 かなぁ、、、、と言う程度。根絶はできていない。大半のシーンでは「問題が無い」という程度で、QuickTime Player での再生を捨てる程のメリットは特に感じなかった。ま、画質よりエンコードの方が面白いので。
posted by ばる at 00:00| Comment(0) | TrackBack(0) | mencoder-x264 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

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

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

コメント: [必須入力]

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


※画像の中の文字を半角で入力してください。

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

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