どうも、じゃぶじゃぶ(@jbjbgame)です。
前回、FFmpegをインストールして簡単に使用できるところまで行いました。
今回はFFmpegの豊富なオプションをいろいろ検証してみたいと思います。
FFmpegの使い方
基本的な使い方
FFmpegの基本的なコマンドは以下の通りです。
構文) ffmpeg [入力オプション] -i [圧縮対象のファイル名] [出力オプション] [圧縮後のファイル名] 例) ffmpeg -i input.mp4 output.mp4
一番シンプルな方法は「-i」の後に圧縮する動画のファイル名を指定して、スペース区切りで圧縮後のファイル名を記載すれば使えます。
オプション(抜粋)
FFmpegには多くのオプションがあり、すべてを使いこなすのは大変です。
今回は自分がよく使いそうな、動画の圧縮にフォーカスしたオプションを個人的にまとめてみました。
オプション | 概要 | 例 |
-i [ファイル名] | 圧縮するファイル名を指定 | - i C:\sample\input.mp4 |
-b:v [ビットレート数(kbps)] | 映像のビットレート数を指定 | -b:v 1200k |
-b:a [ビットレート数(kbps)] | 音声のビットレート数を指定 | -b:a 100k |
-r [フレームレート数(fps)] | 動画のフレームレートを指定 | -r 120 |
-s [サイズ(横ピクセルx縦ピクセル)] ※縦と横の間はx(小文字エックス) |
動画のサイズを指定 | -s 1980x1080 |
-vcodec [コーディック] | コーディックの指定 | -vcodec libx264 または -vcodec libx265 |
-crf [固定品質] | 品質を固定モードにして指定 | -crf 20 |
動画を圧縮するための調整は大体揃っていそうで一安心。細かくオプションを指定することで浅く圧縮したり、逆にガッツリ圧縮をかけることも出来そうです。
FFmpegの検証
FFmpegの各オプションで圧縮して、出力結果がどれほどのサイズに圧縮され、また画像の品質はどの程度か検証してみます。
今回は以下の動画を使って検証していきます。
- 容量:1.77 GB (1,910,356,178 バイト)
- 動画形式:mp4
- 動画の長さ: 01:01:08.72
- サイズ:1280x720
- コーディック:H264
- ビットレート:4165 kb/s
- フレームレート: 60 fps
動画はOBSでPS4ソフト「GhostOfTsushima」のプレイ動画を録画したものになります。
オプションを指定せず圧縮
まずは出力オプションを何も指定せずに圧縮してみます。
ffmpeg -i GhostOfTsushima.mp4 GhostOfTsushima_mini.mp4
[出力結果]
圧縮処理の時間は「00:16:34.077」ほどかかりました。結構時間がかかりますね。
- 容量:1.03 GB (1,116,530,496 バイト)
- 動画形式:mp4
- 動画の長さ: 01:01:08.73
- サイズ:1280x720
- コーディック:H264
- ビットレート:2434 kb/s
- フレームレート: 60 fps
出力オプションを何も指定しないと、コーディックやサイズ、フレームレートは元動画の設定を引き継がれて圧縮する仕様のようです。
動画の容量は700MBほど減りました。2分の1とはいきませんがまずまずの圧縮率です。
[画質比較]
動画に品質を比較しましたが、人の目で見てもほどんど劣化を感じさせません。ただ動画の縦横の幅を大きくしていくと、圧縮した方の動画には粗さが目立ち、流石に圧縮されている差が感じされました。
ビットレートを指定して圧縮
今度はビットレートを4165 ⇒1200kb/sに変更してみます。
ffmpeg -i GhostOfTsushima.mp4 -b:v 1200k GhostOfTsushima-bv1200k_mini.mp4
[出力結果]
圧縮処理の時間は「00:14:15.234」ほどかかりました。
- 容量:598 MB (627,396,701 バイト)
- 動画形式:mp4
- 動画の長さ: 01:01:08.73
- サイズ:1280x720
- コーディック:H264
- ビットレート:1368 kb/s
- フレームレート: 60 fps
[画質比較]
結構1200kb/sでも全然劣化が見られずびっくり!容量も4分の1近く削減されているのですごいです!!
フレームレートを指定して圧縮
フレームレートを60⇒30fpsにして圧縮してみたいと思います。これはさすがに画質は劣化すると予想。
ffmpeg -i GhostOfTsushima.mp4 -r 30 GhostOfTsushima-r30_mini.mp4
[出力結果]
圧縮処理の時間は「00:11:38.786」ほどかかりました。
- 容量:1.01 GB (1,090,127,263 バイト)
- 動画形式:mp4
- 動画の長さ: 01:01:08.72
- サイズ:1280x720
- コーディック:H264
- ビットレート:2377 kb/s
- フレームレート: 30 fps
[画質比較]
フレームレートを下げても思いのほか劣化はありません、というか元動画と比較しても全然違いが判りません。動画の知識が乏しいせいかフレームレートを下げるとフレーム数が下がってコマ落ちがひどくなるのかなぁ?と思っていましたが全然そんなこと無かったです。(;^^)
コーディックを指定して圧縮
コーディックをH264⇒H265に変更してみます。コーディックとはエンコードを処理するソフトウェアのこと。H265はH264の後継にあたるもので、圧縮率は10分の1らしいです。
ffmpeg -i GhostOfTsushima.mp4 -vcodec libx265 GhostOfTsushima-h265_mini.mp4
[出力結果]
圧縮処理の時間は「00:31:18.826」ほどかかりました。今まで一番処理時間がかかりました。
- 容量:537 MB (563,433,139 バイト)
- 動画形式:mp4
- 動画の長さ: 01:01:08.72
- サイズ:1280x720
- コーディック:H265
- ビットレート:1228 kb/s
- フレームレート: 60 fps
[画質比較]
静止画では分かりづらいですが、動画を見ると少し色味の荒さや動きのガサつきが目立ちました。単純にビットレートが少ないせいかもしれませんが。。。
個人的はコーディックH264でビットレート1200kにした方がきれいに感じました。
まとめ
今回、FFmpegを使いこなすため、オプションをいろいろ変えて圧縮した動画を比較してみました。
思いの他どの動画も劣化が見られず、ちゃんと容量は減っているので、これはかなり使えそうです。
個人的な使い方としては以下の感じで運用していこうと思ってます。
短期保管用:
・コーディック :H264
または
・フレームレート:30fps
長期保存用:
・コーディック:H265
または
・ビットレート:1200kb/s
次回は、Windowsバッチを使って動画の一括エンコードをするためのコードを組みたいと思います。
(。。。今からWindowsバッチの勉強をせねば、、、;><))
[次の記事]