HEVC エンコードのバイナリを x265-Yuuki-Asuna に変更してみた

Software
この記事は約7分で読めます。
スポンサーリンク

はじめに

 今まで HEVC エンコをするときはオフィシャルのソースを自分でビルドしたバイナリを用いてきた。
 何年も自ビルドしたバイナリでやって来たけど、Mod なバイナリは無いのかなーと探していたら Yuuki Asuna Mod という物を見つけた。

ソース

msg7086/x265-Yuuki-Asuna
A fork of x265. A modded version. Contribute to msg7086/x265-Yuuki-Asuna development by creating an account on GitHub.

バイナリのダウンロード先

index · powered by h5ai 0.29.0 (http://larsjung.de/h5ai/)
index - powered by h5ai 0.27.0 (

ダウンロードしてみる

 オフィシャル (?) ビルドされた 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 を付けるのはダメって言うような事を小耳に挟んだのでこれを外した所、普通にエンコードが完走するようになった。

x265-Yuuki-Asuna Mod の 10bit バイナリで --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 が出ていたなんて言うのは嬉しい発見だった。
 これで少しエンコードの幅が広がったと思うので、余りエンコード速度を落としすぎない程度に調整していこうかなと思う。

スポンサーリンク
著者プロフィール
ぶっち

本格的に PC へ触れ始めてたのは 1990 年位から。
興味は PC 全般。OS は Windows と Linux などを嗜む。
プログラマやネットワークエンジニアを経てフリーに活動している 2 児の父なアラフォーのおじさんです。

ぶっちをフォローする
ぶっちろぐ

コメント

タイトルとURLをコピーしました