結論:codecでhevc_nvencを指定する
Moviepyを利用してファイル出力する際、codec指定をしない場合、libx264が利用されます。
しかし参考とさせていただいた下の投稿にもあるように、Nvidia Geforceを利用していれば、ハードウェアエンコーダであるNVENCを利用することも可能です。
codecにnvencを指定するとなんだか出力が汚い
ハードウェアエンコーダの恩恵で処理速度は向上しますが、libx264と比べ画質が悪くブロックノイズが大きいと感じていました。
が、単純にmoviepyでビットレートを指定していなかったためでした。
部分的なコードのコピペですが、最終的には次のようにしています。
if cuda_n==True:
clip.write_videofile(video_out, audio=audio_temp_filename,verbose=False,codec='hevc_nvenc', bitrate='11M', preset='slow',logger=WriteVideoProgress(pb))
else:
clip.write_videofile(video_out, audio=audio_temp_filename,verbose=False,logger=WriteVideoProgress(pb))
NVENCを利用したかったのは処理時間を稼ぐためでしたが、ビットレートの変化はNVENCでの処理時間にあまり影響がなかったので、元のlibx264と同程度のファイルサイズまでで、できる限り大きいビットレート、を模索して11Mとしています。
loggerは、次の記事を参考というかほぼ丸っと使わせていただきました。
GUIはFletを利用していますが、プログレスバーにmoviepyの進捗を表示することができました。