FFmpegでWebM動画を作成(変換)する

まえがき

ブラウザがいい感じに再生してくれるので便利なんですよね。
safariは未対応だけどね。

インストール

macportsでパッケージ管理しているので、それ経由でインストールする。

$ sudo port install ffmpeg +nonfree

h.264, h.265扱いたい場合は +nonfree を入れておいた方が良い。

変換設定

こだわりなければ、 Webm WikiのガイドのVOD Recommended Settings通りで良いと思う。
強制上書きの -y オプションを加えると楽。

$ ffmpeg -i <source> -c:v libvpx-vp9 -pass 1 -b:v 1000K -threads 8 -speed 4 \
  -tile-columns 6 -frame-parallel 1 \
  -an -f webm -y /dev/null

$ ffmpeg -i <source> -c:v libvpx-vp9 -pass 2 -b:v 1000K -threads 8 -speed 1 \
  -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 \
  -c:a libopus -b:a 64k -f webm -y out.webm

ビットレートは適切な値を指定した方が良いかもしれない。
必要であれば-rでフレームレート、-sで解像度、-ssで開始点、-tで対象時間をそれぞれ変える。

FFmpeg wikiにもガイドがある。
(WebMサイトの方が分かりやすいと思う)

ビットレートについて

変換元動画も圧縮済みである場合は、同じくらいの値を指定すれば良い。
ビットレートはffprobeで見ることができる。

わからない場合の目安としては以下参照

Opusは優秀なようで、音質にこだわりがないのであれば最大でも 96kb/sで十分っぽい。

動画情報の取得

ffprobeで得られる

$ ffprove file.webm

オプション概説

オプション 内容
-i 入力ファイルを指定する。 URL(http://….)も指定できる。
-f 出力フォーマットを指定する。ffmpeg -formatsで一覧が見られる。
-c:v, -c:a 映像, 音声のコーデックを指定する。変換しない場合は copyを指定。ffmpeg -codecsで一覧が見られる。
-b:v, -b:a 映像, 音声のビットレートを指定する。
-vn, -an 映像, 音声を出力しない。-vnすると音声のみ取リ出す
-pass 2-passエンコード時するときに何番目のパスかを指定する。
-s 解像度を指定。(例: 640x380など)
-r, -ar 映像, 音声のフレームレートを指定する。映像であれば24、25、30、48、50、60。音声であれば、44100、48000が一般的。
-ss, -t 指定部分のみを出力する。例えば-ss 10 -t 5で開始10秒めから5秒間のみを出力する。-iオプションより前にあると入力ファイルから切り出しを行い、後ろにあると変換出力結果から切り出しを行う。
-y 出力ファイルが存在していた場合に、上書きする

詳細はドキュメント参照のこと。
上述の変換設定の節にあって、ここに書かなかったものは、エンコード/デコード時の負荷、速度、品質に関わるオプション(たぶん)。

参考リンク


See also