前回x264のインタレ保持できない考察を書いた
今回は少し違う角度から考察
自分はAviutlを主に使用してエンコードしているが
Aviutlはavi以外のコンテナは基本読み込めない
TSやVOBなどMPEG2はDGIndexを経由して読み込む
MPEG2の色空間はYV12なのだが
AviutlはYUY2もしくはRGB24の色空間しか受け付けない
つまりd2v経由だと一度YV12→RGB24への色空間変換が行われる
このときソースがインターレースの場合インタレ情報が破綻する可能性がある
YV12だけの問題なのかはたまたYUV系列全体の問題かは不明だが
しかしインタレ解除する分には今まで問題が起きたことはないし
気にしすぎなのかもしれないが・・・
取りあえずインタレ保持する場合にはこの辺も考慮したほうが良さそう
そもそもAviutlを使用してYV12ソースをエンコすると
YV12→RGB24(編集用RAW)→YUY2(Aviutlの中間ソース)→YV12(x264 NV12)
という色空間変換が2回とダウンサンプリング1回で計3回も変換される
これにさらに3D系NRやらもろもろでインタレ情報はぐちゃぐちゃに?
つまりAviutlはあんまりインタレ保持には向いてない
Aviutl使うならフィルタはなるべく使わない
さらにインタレを保持したYUY2変換(アップサンプリング)が必要
ちなみにYUY2の場合は
YUY2→YC48(Aviutl内部規格)→YUY2→NV12
となるがYUY2⇔YC48は無劣化変換らしいのでこれでインタレは崩れないはず
幸いDGIndexにはインタレ保持アップサンプリングの機能がある
ただしAvisynthが必要なのでこの際Avisynthも勉強しちゃおう
Avisynthはあらかじめインストールしたものとして
取りあえずコマンドはソースの読み込みのみだが
DGDecode_MPEG2Source(upConv=1, icc=true, "d2vファイルパス")
upConvコマンドがYUY2変換のコマンドでiccはインタレ保持のオプション
これでインタレ保持したYUY2変換が可能になる
これを書いたavsをAviutlに読み込めばおk
ただし前述したようにNRなどのフィルタを噛ますとインタレ破綻するので
どちらにせよAviutlを使用するメリットが薄れるのだが・・・
なのでインタレ保持時はAviutlはCMのカット編集とチャプター編集に使い
実際のエンコはavsをx264に直接放り込んでさせる方法がベストか?
取りあえず次回あたりにAvisynthでのエンコードまとめを書こう






コメントを残す