1
1

Moviepyでhevc_nvencを使う

Posted at

結論: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の進捗を表示することができました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1