「Discordに動画を貼りたいのにファイルサイズ上限で弾かれる」——これをFFmpegの1コマンドで確実に解決します。このガイドではアップロード上限別(10MB / 25MB / 50MB / 500MB)に動画サイズを逆算する公式、1080p / 720p を保てる秒数の目安、2パスでヘッダ安全係数を詰める方法までまとめます。所要時間:10分。
動作確認: FFmpeg 6.1 / Windows 11 / Ubuntu 24.04
ブラウザで即時圧縮したい場合: Discord動画圧縮ツールがビットレート計算とエンコードを全部やってくれます(ffmpeg.wasm、サーバーに送らない)。
この記事でわかること
- 2024〜2026年時点のDiscordアップロード上限
- 目標サイズからビットレートを逆算する公式
- 10MB / 25MB / 50MB 別の1コマンド例
- ファイルが上限をわずかに超える時の調整手順
- 2パスエンコードで正確にサイズを合わせる
- WindowsバッチファイルでD&D圧縮できるスクリプト
- FAQ 5問
1. Discordのアップロード上限(2026年時点)
| プラン / ブースト状態 | 上限 | 備考 |
|---|---|---|
| 無料ユーザー | 10 MB | 2024年5月以降、従来の8MBから引き上げ |
| Nitro Basic / Classic | 25 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/null を NUL に、ファイル終端を ^ 継続にしてください。
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でMP4を圧縮する方法(CRF・ビットレート解説)
- 2パスエンコード — 正確なビットレートとファイルサイズの制御
- シェルスクリプトでバッチ変換を自動化する
- Windows/macOS/Linux別 FFmpegインストール手順
動作確認: ffmpeg 6.1.1 / Windows 11 + Ubuntu 24.04
一次ソース: ffmpeg.org/ffmpeg.html / Discord公式ヘルプ