最近思い出したようにx265で10bitエンコしてみようと思ったので一応まとめておこうかと
x265の10bitはやはり8bitのまま渡すより16bitなどでアップサンプリングしてからエンコードしたほうが良いのはx264と同様
ソースがTSファイルの場合x265はインタレ保持不可なのでついでにKTGMCで60fps化もする
・必要なもの(使用したもの)
Avisynth+ 3.7.3
AvisynthNeo r2827 (dllをavs4x26x.exeと同じ場所に置く)avs4x26x.exex265.exe
L-SMASH Works (muxer.exe remuxer.exeなど)
各種プラグインファイル
※x265やL-SMASHはrigaya氏のページにおいてあるのでそれを使う
x265はmuxerを内蔵していないのでmp4出力にはmuxerが必要なので注意
以下TSファイルの16bit化avsファイルの一例
#SetFilterMTModeのデフォルト値を設定(主にデフォルト値が設定されていないフィルター向けの設定、)
SetFilterMTMode("DEFAULT_MT_MODE", MT_SERIALIZED)
#メモリー使用量の制限 SetMemoryMax() 主にSetFilterMTModeの安定化のため
SetMemoryMax(2048, type=DEV_TYPE_CUDA)
##通常読み込み
D2VSource("Z:\2024年11月15日19:00.d2v")
##フィールドベースの宣言(トップorボトムファースト)
AssumeTFF
Trim()
OnCPU(2)
###KTGMC()などCUDA対応フィルタはOnCPUとOnCUDAで囲う
##60fps化
KFMDeint(mode=1, pass=0, preset="Slow", cuda=true)
OnCUDA(2)
###16bit出力
Dither_convert_8_to_16()
Dither_convey_yuv4xxp16_on_yvxx()
Prefetch(4)
return last 以前は60fps化にQTGMCなどを使うことが多く重かったのだが
RTX2080SUPER購入後はKFMによるGPU処理ができるようになったのでこの辺が非常に楽になった
KTGMCは単にQTGMCをGPU処理しているだけだがKFMDeintにすることで非常に高精度なフレーム補間を用いた60fps化ができる
また16bit化に際して以前はf3kdbを使用していたがDither Toolsを使ったほうがより高精度な16bit化が可能といった検証ページを見つけたのでこれも置き換え
これを実際にx265に食わせてエンコする際の設定は以下例
#avs4x26x経由でx265エンコードする
avs4x26x.exe --x26x-binary x265.exe --preset slow --crf 26 --input-depth 16 --output-dept 10 --keyint 150 --ref 4 --range limited --colorprim bt709 --transfer bt709 --colormatrix bt709 -o "enc.265" "%~n1.avs"
#後処理としてmuxer.exeでmp4結合する(fps指定は必須)
muxer.exe -i "enc.265"?fps=60000/1001 -o "enc.mp4"
#音声付きmp4を作成する場合は以下も実行
muxer.exe -i "enc.aac" -o "enc.m4a"
remuxer.exe -i "enc.mp4" -i "enc.m4a" -o "enc_mux.mp4"
※rigaya氏のx265は8bitと10bit両対応なので10bit出力オプションが使える
mp4出力する場合はfpsを指定しないと再生に支障が出る
バッチ処理用に書いたものを編集しているので所々変だが概ねこんな感じ
crf値はx264のときと比べ概ね+2に指定しても同等の画質ではないかと思う
実写の場合 24~26 アニメは 22~24
階調範囲は自分はTVのリミテッドレンジでエンコするのだがx264のときにあった
–input-range auto –range tv
という設定は使えない特に –input-range は項目そのもがなくなった
このへん詳しく書かれている所がなかったのだが恐らく
–range limited
と指定してプレイヤー側でPCレンジの設定にすれば正しくYC伸張されてるっぽい






コメントを残す