学術大会で 音声動画発表スライドデータ を求められたときに: .mp4 を FFmpeg でサイズ圧縮

COVID-19感染症の流行で、学術大会や研究会で、オンライン開催が増えています。音声動画データの提出が求められることがあり、「 .mp4、 500 MB 以内 で作成してください」といった指定が入る事もあります。しかし、動画サイズを小さくする方法について説明しているところは少なく、困っている人も多いのではないでしょうか。そこで、今回は、フリーソフトである FFmpeg を使って動画圧縮をする方法についてご紹介していきます。現在は、Macの内容が主ですが、後日改めてWindows向けの記事も追記します。

一度、設定とやり方を覚えてしまえば、その都度、編集ソフトやオンラインサービスを調べて付け焼き刃で対応するよりも、圧倒的に楽です。時間のあるときに、自己投資と思って、一度この記事の内容を試していただけると嬉しいです。

FFmpeg のダウンロード、インストール

FFmpeg (エフエフエムペグ) は、動画の編集や変換などが可能なフリーソフト[1]FFmpeg. Accessed May 4, 2021. https://www.ffmpeg.org/ です。

Mac の場合

Homebrew のインストール

FFmpegを含むパッケージ管理ソフトである Homebrew[2]Homebrew. Homebrew. Accessed May 4, 2021. https://brew.sh/index_ja のインストールがまだであれば、ここでインストールを行います。

まずは、その他 > ターミナル からターミナルを起動してください。

ターミナルを開いたら、Homebrewの公式ページ に記載されている下記コードをターミナルで実行します。そのままコピー&ペーストをするだけで大丈夫です。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Code language: JavaScript (javascript)

FFmpegのインストール

Homebrew のインストールが終了したら、そのままターミナルで下記コマンドを実行して、FFmpeg をインストールしてください。

brew install ffmpeg

(オプション) Finder からターミナルを起動できるようにしておく

今後の操作を楽にするために、下記の設定を行います。システム環境設定 > キーボード から、ショートカット > サービス > ファイルとフォルダ欄にあるふ「フォルダに新規ターミナル」のチェックを入れてください。

これで準備が完了です。

Windows の場合

(追記予定)

FFmpeg でサイズを圧縮する。

Macの場合

ターミナルの起動

まず、Finderで目的のデータがあるフォルダがみえる場所まで移動します。ここでは「movie」という名前のフォルダに、目的の「test.mp4」が入っているとします。

目的のフォルダ (movie) を右クリックすると、「サービス」の中に「フォルダに新規ターミナル」というコマンドがあるため、これを選択します。

ターミナルを起動すると、

Last login: Tue May  4 15:49:32 on ttys000
user@host movie % Code language: CSS (css)

といったように、最初から「movie」フォルダをカレントディレクトリとした状態でターミナルを開くことができます (これによって細かいコマンドを省略することができます) 。

FFmpeg でサイズの圧縮。

これから、「movie」フォルダに入っている、test.mp4 という動画を圧縮しようと思います。圧縮後のファイル名を test_compression.mp4 とすると、下記のコマンドで可能です。

ffmpeg -i test.mp4 -crf 18 test_compression.mp4Code language: CSS (css)

ここの18はCRF (圧縮率) の設定値であり、自由に設定可能です。数字が小さいほど高画質ですが、圧縮率が小さくなっていきます。デフォルトは23です。18-28の範囲を推奨範囲とする記事もあります[3]H.264でエンコード:tech.ckme.co.jp. Accessed May 4, 2021. https://tech.ckme.co.jp/ffmpeg_h264.shtml が、静止画のスライド中心である学会発表の動画の品質を考えると、28-32ほどの大きさでも可視性に大きな問題は感じないと思います。画質を落とさずに変換したいのであれば18以下を指定するのが無難だと思います。

コマンドを実行すると、圧縮が始まります。数分の動画データであれば、そこまで時間はかかりません。90分程のデータで10-20分くらい時間がかかるためしばらく待ちます。CRFの値を変えながら、学術大会の提出データのサイズに合うように何度か試してみてください。

今回は 140 分、2.07 GB の動画データを CRF 18 で507.5 MB まで圧縮することができました。

追記:カメラで直接収録した動画の場合など(コーデックの変換)

こちらの記事を参考にしました。

ビデオカメラ等で撮影した動画はH.264形式で保存されていることがあります。これは、

ffmpeg -i input.mp4Code language: CSS (css)

を入力して動画の情報を確認して、

  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709/bt709/iec61966-2-4, progressive), 1920×1080 [SAR 1:1 DAR 16:9], 8134 kb/s, 59.94 fps, 59.94 tbr, 60k tbn (default)

