no7.space
📺

WebM と MP4 の相互変換

ffmpeg が webm も扱えるのでこれでOK

ffmpeg のインストール

ffmpeg は、 Mac なら Homebrew からいれるのが楽ちんです

brew install ffmpeg

使い方

ffmpeg -i input.webm -c:v copy -c:a copy output.mp4

逆の場合も同様でいけそう。

-c というのはコーデックを指定するオプションで、さらにビデオ用とオーディオ用でオプションが分かれてきます。

  • ビデオなら-c:v または -codec:v
  • オーディオなら -c:a または -codec:a

特定のコーデックでエンコードし直すならばここに続けてコーデックを指定しますが、逆に入力側と同じまま無変換でよいならば、copy というキーワードが使えます。
-c:v copy とか -c:a copy といった感じ

さらに、オーディオもビデオも入力側と同じコーデックで良いならば

-codec copy でもOK。(この場合は省略はできないっぽい?)

よって、編集ソフトが対応してないとかで往復しないといけないときなんかは

ffmpeg -i input.webm -codec copy output.mp4

が一番シンプルな指定になるっぽいです。

copy が使えない場合

WebM でよく使われている、 VP8/VP9(映像) や Opus(音声) といったコーデックは、MP4 コンテナに未対応のため、
webm から mp4 にする場合そのままだとエラーになってしまう場合があるようです。

なので、その場合はコーデックをコピーするのではなくて、MP4 が対応しているコーデックで再エンコードする必要があります。
たとえば、H.264/AAC で再エンコードするならばこんな感じになるみたいです。

ffmpeg -i input.webm -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4

なんかまた新しいオプションが増えました。

  • -crf は Constant Rate Factor の略で、そのまま訳すと「定数率係数」となります。なんだそれって感じですが、品質の設定で、数値が少ないほうが高品質になる代わりにサイズが大きくなるとのこと。
    • 一般的には 18 から 23 の間にするのが良いとされていて、18 でもほぼ無劣化に見えるくらいの品質になるらしいです。
    • 0 にすると圧縮しないため、劣化も起きません。が、当然ファイルはデカくなります。生データのままアーカイブしておきたいときとか、編集中のデータなどはこの設定がよさそうですね
    • 逆に 51 にすると、最低品質となり、ものすごい劣化するみたいです。動作テストとかぐらいでしか使わないかも。
    • ちなみにデフォルトは 23 なので、今回の設定は、あってもなくても同じ結果になります。
  • -b:a はオーディオのビットレートです。ここでは 128k となってます

余談

ちなみに姉妹フォーマットの WebPは「ウェッピー」って読むらしい(ウェブピーじゃない)のですが、こっちは普通に「ウェブエム」らしい。
「うぇぶん」みたいなんじゃないのね。

いやなぁ、それはそれで発音しにくいけど…

参考

上記に加え Gemini に相談にのってもらってます