2020/05/16

【AviSynth】f3kdbの高ビット深度処理について

前回の記事 を見て少し困っていた方をお見かけしたので補足程度に書きます。

「stacked formatに変換した映像をf3kdbでデバンド処理し、interleaved formatに変換してavs4x26xに入力する」
f3kdbとavs4x26xを併用している方の多くはこのような高ビット深度処理をしているかと思います。
しかし、interleaved formatの状態でx265-Yuuki-AsunaにAVSを入力するとエラーが発生してエンコードできません。
なぜならx265-Yuuki-Asunaは High bit-depth (以下: HBD) をサポートしているからです。
わざわざ最上位ビット (MSB) と最下位ビット (LSB) に分けなければいけないレガシーな実装に頼らなくてすみます。

実際にいくつか例を書きます。
※映像ソース8bit -> 16bitを想定。フィルタリング処理以外のコードは省略しています。
# x265+f3kdb

Dither_convert_8_to_16()
f3kdb( input_mode=1, input_depth=16, output_mode=2, output_depth=16 )
ConvertFromDoubleWidth()

ConvertFromDoubleWidth() でinterleaved formatをHBD formatに変換しています。
これならx265にAVSを入力してもエラーは発生しません。
しかし現在私はf3kdbを使っていないのでこの方法は採用していません。
# x265+neo_f3kdb

ConvertBits( bits=16 )
neo_f3kdb( output_depth=16 )

これは Neo f3kdb を用いたデバンド処理です。
Neo f3kdbはHBDをサポートしているため従来よりも簡潔にコードを書くことができます。
特に理由がなければこちらの方法を推奨します。

x86版AviSynth+の場合


前回の記事でも書きましたがmsg7086氏はx86版のx265-Yuuki-Asunaを公開していません。
つまり自分でx86版x265をビルドしなければAVSの直接入力は不可能です。
この場合は GetProgramName で処理を分岐することができます。
# x265+neo_f3kdb

IS_A4X26X = is_program( program_name="avs4x26x" )

ConvertBits( bits=16 )
neo_f3kdb( output_depth=16 )
if( IS_A4X26X )
{
    ConvertToDoubleWidth()
}

avs4x26xに入力する場合に限り ConvertToDoubleWidth() でHBD formatをinterleaved formatに変換しています。
なおGetProgramNameについては Takuan氏の記事 が参考になると思います。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。