など記載されている場合は、動画が圧縮できる可能性があります。

ffmpeg -i input.mp4 -c:a copy -c:v libx265 -crf 22 -tag:v hvc1 output.mp4Code language: CSS (css)

と入力することで、動画をH.265形式にエンコードすると、画質をほとんど失わず容量を減らすことができます。

何らかの理由で -crf が使えない場合

代わりに、以下のようなコマンドでも、動画サイズを減らすことができます。

ffmpeg -i input.mp4 -vcodec libx265 -b:v 2000k output.mp4Code language: CSS (css)

このコマンドでは、-b:v 2000k オプションを使用して、動画のビットレートを 2Mbps に指定しています。ビットレートが小さいほど、ファイルサイズは小さくなるが、画質は劣化します。

他にも、動画サイズを減らすためには、以下のようなオプションが利用できます。

  • -vf scale=<width>:<height>: 動画を指定した幅と高さにリサイズする。
  • -acodec <codec>: 音声を指定したコーデックでエンコードする。例えば、libopusaac など。

例:

ffmpeg -i input.mp4 -vf scale=480:270 output.mp4

その他の操作

Mac の画面キャプチャなどで作った動画の拡張子は .mov です。これも、FFmpeg で .mp4 へ変更することができます。コマンドはこちらを参考にしました[4]ffmpegを用いて、.MOVから.mp4に変換する方法 – かっくんの学習記録. Accessed May 4, 2021. https://kakubari-ryusei.hatenablog.com/entry/2017/10/12/153003 。ここでは、test.mov を test.mp4 に変換するとします。

 ffmpeg -i test.mov -pix_fmt yuv420p test.mp4Code language: CSS (css)

さらに応用編として、コマンドを組み合わせることで、フォルダ内の一括変換をすることもできます。

例えば、.mov から .mp4 へ一括変換したい場合は、該当フォルダで 、

find . -name "*.mov" -type f | xargs -I {} basename {} .mov | xargs -I {} ffmpeg -i {}.mov -pix_fmt yuv420p {}.mp4Code language: JavaScript (javascript)

.mp4 を一括で圧縮したい場合は、

find . -name "*.mp4" -type f | xargs -I {} basename {} .mp4 | xargs -I {} ffmpeg -i {}.mp4 -crf 18 {}_compression.mp4Code language: JavaScript (javascript)

このコマンドは、 .mp4 の拡張子をもつファイルを見つけてリストにする

find . -name "*.mp4" -type fCode language: JavaScript (javascript)

そのリストから、 .mp4 という拡張子を取り除いたリストを使う

xargs -I {} basename {} .mp4Code language: CSS (css)

リストを上から一つずつ [リスト1].mp4 を圧縮率 18 で圧縮したデータを、 [リスト1]_compression.mp4 という名前で作成。[リスト2].mp4 を圧縮率 18 で圧縮したデータを、 [リスト2]_compression.mp4 という名前で作成・・・

xargs -I {} ffmpeg -i {}.mp4 -crf 18 {}_compression.mp4Code language: CSS (css)

という一連のコマンドを | でつないで一つにしています。下記 tweet の引用URLを参考にしてみてください。

ffmpegを使って映像と音声を結合して一つの動画ファイルにするには、次のようなコマンドを実行します。

ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4Code language: CSS (css)

コードはこちらを参考にしました。[5]ffmpegを使って映像と音声を結合する. Qiita. Accessed December 24, 2022. https://qiita.com/niusounds/items/f69a4438f52fbf81f0bd

最後に

現状で、オンライン開催は、実地開催ができない場合の代替案としてのイメージが強いですが、第4波で新たな株が流行している状況を鑑みると、長期的見通しの変換が迫られており、学術大会においてもこのオンライン開催はここ数年は続きそうです。この記事が皆様のお役に立てば幸いです。

2021年5月現在のCOVID-19の状況については、西浦先生の下記記事もご参照ください。

References

References
1 FFmpeg. Accessed May 4, 2021. https://www.ffmpeg.org/
2 Homebrew. Homebrew. Accessed May 4, 2021. https://brew.sh/index_ja
3 H.264でエンコード:tech.ckme.co.jp. Accessed May 4, 2021. https://tech.ckme.co.jp/ffmpeg_h264.shtml
4 ffmpegを用いて、.MOVから.mp4に変換する方法 – かっくんの学習記録. Accessed May 4, 2021. https://kakubari-ryusei.hatenablog.com/entry/2017/10/12/153003
5 ffmpegを使って映像と音声を結合する. Qiita. Accessed December 24, 2022. https://qiita.com/niusounds/items/f69a4438f52fbf81f0bd

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です