画像やリンクが無効になっている可能性もあるのでご了承下さい。
PC で録画した番組のうち、これは繰り返し見そうだなーって物に限って丁寧にフィルター通して HEVC エンコをしているが、CPU を Ryzen 5 1600 から Ryzen 7 1700 に交換したところ上手いことエンコが出来なくなってしまった。
筆者が自分なりに書いている avs ファイルは 1 行目で SetMTMode のモードとスレッド数を 0 とした auto に。それ以降プラグインの読込を行っている。
SetMTMode(2,0)
#********** Initialization *******************************************
PluginPath = "C:\AviSynth\plugins\"
LoadPlugin(PluginPath + "GScript.dll")
LoadPlugin(PluginPath + "LoadPluginEx.dll")
LoadPlugin(PluginPath + "_GPU25.dll")
LoadPlugin(PluginPath + "warpsharp.dll")
LoadPlugin(PluginPath + "TDeint.dll")
LoadPlugin(PluginPath + "TIVTC.dll")
LoadPlugin(PluginPath + "ThreadRequest.dll")
LoadPlugin(PluginPath + "MSharpen.dll")
#********** Loading
DGDecode_MPEG2Source("D:\TS\temporary\demux.d2v")
AudioDub(last, WavSource("D:\TS\temporary\faw.wav"))
(以下略
このスクリプトで Ryzen 5 1600 までなら何ら問題無くフィルター処理をしつつエンコードが可能だったが、Ryzen 7 1700 ではエラーを吐いてエンコード不能になる。
原因は 1 行目の SetMTMode(2,0) にあってスレッド数を auto とするのがマズかったようだ。
0 としているところを明示的に指定する必要があったので、CPU のコア数 (スレッド数) x1.5 となる 24 を指定した
SetMTMode でスレッド数を自動設定させると Ryzen 7 は 8 コア 16 スレッドなので SetMTMode(2,16) と指定するのと等価となる。しかし SetMTMode でスレッド数を 12 以上に設定すると漏れなくエラーを吐く箇所が激増すると改めて判明した。
その為に Ryzen 7 の全スレッドを使い切るのでは無く、
SetMTMode(2,12)
とする事で余計な調整をする事なく解決した。
これに気付くまで結構時間かかってしまったので、解決する前なんかは「どうしようかこれヤバい奴か…?!」なんてちょっと焦りも入っていたり。
決め打ちして長いことパラメータ弄ってないようなスクリプトも偶には見直しをしてみないとだ……
-
2017/08/04 23:41
初稿の内容では打ち消し線を入れた文面の解釈をしていたが、スレッド数を多く指定するとエラーを回避するための調整が多く必要で、尚かつ Avisynth で処理するフィルターで CPU が 100% に張り付いたままエンコード速度がもの凄く遅くなる現象に見舞われたりした。
なんとかならないものかとスレッド数を Ryzen 5 1600 の時と同じ 12 とする事ですんなり解決したので記事の修正をおこなった。 -
2017/08/17 8:40
更にスクリプトの見直しをしていたところ、逆テレシネ&インタレ解除として TIVTC24P を使用していた物を 「TDeint(mode=0, order=1, type=3, tryweave=true).TDecimate(mode=1, hybrid=0)」に切り替えたら SetMTMode(2, 16) 等としてもエンコードが出来る様になった。尚かつ TIVTC24P よりも圧倒的に軽くそれでいて割と自然に見られるエンコード結果が得られた。
コメント