📹

【FFmpeg活用術】動画を「指定した容量」に圧縮する方法(Mac/Win対応)

に公開

【FFmpeg活用術】動画を「指定した容量」に圧縮する方法(Mac/Win対応)

「動画のファイルサイズが大きすぎてアップロードできない」「〇MB以下にしたい」— そんな悩みを一発で解決できるのが、高機能な動画編集ツール**「FFmpeg(エフエフエムペグ)」**です。

この記事では、「目標とするサイズ(例:24MB)」に合わせて最適な圧縮率を自動で計算し、エンコードする最も確実な方法を解説します。


仕組み:なぜ正確なサイズにできるのか?

ファイルサイズを正確にコントロールするには、「2パスエンコード」という方法と「ビットレートの計算」が必要です。

動画のファイルサイズは、主に以下の式で決まります。

\text{ファイルサイズ} \approx \text{ビットレート} \times \text{動画の長さ}

つまり、目標のファイルサイズを動画の長さで割ることで、必要な目標ビットレートが逆算できます。

  • 1パス目: 動画全体を分析し、どこを強く圧縮し、どこを弱く圧縮するか(=ビットレートをどれだけ割り振るか)の戦略を立てます。
  • 2パス目: 1パス目の戦略に基づいてエンコードを実行します。これにより、最終的なファイルサイズが目標値に非常に近くなります。

💻 準備:ツールのインストール(Mac/Windows)

FFmpegと、動画の長さの計測に使用するffprobeは、通常セットで提供されます。

🍎 Mac (iTerm2/Terminal)

Homebrewを使うのが最も簡単で確実です。

brew install ffmpeg

🪟 Windows (PowerShell/WSL)

Windowsでは、パッケージ管理ツール**Chocolatey (Choco)**を使う方法が簡単です。

  1. Chocolateyのインストール: 管理者としてPowerShellを開き、公式サイトの手順に従ってインストールします。
  2. FFmpegのインストール: PowerShellで以下のコマンドを実行します。

choco install ffmpeg

🛠️ ステップ1:動画の長さを測る

まず、圧縮したい動画ファイルの正確な長さ(秒)が必要です。

コマンド例(Mac/Win共通)

以下のコマンドで、**/path/to/input_video.mp4**をあなたのファイルパスに置き換えて実行してください。

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 /path/to/input_video.mp4
実行結果の確認
このコマンドを実行すると、動画の長さが秒単位で出力されます。(例: 124.400000 秒)

この結果の値を**T**(秒)として、次の計算に使用します。


🧮 ステップ2:目標ビットレートの計算

今回の目標は、元の30MBを24MBにすることです。動画の長さT = 124.4秒として計算します。

  1. 目標総ビットレート

    \text{総ビットレート}(kbit/s) = \frac{\text{目標サイズ}(MB) \times 8192}{\text{長さ}(秒)}
    \text{総ビットレート} = \frac{24 \times 8192}{124.4} \approx 1577.8\ kbit/s

  2. 目標ビデオビットレートの決定
    音声に128kbit/sを割り当てると仮定し、総ビットレートから差し引きます。

    \text{ビデオビットレート} = 1577.8 - 128 = 1449.8\ kbit/s

    四捨五入して、**1450k**を使用します。

これで、目標サイズの24MBに最も近づけるためのキーとなる数値が1450kと確定しました。


🚀 ステップ3:2パスエンコードの実行

計算したビットレート**1450kを使って、以下の2つのコマンドを必ず順番に実行**します。

1. パス1:分析実行(出力ファイルは生成されません)

🍎 Mac (iTerm2/Terminal)

ffmpeg -y -i /Users/yourname/Videos/original_video.mp4 \
-c:v libx264 -b:v 1450k -pass 1 \
-preset medium \
-an -f mp4 /dev/null
  • -f mp4 /dev/null: Mac/Linuxでは出力を破棄します。

🪟 Windows (PowerShell)

ffmpeg -y -i "C:\Users\yourname\Videos\original_video.mp4" \
-c:v libx264 -b:v 1450k -pass 1 \
-preset medium \
-an -f mp4 NUL
  • -f mp4 NUL: WindowsではNULを使用します。

2. パス2:本エンコード(最終ファイル生成)

このコマンドで最終的な圧縮ファイルが出力されます。

🍎 Mac (iTerm2/Terminal)

ffmpeg -i /Users/yourname/Videos/original_video.mp4 \
-c:v libx264 -b:v 1450k -pass 2 \
-preset medium \
-c:a aac -b:a 128k \
/Users/yourname/Videos/compressed_video_24MB.mp4

🪟 Windows (PowerShell)

ffmpeg -i "C:\Users\yourname\Videos\original_video.mp4" \
-c:v libx264 -b:v 1450k -pass 2 \
-preset medium \
-c:a aac -b:a 128k \
"C:\Users\yourname\Videos\compressed_video_24MB.mp4"

パス2で使用したオプションの意味

---
コマンドオプション:
  -i: 動画の入力ファイルパス
  -c:v libx264: 動画コーデックにH.264を使用(互換性が高い)
  -b:v 1450k: 計算した目標ビデオビットレートを設定
  -pass 2: 2回目の本エンコードパスを指定
  -preset medium: エンコードの速度と画質のバランス設定
  -c:a aac: 音声コーデックにAACを使用
  -b:a 128k: 音声ビットレートを128kbit/sに設定
  出力ファイル名: 圧縮後のファイルパス

この手順により、ファイルサイズは24MBの目標に非常に近くなります。ぜひ、目標とする容量に合わせてビットレートを計算し、試してみてください!

Discussion