画像やリンクが無効になっている可能性もあるのでご了承下さい。
はじめに
今まで HEVC エンコをするときはオフィシャルのソースを自分でビルドしたバイナリを用いてきた。
何年も自ビルドしたバイナリでやって来たけど、Mod なバイナリは無いのかなーと探していたら Yuuki Asuna Mod という物を見つけた。
ソース
バイナリのダウンロード先
ダウンロードしてみる
オフィシャル (?) ビルドされた Mod のうち、現行最新の x265-Asuna-3.4+13-g729a838d3+38.7z
をダウンロードし、アーカイブ内の x265-gcc-10-lite.exe
を使用する事にした。
Mod 版の大きな利点
この Mod を使用するに値する大きな利点。それは avs ファイルを直接入力することが出来ること。
今までは avs4x26x に avs ファイルを読ませ、フィルタを適用した映像を x265.exe に渡して貰うことで AviSynth+ を使用したエンコードを実現していた。
こう言う余計な手間が不要になり、--input source.avs
なんて感じに入力ファイルとして avs を渡して上げるだけで OK と。これは素晴らしい。
実際に使って見る
先ずはテストでコマンドラインより引数をアレコレし、常用している avs ファイル経由のエンコードをやってみた。
ソースはアニメの TS ファイルを DGIndex で demux した d2v ファイル。
序盤は 10bit エンコを明示的にしたいからと --input-depth 10 --output-depth 10
とった感じに引数を与えていたが、どうもこれは NG な様で “例外コード 0xc0000005” なアプリケーションエラーが発生して落ちるもんだからエンコード不能だった。
別件であちこち情報を集めていたとき、10bit バイナリで --output-depth 10
を付けるのはダメって言うような事を小耳に挟んだのでこれを外した所、普通にエンコードが完走するようになった。
--output-depth 10
は付けちゃダメそんなトラブルを乗り越えつつ、avs ファイルをちょっと弄ったり x265 自体の引数を調整した。
avs でちょっと弄ったところは f3kdb によるデバンドをコメントアウトして残しつつ、neo_f3kdb に変更。色深度を内部 10bit 化した。
一部ファイル名を適当に変えつつ、実際に適用した avs は次の通り。
SetMemoryMax(8192)
SetFilterMTMode("DEFAULT_MT_MODE", MT_SERIALIZED)
SetFilterMTMode("EraseLOGO", MT_MULTI_INSTANCE)
SetFilterMTMode("KNLMeansCL", MT_MULTI_INSTANCE)
SetFilterMTMode("MPEG2Source", MT_NICE_FILTER)
SetFilterMTMode("TDeint", MT_MULTI_INSTANCE)
SetFilterMTMode("TFM", MT_MULTI_INSTANCE)
SetFilterMTMode("TDecimate", MT_SERIALIZED)
SetFilterMTMode("UnsharpMask", MT_MULTI_INSTANCE)
SetFilterMTMode("eedi3", MT_MULTI_INSTANCE)
SetFilterMTMode("nnedi3", MT_MULTI_INSTANCE)
PluginPath = "C:\AviSynth+\plugins64+\"
LoadPlugin(PluginPath + "MPEG2DecPlus64.dll")
LoadPlugin(PluginPath + "warpsharp.dll")
LoadPlugin(PluginPath + "TDeint.dll")
# Load
MPEG2Source("demux.d2v")
AudioDub(last, WavSource("faw.wav"))
# Trimming
Trim(486, 53531)
# DeLogo
EraseLOGO(logofile="hogehoge.lgd",pos_x=0, pos_y=0, depth=128,yc_y=0, yc_u=0, yc_v=0,start=0, fadein=0, fadeout=0, end=53045,interlaced=true)
# DeInt
AssumeTFF()
TIVTC24P2()
# DeNoise
KNLMeansCL( D = 1, A = 1, h = 2 )
# ReSize & DeBlock
Spline36Resize(1440, 1080)
PointResize(1440,1088,0,0,1440,1088).BlindPP( quant=6 ).Crop(0,0,1440,1080)
# Effect
UnsharpMask(18, 5, 10)
ConvertBits( bits = 10 )
neo_f3kdb( output_depth = 10 )
#f3kdb(range=15, Y=96, Cb=64, Cr=64, sample_mode=2, blur_first=true, dynamic_grain=false, opt=-1, mt=true, \
# dither_algo=3, keep_tv_range=true, input_mode=0, input_depth=8, output_mode=0, output_depth=8)
Prefetch( threads = 8 )
return last
function TIVTC24P2(clip clip){
Deinted=clip.TDeint(order=-1,field=-1,edeint=clip.nnedi3(field=-1))
clip = clip.TFM(mode=6,order=-1,PP=7,slow=2,mChroma=true,clip2=Deinted)
clip = clip.TDecimate(mode=1)
return clip
x265 の引数は余り代わり映えしないかんじ。--output-depth 10
を除去した程度かなと。
S:\tsenc\bin\x265-gcc-10-lite.exe --crf 19 --preset medium --aq-mode 3 --aq-strength 0.6 --sar 4:3 --input-depth 10 --colorprim bt709 --transfer bt709 --colormatrix bt709 --output test.mp4 --input S:\tsenc\test.avs
これでエンコード速度は 42,436 フレームを処理して 37.7fps となった。自ビルドしたバイナリでは 40.09fps 出ていたが 10bit 処理に変更した事と、f3kdb
から neo_f3kdb
にフィルタを変更していることも影響していると思われる。
取り敢えずこの程度の速度低下は内部 10bit 処理をさせるだとか言った今回の変更からすれば許容範囲なので、以後は x265-Yuuki-Asuna Mod を使っていきたいと思う。
おわりに
ずっと昔から x264 は avs 直で行けるのに x265 はなんで対応しないんだろうかなーと思っていたが、これに対応した Mod が出ていたなんて言うのは嬉しい発見だった。
これで少しエンコードの幅が広がったと思うので、余りエンコード速度を落としすぎない程度に調整していこうかなと思う。
コメント