「Discordに動画を貼りたいのにファイルサイズ上限で弾かれる」——これをFFmpegの1コマンドで確実に解決します。このガイドではアップロード上限別(10MB / 25MB / 50MB / 500MB)に動画サイズを逆算する公式、1080p / 720p を保てる秒数の目安、2パスでヘッダ安全係数を詰める方法までまとめます。所要時間:10分。

動作確認: FFmpeg 6.1 / Windows 11 / Ubuntu 24.04

ブラウザで即時圧縮したい場合: Discord動画圧縮ツールがビットレート計算とエンコードを全部やってくれます(ffmpeg.wasm、サーバーに送らない)。


この記事でわかること

  1. 2024〜2026年時点のDiscordアップロード上限
  2. 目標サイズからビットレートを逆算する公式
  3. 10MB / 25MB / 50MB 別の1コマンド例
  4. ファイルが上限をわずかに超える時の調整手順
  5. 2パスエンコードで正確にサイズを合わせる
  6. WindowsバッチファイルでD&D圧縮できるスクリプト
  7. FAQ 5問

1. Discordのアップロード上限(2026年時点)

プラン / ブースト状態上限備考
無料ユーザー10 MB2024年5月以降、従来の8MBから引き上げ
Nitro Basic / Classic25 MB旧Nitro Classicと同等
ブースト Level 2 サーバー50 MBサーバー単位のアップロード上限が上がる
Nitro (Full)500 MB個人加入者の上限

上限はサーバー×ユーザー×チャンネル3者の最小値が適用されます。Nitro加入者でもブーストが無いサーバーでは低い上限が適用される場合があります(Discord公式ヘルプ参照)。


2. 目標サイズ → ビットレート逆算式

ファイルサイズは「ビットレート × 再生時間」で決まります。逆算は:

目標ビットレート(kbps) = (目標サイズMB × 8192) ÷ 再生時間(秒)

そこから音声分を引いた値が映像ビットレートです。さらにコンテナ(mp4)のオーバーヘッドとVBR揺れを見込んで安全係数0.95を掛けるのが実用的です。

例:1分30秒(90秒)の動画を10MBに収めたい

目標ビットレート = (10 × 0.95 × 8192) ÷ 90 ≈ 864 kbps
映像ビットレート = 864 − 128 (音声) = 736 kbps

3. コマンド例(用途別)

3-1. 無料ユーザー向け(10MB以下)

90秒動画を10MBに収める例:

ffmpeg -i input.mp4 \
  -c:v libx264 -b:v 736k -maxrate 810k -bufsize 1472k \
  -preset fast -c:a aac -b:a 128k -movflags +faststart \
  discord_10mb.mp4

再生時間が違う場合は上の公式でビットレートを差し替えてください。

3-2. Nitro Basic向け(25MB以下)

90秒動画を25MB枠で:

# (25 × 0.95 × 8192) / 90 ≈ 2161 kbps total → 映像 2033 kbps
ffmpeg -i input.mp4 \
  -c:v libx264 -b:v 2033k -maxrate 2236k -bufsize 4066k \
  -preset fast -c:a aac -b:a 128k -movflags +faststart \
  discord_25mb.mp4

フルHD 1080pでも破綻しにくいビットレートが確保できます。

3-3. ブースト Lv2サーバー(50MB以下)

# (50 × 0.95 × 8192) / 90 ≈ 4322 kbps → 映像 4194 kbps
ffmpeg -i input.mp4 \
  -c:v libx264 -b:v 4194k -maxrate 4613k -bufsize 8388k \
  -preset fast -c:a aac -b:a 128k -movflags +faststart \
  discord_50mb.mp4

3-4. 長尺(5分以上)は音声を64kbpsに

5分を超えると、映像ビットレートが数百kbpsまで下がって画質に響きます。音声を64kbpsのモノラル寄りまで下げて映像に回すと破綻を抑えられます。

# 6分(360秒)動画を10MBに:(10 × 0.95 × 8192) / 360 ≈ 216 kbps → 映像 152 kbps
ffmpeg -i input.mp4 \
  -c:v libx264 -b:v 152k -maxrate 167k -bufsize 304k \
  -vf scale=854:-2 \
  -preset medium -c:a aac -b:a 64k -ac 1 -movflags +faststart \
  discord_10mb_long.mp4

scale=854:-2 で480p相当に落としています。152kbpsで720p以上は現実的ではありません。


4. 維持できる解像度の目安

H.264で破綻せずに見れる映像ビットレートの下限を、経験的に以下でまとめます。

解像度最低ビットレート目安(H.264)10MB枠で収まる秒数
1080p約3.5 Mbps約22秒まで
720p約1.8 Mbps約42秒まで
480p約0.8 Mbps約95秒まで
360p約0.4 Mbps約190秒(3分強)まで

実測値は被写体次第で±30%程度ぶれます。静止画多めのプレゼン動画ならもっと下げられます。


5. 2パスエンコードで正確にサイズを合わせる

単パスでは±5%程度ずれることがあります。厳密にサイズを合わせたい場合は2パスです。

# パス1:分析のみ
ffmpeg -y -i input.mp4 \
  -c:v libx264 -b:v 736k -pass 1 -preset medium -an -f mp4 /dev/null

