セーブポイント

特にジャンルの決まってない雑記です。

無駄にサイズのデカい動画を圧縮するだけ

この記事は、みす56代 Advent Calendar 2022の2日目の記事です。

無駄にサイズのでかい動画にストレージの容量が圧迫されること、ありますよね。

自分はGeForce Experienceのインスタントリプレイをよく使っているので、ゲームの録画にHDDが圧迫されています……。

HDDの中身

インスタントリプレイ、確かデフォルトだと50Mbpsとかいうアホ設定で録画してくれるので5分の動画が1.7GBくらいになります。えっと、

「デカ過ぎんだろ……(動画サイズが)」

根本的解決のために最近追加でHDDを買ったりしたのですが、もっと単純に動画をエンコードし直せばよくないか、ということでFFmpegでサクッとやります。

必要なものを準備

CPUでエンコードしてもいいですが流石に遅すぎるので、今回はハードウェアエンコーダであるNVENCを利用します。なのでNVIDIA製のグラフィックカードが必要です。保管用途のエンコードなので精度は求めてませんし、速いほうがいいですよね。

Radeonにも似た機能あったりするんですかね? 自分はRadeon使ってないのでよく分からず……。

NVENCが利用できる環境が用意できたら、FFmpegのインストールをしましょう。既にインストール済の方は飛ばしてください。
こちらの公式サイトからどうぞ。

バージョンは適当に最新のmasterブランチのビルドとか。

ダウンロードしたら適当な場所に解凍して、中にあるbinディレクトリにパスを通してください。これでFFmpegの準備はOKです!

ぴぃちょん

FFmpegを直接呼び出してもいいんですが、不便なので今回もPythonのsubprocessを使います。
ということで、適当なバージョンのPython 3をインストールしてください。最近は既にインストール済の人が多そうですが。標準モジュールしか使わないので3.10でも3.11でも動くはず。

www.python.org

タレ

今回作成したパッケージのソースコードは以下で公開しています。煮るなり焼くなり好きにしてください。

github.com

READMEのInstallationの項に従ってpip installするとパッケージがインストールできます。

インストールすると、compvというコマンドが利用できるようになります。compv.pyの中身を見てもらえば分かりますが、本当にFFmpegを呼び出して動画をエンコードさせてるだけです。
まあ一応削減できた容量がすぐに確認できたり、個人的に便利な機能が付いています。

エンコードの設定ですが、YouTubeに投稿するのにちょうどいいくらいの品質になっています。(1080p60fpsの動画をこのツールでエンコードすると12Mbps弱くらいになる)
本当に投稿するならもっと細かく設定をしてエンコードしたほうが良いですが(こことかここを参照)、ローカルに保存しておくだけなら十分満足できるレベルです。

HEVCじゃなくてH.264にしたいよ~とか、ソフトウェアエンコードにしたいよ~という場合には適当にソースを書き換えれば勝手に反映されます。便利ね。

以上!