無駄にサイズのでかい動画にストレージの容量が圧迫されること、ありますよね。
自分はGeForce Experienceのインスタントリプレイをよく使っているので、ゲームの録画にHDDが圧迫されています……。
インスタントリプレイ、確かデフォルトだと50Mbpsとかいうアホ設定で録画してくれるので5分の動画が1.7GBくらいになります。えっと、
根本的解決のために最近追加でHDDを買ったりしたのですが、もっと単純に動画をエンコードし直せばよくないか、ということでFFmpegでサクッとやります。
必要なものを準備
CPUでエンコードしてもいいですが流石に遅すぎるので、今回はハードウェアエンコーダであるNVENCを利用します。なのでNVIDIA製のグラフィックカードが必要です。保管用途のエンコードなので精度は求めてませんし、速いほうがいいですよね。
Radeonにも似た機能あったりするんですかね? 自分はRadeon使ってないのでよく分からず……。
NVENCが利用できる環境が用意できたら、FFmpegのインストールをしましょう。既にインストール済の方は飛ばしてください。
こちらの公式サイトからどうぞ。
バージョンは適当に最新のmasterブランチのビルドとか。
ダウンロードしたら適当な場所に解凍して、中にあるbin
ディレクトリにパスを通してください。これでFFmpegの準備はOKです!
ぴぃちょん
最近よく見かけるpython、ぴぃちょんて読んでた……
— 名取さな🍆 (@sana_natori) 2020年1月28日
FFmpegを直接呼び出してもいいんですが、不便なので今回もPythonのsubprocessを使います。
ということで、適当なバージョンのPython 3をインストールしてください。最近は既にインストール済の人が多そうですが。標準モジュールしか使わないので3.10でも3.11でも動くはず。
タレ
今回作成したパッケージのソースコードは以下で公開しています。煮るなり焼くなり好きにしてください。
READMEのInstallationの項に従ってpip installするとパッケージがインストールできます。
インストールすると、compvというコマンドが利用できるようになります。compv.py
の中身を見てもらえば分かりますが、本当にFFmpegを呼び出して動画をエンコードさせてるだけです。
まあ一応削減できた容量がすぐに確認できたり、個人的に便利な機能が付いています。
エンコードの設定ですが、YouTubeに投稿するのにちょうどいいくらいの品質になっています。(1080p60fpsの動画をこのツールでエンコードすると12Mbps弱くらいになる)
本当に投稿するならもっと細かく設定をしてエンコードしたほうが良いですが(こことかここを参照)、ローカルに保存しておくだけなら十分満足できるレベルです。
HEVCじゃなくてH.264にしたいよ~とか、ソフトウェアエンコードにしたいよ~という場合には適当にソースを書き換えれば勝手に反映されます。便利ね。
以上!