【ffmpeg】WindowsでQSVを使って動画を圧縮する
QSVはintelの内臓GPUやGPUで使うことができる、ハードウェアでのビデオデコード/エンコード技術である。処理時間がソフトウェアでのエンコード/デコードよりも大幅に高速であることが魅力だ。本記事では、ffmpegを使ってQSVを用いて動画を圧縮する方法を記す。
CPUの世代ごとに、利用できる機能が異なっているので、要確認だ。H.264は第6世代でデコード、エンコード対応し、第9世代で、H.265(HEVC)のデコード、エンコード対応している。第12世代では、VP9やAV1といった最新の企画にも対応しており、一般ユーザーが使用する分には過不足ない。
本記事では、サポートしている機能や、コマンド例が記載されているffmpeg公式のドキュメントを参考に、環境構築を進める。
ffmpegのインストール
ffmepgの公式サイトから、ビルド済みの実行ファイルを取得することもできるが、私のおすすめはwingetを用いてインストールする方法。環境変数でpathを通す作業が不要になる。
- wingetが利用できるか確認
PowerShellを開き、winget
と入力する。wingetについての情報がターミナルに表示されたら利用OK.
- wingetでffmpegを探す
winget search ffmepg
Gyan.FFmpegから始まる3つのソフトウェアがffmpeg。今回はフルバージョンを利用したいので、
Gyan.FFmpeg
を選択。
winget install Gyan.FFmpeg
以下の表示がでてきたら、インストール完了。
見つかりました FFmpeg [Gyan.FFmpeg] バージョン 7.0.2
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
ダウンロード中 https://github.com/GyanD/codexffmpeg/releases/download/7.0.2/ffmpeg-7.0.2-full_build.zip
██████████████████████████████ 162 MB / 162 MB
インストーラーハッシュが正常に検証されました
アーカイブを展開しています...
アーカイブが正常に展開されました
パッケージのインストールを開始しています...
コマンド ライン エイリアスが追加されました: "ffmpeg"
コマンド ライン エイリアスが追加されました: "ffplay"
コマンド ライン エイリアスが追加されました: "ffprobe"
パス環境変数が変更されました; 新しい値を使用するにはシェルを再起動してください。
インストールが完了しました
QSVが利用可能かどうか確認
powershellのターミナルで以下のコマンドを実行。
- エンコーダーの確認
Linuxのgrep
に相当するコマンドとして、Select-String
を使用する。
ffmpeg -encoders|Select-String qsv
version 7.0.2では、末尾に以下の情報が表示される。これらがエンコード可能なフォーマットだ。
V..... av1_qsv AV1 (Intel Quick Sync Video acceleration) (codec av1)
V..... h264_qsv H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)
V..... hevc_qsv HEVC (Intel Quick Sync Video acceleration) (codec hevc)
V..... mjpeg_qsv MJPEG (Intel Quick Sync Video acceleration) (codec mjpeg)
V..... mpeg2_qsv MPEG-2 video (Intel Quick Sync Video acceleration) (codec mpeg2video)
V..... vp9_qsv VP9 video (Intel Quick Sync Video acceleration) (codec vp9)
一応、デコードも確認する。
ffmpeg -decoders|Select-String qsv
実行結果。
V....D av1_qsv AV1 video (Intel Quick Sync Video acceleration) (codec av1)
V....D h264_qsv H264 video (Intel Quick Sync Video acceleration) (codec h264)
V....D hevc_qsv HEVC video (Intel Quick Sync Video acceleration) (codec hevc)
V....D mjpeg_qsv MJPEG video (Intel Quick Sync Video acceleration) (codec mjpeg)
V....D mpeg2_qsv MPEG2VIDEO video (Intel Quick Sync Video acceleration) (codec mpeg2video)
V....D vc1_qsv VC1 video (Intel Quick Sync Video acceleration) (codec vc1)
V....D vp8_qsv VP8 video (Intel Quick Sync Video acceleration) (codec vp8)
V....D vp9_qsv VP9 video (Intel Quick Sync Video acceleration) (codec vp9)
デコードのほうが対応している形式が多いが、差分はvp8とvc1であり、一般的に使うことがないフォーマットなので、気にしなくて良いだろう。
なお、ここで表示されている情報は、ffmpegのソフトウェアが対応している形式であり、ハードウェア側のcapablity checkの結果ではないことに注意。
ネットの情報では、qsvを利用したければ、ffmpegのソースコードから自分で実行ファイルをビルドする必要がある、という記載もあったが、2024年8月現在ではそのようなことなくqsvが利用できる。良かった。
動画を圧縮する
動画を圧縮するコマンド例を示す。個人的に、動画の圧縮の際には解像度は変更せず、ビットレートのみ小さくすることが好みなので、解像度は下げない。
QSVで使用するオプションの説明
QSVで使用するオプションの説明をドキュメンテーションから引用しておく。
global_quality オプションについて
動画をエンコードする際に、動画の品質をquality based modeで指定するパラメータだ。h264_qsvとhevc_qsvでエンコードするときのみ利用可能。このオプションに数値を指定することで、出力される動画の品質を調整できる。
具体的には、
* qscaleコーデックフラグも設定されている場合: CQP(定量化スケール)モードが使用される。これは、-qscale ffmpeg
オプションを用いた場合に適用される。
* look_ahead
オプションも設定されている場合: LA_ICQ(ルックアヘッド付きインテリジェント定品質)モードが使用される。
* それ以外の場合: ICQ(インテリジェント定品質)モードが使用される。ICQモードの場合、global_qualityの範囲は1から51で、1が最高の品質。
preset
このオプションは、veryfast
(最高速度)からveryslow
(最高品質)までの範囲を選択可能。
veryfast
faster
fast
medium
slow
slower
veryslow
H.264の場合
ffmpeg -hwaccel qsv -hwaccel_output_format qsv -i input.mp4 -c:v h264_qsv -preset veryfast -global_quality 40 output.mp4
オプション | 説明 |
---|---|
-hwaccel qsv , -hwaccel_output_format qsv
|
QSVの使用を指定 |
-i input.mp4 |
変換元の動画ファイル |
-c:v h264_qsv |
エンコーダーの指定。QSVを用いたh264でのエンコード。 |
-preset veryfast |
変換速度を最速に |
-global_quality 40 |
動画の品質の指定 |
output.mp4 |
変換後の動画ファイルの名前 |
HEVC(H.265)の場合
ffmpeg -hwaccel qsv -hwaccel_output_format qsv -i input.mp4 -c:v hevc_qsv -preset veryfast -global_quality 40 output.mp4
オプション | 説明 |
---|---|
-c:v hevc_qsv |
エンコーダーの指定。QSVを用いたh264でのエンコード。 |
最後に
自分の用途は記録用に撮影した動画のアーカイブなので、画質を犠牲にして処理速度と容量を重視している。各オプションを調整して、目的にあった用途に変換してほしい。
HEVCのほうがH.264と比べると容量が小さいので、HEVCをメインに使用したいが、windows10の標準プレイヤーに対応していないため、ビジネスユースでは使い勝手が悪い。windows10のサポートが終わり、windows11に完全に移行してからでないと、メインにするのは難しそうだ。。
Discussion