というわけで、タイトルとおり、FFmpegを導入したので、それのほぼ、覚書。
紹介
FFmpegはCUIベースではあるけれど、動画や音声加工に優れた動画編集ツールです。
ただ、使ってみると楽で、Windowsでもbatを駆使して描いてしまえば、割かし使いやすいツールとなります。Aviutl使って色々変換してたんですが、なんだか編集がしづらくて…
あちらは、きっとyoutubeに動画を挙げるなどの場合の編集に使用するのがよいと思われます。動画の保存目的や再度圧縮、回転、クリッピング程度でしたら、FFmpegをたたくのがよさげです。
インストール
Windows版は公式HPからダウンロードできます。 詳しくは以下を参照してください。
【windows】FFmpegをインストールする手順|新卒エンジニアの開発日記
基本的な使い方
FFmpegの基本的な使い方は以下との通り
ffmpeg [入力オプション] -i [入力ファイル名] [出力オプション] [出力ファイル名]
基本的には
入力オプション
: フィルタ処理の設定をするようなイメージかな?ここでResizeやRotateをします
入力ファイル名
: ソースとなる動画ファイルを指定
出力オプション
: 動画のビットレートや音声のサンプリング周波数などを指定
出力ファイル
: 出力ファイル名を設定する。出力ファイル名の拡張子を見て動画形式を変えてくれるので参考になる
入力オプション
ここでは、使っているものだけを記載する
クロップする
画面をクロップする場合の使い方以下の通り。
ffmpeg -vf crop=1024:720:128:0
このオプションを使ったときは、元の画面サイズは1280x720だったので、左右を128pixelづつ切って1024にする指定。左上を起点にし、1024:720の枠をどこからスタートさせるものかということを考えるとわかりやすい。参考は以下。
回転させる
上でクロップしたものを画面を回転させるのが、以下
ffmpeg -vf transpose=2
それぞれオプションの意味が
-vf transpose=1
: 右に90度回転
-vf transpose=2
: 左に90度回転(右に270度回転)
-vf hflip
: 左右反転
-vf vflip
: 上下反転
以下のサイトを参照
qiita.com
フィルタの2つ組み合わせ
フィルタオプションを二つ組み合わせるときは、以下。
-vf crop=1024:720:128:0,transpose=2
,
(カンマ)で区切ることになるが、その間にスペースは挿入しない。
入力ファイル
ffmpeg -i [入力ファイル]
-i
で入力ファイルを指定することになる
出力オプション
ここでは、Video Codecの選択などを行い、設定をする。 主に使っているのは以下
-i hoge.webm -c:v libvpx-vp9 -b:v 2000k -minrate 1000k -maxrate 2500k -c:a libopus
Video Codecの指定
-c:v
: Video codecの指定、ここではVP9を指定している。VP9については以下を参照。
nico-lab.net
動画ビットレートなどの指定
-b:v 2000k
: 平均ビットレートを2560kbpsで指定
-minrate 1000k
: 最小ビットレートを1000kbpsで指定
-maxrate 2500k
: 最大ビットレートを2500kbpsで指定
元の動画2.5Mbpsぐらいのものなので、上記で指定をしている
音声コーデックの指定
-c:a libopus
: VP9はopus形式らしい。以下のリンク先にはないが、音声のオプション設定は以下を参照
qiita.com
2passエンコーディング
エンコードの時間はかかるが、これをやると画質が良くなる(と信じている)ので、設定。
ffmpeg.exe -i input.webm -c:v libvpx-vp9 -b:v 2000k -minrate 1000k -maxrate 2500k -an -pass 1 -f null - ffmpeg.exe -i input.webm -c:v libvpx-vp9 -b:v 2000k -minrate 1000k -maxrate 2500k -c:a libopus -pass 2 -f webm output.webm
設定のコツとしては
入力オプション
の設定は両方に行うこと入力ファイル
も両方で設定すること- 1passの時は
- audio
-an
として圧縮しないこと - output出力も
-f null -
として出力しない設定にする
- audio
- 2passの時に
- audioの指定を追加
出力ファイル
を指定すること
これで2pass encodingが走り始める。
出力ファイル名
ffmpeg -i input.webm output.webm
-o
とかはいらない模様
参考
最終的にはドキュメント読めなんだけど、日本語の解説サイトに頼ってしまいます。