編集ツールの検証
PCで手軽にビデオ/LDをキャプチャしてDVDにしたい。しかしフリーのツールを使っているとどうもイマイチ信じ切れないところもある。こんなんではどうもスッキリしない、論理的にちゃんとした動作をしているのか否かちゃんと検証してやるってわけである。
1.モニター、ビデオカード、キャプチャボードをちゃんと調整する。(モニターとキャプチャボードのYUY2のとき参照)
2.キャプチャは704x480のYUY2で行い、huffyuv(YUY2)、AVI2で保存。音は16bit48kHzのPCM。(1時間30Gバイトくらいになる)
3.aviutlで読み込み、色タイミング補正-8/-8/0/0とYUY2フィルタを入れてプロジェクト保存。
4.TMPGEncで読み込み、DVD-NTSC(720x480)で画面中心に配置で、圧縮タイプをCQに、クオリティを70から80位に設定。最大は9400Kbpsに。音声はtoolame使用のMP2。
5.圧縮する。これで4500Kbpsから6000Kbps位になる。時間はAthlonXP2.0Gくらいで4倍くらいの時間。容量に不満ならクオリティを調整して圧縮のやり直し。
6.オーサリングして、焼く。
・2004年9月10日
-
実験くん by sentaro
先日の疑問「色変化の限界」から、他のキャプチャボードのサンプル画像を探していると、ここのページにテストパターンをキャプチャしているのを見つけた。そこのテストではVideoGate1000から出力したものをキャプチャしている。私はそんなものは持っていないので、いつものようにDVD化→プレイヤー再生(S端子)でMonsterTV2でキャプチャしてみた。
キャプチャしてみたのだが、先のページのMTVなどと比べると結果が悪い。どこまでがMPEG2化の問題で、どこまでがDVDプレイヤーの問題で、どこからがMonsterTV2の問題なのかははっきりしない(それは元のページでも同じだが)。ちなみにMPEG2にした段階ではこんなにひどくない(どころかほとんど問題ない)ことはわかっている。特に波形表示で階段状になっている(縦方向に数行補間が入っている)理由がわからない。DVDプレイヤーのせいだ...と思いたいのだが。
そして右の波形を見ると青線・赤線の立ち上がり立下りが斜めになっている(8ドット程度)。実験くんを見てもMTV2000でも2004HFでも同様である。そういうものらしい。
キャプチャ画面
おまけとしてビデオカード(RADEON9600XT)にあるビデオ出力機能を使ってビデオオーバレイをビデオ出力したものをキャプチャ。CAP画面、SWP、波形。どうしたわけかビットtoビットに調整できないので、特に輝度の特性はかなり悪い。その輝度も階調が荒い(ビット数が少ない?)。そもそも画面位置すらなってない。
・2004年9月9日
-
420->444補間フィルタ
どうもYC伸張フィルタの補間処理が気に入らない...というわけで作ってみた補間フィルタ。気に入らなかったのは上下方向にはキープオリジンでない点。こんな処理をしていては色情報が拡散してしまい境界があいまいになってしまう。特に420インターレースではその傾向が顕著だ。そこでこいつは単純に2x2ピクセルの中で左上は元のままで、他のピクセルは隣との補間のみとしてみた。
4:2:0->4:4:4補間フィルタ
-
m2v.auiの補間処理
ところで、M2V.AUIやDVD2AVI.VFPでMPEG2ファイル(4:2:0ソース)をいろいろ見ていたのだが、こいつらは自動的に色情報の補間処理を行ってくれる(M2V.AUIでは横には補間していないようだが)。そしてその処理は切ることができない。更に縦方向はすごいことをやらかしている。やっぱり元データを破壊していくのでaviutlのフィルタで元に戻すこともできない。
インターレースMPEG2をこいつらで読んで処理していると、実は結構ひどいことをされていたようだ(プログレッシブでも同じだが程度は低い)。幸いにして私はMPEG2ソースをいじることがないので助かっている。こうゆう補間が許されるのは画面に表示するとき(動画を再生するとき)のみだと思うのだが。再生時の補間は一般的に行われているわけだが、エンコード前のソース読み込み時にも補間されていると2重に補間され、色のにじみは更に進行してしまう。
4:2:0の場合、M2Vの補間では色の狂いは上下に波及して2ドットに影響する。インターレースの時には4ライン分で影響が出る。更に再生時にもこの処理が行われると6ラインに影響が出て、インターレースならば12ライン分である。なかなかひどい話ではないか。
m2v.auiでの読み込みは余計な処理が入らないことがミソなのだが、これでは台無しである。MPEG2キャプチャしてm2v+aviutlで編集後、MPEG2に再エンコードしてDVDにしているようなときには大問題である。たとえ何のフィルタもかけていないときでも、元の4:2:0の色データはエンコーダに渡るときには異なるデータ(周りの色がにじんでいる)として渡ってしまうのだ。YUV->RGBの変換がないなんて喜んでいる場合ではない。
ちなみに更新履歴によれば、一時期補間処理をなくしたところ不評だったので元に戻したという。また日記を見るとこの補間処理は結構重いようだ。
m2v.auiにはソースがあるので簡単に直せる...と思ったのだが、SSEやら何やらでVC6ではうまくコンパイルできなかった。どうしたものか。(作者はIntel Compilerを使っているようだが。)
-
m2v補間なし
このままでは気がすまないのでM2Vのソースを会社のVC.NETで試しにコンパイルしてみた。VC.NETでのDLL作成や.ASMのアセンブルなんかやったことなかったので難儀したが、何とか完了。結局はプロジェクトの変更(Makefileの変更のようなもの)だけで、ソース自体はいじることなくコンパイル・リンクできた。で問題の補間処理はframe.cで行われている(MMX/SSEは別だが)。とりあえずMMX/SSEなしのときのみは補間しないものを作ってみた。変更したframe.cも付属している。
M2V-NOINTER.ZIP
これでTMPGEncでのエンコード結果やMPEG2キャプチャしたデータそのものがAVIUTLで確認できる。当然色も4:2:0でAVIUTLに取り込める(aviutlの問題によりYUY2フィルタは必要だが)。
m2v.auiオリジナル。補完された結果、インターレースなので合計4ラインに渡って異なる色が出ている。しかもまだらに。 |
改造版。補間処理がないので、当然きっちり分離している。 |
・2004年9月6日
-
704x480キャプチャ
このような縞模様(黒5ドット白4ドット)の720x480のビットマップを作る。これを複数のフレームにしてTMPGEncでMPEG2にエンコードしてDVDに焼く。これをDVDプレイヤーで再生したものをキャプチャしてみる。元のビットマップは黒いラインが80本ある。
MonsterTV2でキャプチャしてみると、黒いラインは78本(とちょっと)。これは720x480のときも704x480のときも同じ。そして704x480の時には元のビットマップとラインの間隔がぴったり一致するが、720x480の時には横に微妙に伸びたものとなっている。
つまりアスペクト比を一致させるためには(このボードの場合は)704x480でキャプチャする必要がある。
上の図で真ん中が元のビットマップ、下が720x480でキャプチャしたもの、上が704x480でキャプチャしたもの。
-
aviutlでのYUY2展開
このような色のついた縞模様(青4ドット→黒4ドット)のビットマップを作る(図は8倍に拡大)。
これをaviutlの波形表示でみると、このように色が4ドットごとに変化している。(右は点の間を線で結んだもの)
これを未圧縮(RGB24)aviで保存して、開きなおしてもまったく同じになる。
一方、このビットマップをYUY2非圧縮で保存して、再びaviutlで開くとこうなる。(右は線で結んだもの)なんか変だ。1点だけ変なところに飛んでいる。
このビットマップをTMPGEncでmpeg2にする。それをdvd2aviでプロジェクト保存してaviutlで開く。これはRGBで展開していることになる。MPEG2になっているとはいえ、まあまともである。DVD2AVIでの補間処理が入っているようだ。
同じくmpeg2をm2v.auiで開く。これはYUY2で展開ということ。補間処理はないようだが、やっぱり変だ。
これらのYUY2展開をよーく見ると、YUY2(4:2:2)の左ピクセルは正しいが、右ピクセルは一つ前(左隣)のYUY2色情報との間の平均を取っているようである。やるならば次の(右隣の)YUY2色情報との平均を取らないといけないのだが。これがaviutl0.99のYUY2展開のバグ。
-
色変化の限界
(これはキャプチャボードの限界なのか、DVDプレイヤーの限界なのか、S端子の限界なのかわからないが)
先ほどのMPEG2(青4ドット黒4ドットの縞模様)をDVDに焼いて、それをRGBキャプチャする。それを波形表示してみると...変化をちゃんと再現できない。かろうじて周波数は読み取れなくもないが。どこかにローパスフィルタがあるかのようだ。
今度は青8ドット黒8ドットの縞模様にしてみる。それを同様にRGBキャプチャ。周波数はいいが、変化はかなり緩やかだ。
一方でYUY2キャプチャ。先の説明どおりにめちゃくちゃ。右はYUY2フィルタをかけたもの。ある程度まともっぽくなる。
-
YUY2キャプチャ
どーせ色はいじってないし、色タイミングも-8にするかどうかというところ。それならば容量の少ないYUY2でいいやって感じ。色をいじりたい(ソースが汚い)ときにはやっぱりRGBにしている。
-
AVI2キャプチャ
今まではずっとAVI1独自でキャプチャしていた。一定間隔で分割されるので、余分にキャプチャしたとき(キャプチャしたまま放っておいたとか)にファイル単位で消せてディスクの節約になったりして便利だった。しかしドロップフレームの扱いがないのでドロップした時にはどうしても音がずれる。
音ずれはさすがに厳しいので、しかたなくAVI2でキャプチャしている。AVI2分割ってのはないのかねぇ。
・2004年8月28日
-
4:4:4->4:2:0化フィルタ0.02
人からの指摘でフィルタを見直していると...4:4:4->4:2:0フィルタの「平均」の取り方がおかしかった。平均関連はみんな。ついでに4:2:0時のサンプリングをCrは左上、Cbは左下に変更した。というわけで作り直したものに差し替えておく。
4:4:4->4:2:0フィルタ(0.02)
まあこのフィルターは私は使っていないのだが。
-
現状
久しぶりなので、現状報告。
1.モニター、ビデオカード、キャプチャボードをちゃんと調整する。(モニターとキャプチャボードのYUY2のとき参照)
2.キャプチャは704x480のYUY2で行い、huffyuv(YUY2)、AVI2で保存。音は16bit48kHzのPCM。(1時間30Gバイトくらいになる)
3.aviutlで読み込み、色タイミング補正0/-8/0/0(ものにより0/0/-8/-8や-8/-8/0/0)とYUY2フィルタを入れてプロジェクト保存。
4.TMPGEncで読み込み、DVD-NTSC(720x480)で画面中心に配置で、圧縮タイプをCQに、クオリティを70から80位に設定。最大は9400Kbpsに。音声はtoolame使用のMP2。
5.圧縮する。これで4500Kbpsから6000Kbps位になる。時間はAthlonXP2.0Gくらいで4倍くらいの時間。容量に不満ならクオリティを調整して圧縮のやり直し。
6.オーサリングして、焼く。
なんだよ結局YUY2かよ、とか、なんで704x480?とかいろいろあるが、今はこうしている。理由は後で書いてみるかもしれない。
-
アニメ系
ほとんど手をつけていなかったこの分野。どうやら24fps化してBフレームを3〜7位に増やすのが良さそうなのだが。
うちのLDプレイヤーはYC分離がタコで、盛大にドット妨害が出る。そこでビデオデッキの3DYC分離を使えばいいやと思っていたのだが、いざやってみると動いた後にはドット妨害の跡が。解像度がえらく高くて色にじみが皆無なのはすばらしいのだが、点々が追加されているのが一目で分かってしまって話にならない。説明書を調べてみると、このデッキには3D Y/Cボタンがあり、標準のほかにシネマ(動き重視)とアート(静止画重視)に切り替えられることがわかった(今更...)。また三次元といいつつ、動きのない部分は3次元で、動きのあったところは2次元で処理するという。アートにしてみたらドット妨害はかなり軽減された。他の3DYCでも同様だと思われるので、この辺で妥協するしかないようだ。というか、これって結構いいやつなのでは?
一方でCAV再生不可という問題があるので、別のLDプレイヤーが必要なのは確かなのだが。
またaviutlには再YC分離フィルタなるものがあり、同様の処理を行うようだが、私にはうまく調整できず、ビデオデッキのやつ以上の結果は得られなかった。(というよりは盛大にドット妨害が出て抑えられなかった)めちゃめちゃ重いし、解像度は上がらないしで私には無用のもののようだ。
-
ATI RADEON 9600XT
ビデオカードをnForce2内蔵からATIのRADEON 9600XTに変えている。ATIは最初からビデオオーバレイの調整が行われているので、再調整の必要がないし、彩度も合う。それはいいのだが、nForce2と違ってビデオオーバレイが汚い。ちょうどnForce2ビデオのビデオオーバレイの輝度・コントラストを落として合わせたような状態である(やっていることは同じだと思われる)。正直、ビデオを見るには適していない。私はこれで色合わせをする気にはなれない。まあ私はPC上では合わせていないんで問題はない。(結局CRTが壊れてもっとキツイ目に合うことになるのだが)
・2004年2月17日
-
キャプチャの基本方針決定
ここまでかかってようやく「ちゃんとした」DVD化用MPEG2の作成方法がわかった。わかっている範囲では次の方法がベストだ。
1.モニター、ビデオカード、キャプチャボードをちゃんと調整する。(モニターとキャプチャボードのRGBのとき参照)
2.キャプチャはRGB24で行い、huffyuv(RGB)で保存。(1時間60Gバイトくらいになる)
3.aviutlで読み込み、色タイミング補正-4,-4,-8,-8を入れてプロジェクト保存。
4.TMPGEncで読み込み、DVD-NTSCで圧縮タイプをCQに、クオリティを70から80位に設定。最大は8000Kbpsのまま。
5.圧縮する。これで4500Kbpsから6000Kbps位になる。時間はAthlonXP2.0Gくらいで4倍くらいの時間。
6.オーサリングして、焼く。
ただこれは何の手も加えていない状態(=普通にDVDレコーダーに録画したのと同じ状態)。ここからソースの出来によって色補正したりとかノイズ除去とかの手を加えたりとかするわけだが、それはこれからの課題だ。ビデオソースだと結構ひどいものもあるし。またアニメ絵などには別のテクニック(ノイズ除去や24fps化など)があるようだが、それも未開拓。
そして音楽物のときにはLPCMにしたいのだが、LDには44.1kHzで入っているのを48kHzに変更しないといけない。TMPGEncにあるものとか、SSRCとか使ってみたが、どうも出来がよくない(主観)。LDから出てくるアナログ音を48kHzでアナログキャプチャしたほうがいいと感じるくらいだ。ここの研究も必要だろう。
#実はアニメと音楽物以外は(ほとんど車ものだが)取ってしまっていたりする。次のソースに手を出す前に、また研究が必要なのかと思ってちょっと億劫になっている。
・2004年2月15日
-
CbCr補間と4:4:4->4:2:2化フィルタ
aviutl0.99ではYUY2読み込み時には色情報を共有した2ピクセルに対して補間を行って内部YUV(4:4:4)に展開している。このとき左ピクセルは元のまま、右ピクセルは周り(上下左右)と補間したものになるらしい。結果、いろいろと弊害が出てくる。本当はビデオ編集ツールとしては、元の情報をそのまま取り入れ、その辺の補間処理などはフィルターに任せた方がいいんじゃないかと思う。ちなみにRGB->YUY2の時には左ピクセル位置の情報を採用するのがルールのようである。
というわけで「左ピクセルは元のまま(left origin)」なことを利用して、左ピクセルの色情報を右ピクセルにコピーして元のYUY2の色情報に戻すフィルタを作成した。aviutlのYUY2読み込みのときにこのフィルタを真っ先にかけると、元の情報に戻って色タイミング補正などがやりやすくなる...と思う(実は効果がよくわからない)。
また各フィルタ間でこれをかけることで、YUY2モードのように振舞うこともできる。
RGB出力の時には最後にこのフィルタをかけることで、その後の(MPEG2とかDivXとかにしたときの)状態をシミュレートすることができる。(オーバレイで確認できるから不要かも)
YUY2フィルタ
今のところ設定類は一切ない。4:2:2の他に4:2:0とか4:1:1とか、左オリジンでなく補間を取ってみたりするオプションを付けても面白いかも。
意味がわからないなら使わない方がいいだろう。「プレビューでゴミが出るんですけど」なんて言われそうだし。それはYUY2の色情報を共有していることの問題が目に見える形になっただけだ。
この辺の色ゴーストについてはこっちのページにまとめた。
とりあえず4:2:0にするフィルタも作成してみた。
4:4:4->4:2:0フィルタ(0.01)
わざわざYUY2と分けているのは、役割が異なるからだ。YUY2フィルタはYUY2読み込みしたときに最初にかける。4:2:0フィルタは最後にかけて次のエンコーダが使う情報をシミュレートするときに使う。4:2:0フィルタはエンコード時にははずした方がいいだろう。
このYUY2フィルタにより、キャプチャ時に色データを壊されているのは編集上都合が悪いこと思うようになった。そこでわたしはRGB24キャプチャを使っていくことにした。60Gの空きで1時間しか取れないのが痛いが...これはYUY2での倍に近い。
http://www10.plala.or.jp/p205tb16/video5.html
坂井瑞穂