# パス2:出力
ffmpeg -i input.mp4 \
  -c:v libx264 -b:v 736k -pass 2 -preset medium \
  -c:a aac -b:a 128k -movflags +faststart \
  discord_10mb.mp4

Windowsでは /dev/nullNUL に、ファイル終端を ^ 継続にしてください。


6. Windows用バッチファイル(ドラッグ&ドロップ)

discord_10mb.bat として保存し、動画ファイルをドロップすると 10MB 圧縮版が出力されます。

@echo off
setlocal enabledelayedexpansion
if "%~1"=="" (
  echo 使い方: このBATファイルに動画をドラッグしてください
  pause & exit /b 1
)

rem 動画の長さをffprobeで取得(秒)
for /f "tokens=*" %%i in ('ffprobe -v error -show_entries format^=duration -of default^=noprint_wrappers^=1:nokey^=1 "%~1"') do set DUR=%%i
set /a DURINT=%DUR:~0,-7%
if "%DURINT%"=="" set DURINT=60

rem 10MB × 0.95 × 8192 / 秒 = 合計kbps、そこから音声128kbps引く
set /a TOTAL=77824 / %DURINT%
set /a VIDEO=%TOTAL% - 128
if %VIDEO% lss 150 set VIDEO=150

set /a MAXRATE=%VIDEO% * 11 / 10
set /a BUFSIZE=%VIDEO% * 2

ffmpeg -y -i "%~1" ^
  -c:v libx264 -b:v %VIDEO%k -maxrate %MAXRATE%k -bufsize %BUFSIZE%k ^
  -preset fast -c:a aac -b:a 128k -movflags +faststart ^
  "%~dpn1_discord_10mb.mp4"

echo.
echo 完了: %~dpn1_discord_10mb.mp4
pause

ffprobe は FFmpeg と同時インストールされます。ffmpeg -version が通るPC上ならそのまま使えます。

インストールがまだの方: Windows/macOS/Linux別FFmpegインストール手順をご参照ください。


7. トラブルシューティング

問題1: 仕上がりが上限をわずかに超える

原因: コンテナヘッダとVBR揺れの見積もりが不足。
解決策: 安全係数を 0.95 から 0.90 に下げる、または2パスに切り替える。

問題2: 音声がブツ切れする

原因: 音声ビットレートが低すぎ(32kbps など)。
解決策: 最低でも-b:a 64k、会話主体でも48kbps以上を確保する。

問題3: 古いDiscordアプリで動画プレビューが出ない

原因: -movflags +faststart がない、または B-frame の過剰使用。
解決策: -movflags +faststart を必ず入れる。それでも問題なら -bf 0 を追加してBフレームを無効化。

問題4: WindowsのバッチでFFprobeが長さを取得できない

原因: パスにスペースや日本語がある、または ffprobe にPATHが通っていない。
解決策: ファイルを英数字のフォルダ(例:C:\tmp\)にコピーしてから再実行。

問題5: 圧縮は成功したが画質が許容できない

原因: 元動画が長尺 or 高解像度で、目標ビットレートが低すぎる。
解決策: -vf scale=1280:-2(720p)や scale=854:-2(480p)を入れる、もしくは -ss/-to で不要部分をカットしてから圧縮。


FAQ

Q1. H.265(HEVC)を使えばもっと高画質で収まりますか?
A. 原理的には可能ですが、Discordは現状 H.265 のインラインプレビューに部分的対応で、スマホアプリや古いクライアントでは再生できません。確実にプレビューさせたいなら H.264 を選んでください。

Q2. なぜ安全係数 0.95 が必要?
A. mp4コンテナの moov アトムやチャプター情報で数十KB〜数百KBのオーバーヘッドが発生します。VBRの揺れも加わり、無係数で -b:v を指定すると数%超過することがあります。

Q3. -b:v の代わりに -crf で収められますか?
A. CRFは「品質基準」で動くため、出力サイズは予測できません。Discordのように上限付きの用途ではビットレート指定の方が計算が合います。

Q4. 音声なし動画(ゲームクリップ)なら計算式はどう変わる?
A. 音声引き算を消して全ビットレートを映像に回せます。-an(音声なし)で出力してください。映像ビットレートがそのまま目標ビットレートになります。

Q5. Nitro加入者ですが500MB制限で困っています。さらに圧縮したい。
A. 500MBは「アップロード上限」であり、Discord側でさらに変換される場合があります。長時間配信や4K素材は libx265 + -crf 28 程度でまず配布サイズを抑えたうえで、各プラットフォーム上限に合わせて第二次圧縮するのが安全です。


関連ツール・記事

ブラウザで即座に試したい場合はDiscord動画圧縮ツールへ。ビットレート計算まで自動です。手元で繰り返し使うなら上記バッチファイルが便利です。

FFmpeg チートシート(PDF):ビットレート逆算・圧縮・フィルタのよく使うコマンドをA4一枚に。

関連記事


動作確認: ffmpeg 6.1.1 / Windows 11 + Ubuntu 24.04
一次ソース: ffmpeg.org/ffmpeg.html / Discord公式ヘルプ