まずDiscordの送信画面で、送れる容量の上限を確かめてください。計算はその値から始めます。
容量ではなく、通信や添付の権限が原因で送れないときは、先に送れないときの確認手順を見てください。FFmpegをインストールせずに試すなら、容量を指定できる圧縮ツールが使えます。
上限をプラン名だけで決めない
2026-09-11時点のDiscordの添付ファイルFAQでは、上限は無料プランで20MB、Nitro Basicで50MB、Nitroで最大500MBです。FAQには、上限を試験的に変えることがあるとも書かれています。古いヘルプや記事には、これと違う値が残っています。
実際の送信画面に出る上限と、送り先で適用される条件を優先してください。
MBからビットレートを計算する
計算では、1 MB = 1,000,000バイト、1 kbps = 1,000 bit/s とします。1 MiBは1,048,576バイトで、MBとは別の単位です。
合計kbps = 目標MB × 8000 × 余裕率 ÷ 動画の秒数
映像kbps = floor(合計kbps − 音声kbps)
余裕率0.95は、全体の5%を、コンテナ(動画の入れ物)の情報などの分として残しておく値です。0.95にしても、上限に収まらないことはあります。
映像kbpsがゼロ以下になったら、その長さと音声の設定では上限に収まりません。動画を短くするか、音声が要らなければ消すか、共有リンクを使うことを考えてください。
たとえば90秒の動画で、音声が128kbps、余裕率が0.95なら、次のようになります。
| 目標容量 | 合計kbps(概算) | 指定する映像kbps |
|---|---|---|
| 10 MB | 844.44 | 716 |
| 20 MB | 1688.89 | 1560 |
| 25 MB | 2111.11 | 1983 |
| 50 MB | 4222.22 | 4094 |
表の値は計算で出したもので、実際に出力したサイズでも、プランの一覧でもありません。画質を保つのに必要なビットレートは、映っているものや文字、動きの量で変わります。
90秒を20MB以内に近づける例
先に、入力が90秒であることを確かめます。次のコマンドは、最初の映像1本と、あれば最初の音声1本を使い、H.264とAACのMP4にします。
ffmpeg -i input.mp4 -map 0:v:0 -map "0:a:0?" -c:v libx264 -b:v 1560k -preset medium -c:a aac -b:a 128k -map_metadata -1 -map_chapters -1 -sn -dn -movflags +faststart discord-20mb.mp4
1行のコマンドなので、PowerShellやコマンドプロンプトでもそのまま実行できます。元のファイルは消さずに残してください。
このコマンドは、動画を90秒に切るものではありません。入力が90秒より長いと、同じ設定でも出力は大きくなります。2本目以降の音声、字幕、チャプターは出力に入りません。-map_metadata -1 でタグの情報は外れますが、映っている顔や声、画面の中の文字はそのまま残ります。
容量が安定しないときは2パスを比較する
2パスでは、1回目で映像を分析し、2回目で同じ素材と同じ映像設定のまま書き出します。1回目の分析結果はログファイルに保存され、2回目で読み込まれます。別の作業と同じログ名を使わないように、専用の作業フォルダーで実行してください。
ffmpeg -i input.mp4 -map 0:v:0 -c:v libx264 -b:v 1560k -preset medium -pass 1 -passlogfile discord20-pass -an -f null -
ffmpeg -i input.mp4 -map 0:v:0 -map "0:a:0?" -c:v libx264 -b:v 1560k -preset medium -pass 2 -passlogfile discord20-pass -c:a aac -b:a 128k -map_metadata -1 -map_chapters -1 -sn -dn -movflags +faststart discord-20mb-2pass.mp4
1回目がエラーで終わったら、2回目は実行しないでください。入力を変えたとき、カットしたとき、解像度や映像の設定を変えたときは、1回目からやり直します。詳しくは2パスエンコードを見てください。
出力後に確認すること
| 確認結果 | 次に行うこと |
|---|---|
| ファイルがない、0バイト、FFmpegがエラーで終わった | 失敗として扱い、エラーの内容と入力の形式を確かめる |
| 実際のファイルサイズが上限以上 | 余裕を増やして計算し直し、元の動画から変換し直す。短くする方法や共有リンクとも比べる |
| 容量内だが、文字や動きが見づらい | 実際の画像での画質比較を見て、長さ・解像度・容量のどれを優先するか決める |
| 音声・字幕・向きが足りない | 元の動画と出力を比べ、選ぶトラックや変換の設定を見直す |
| 容量内なのに送れない | 小さな別のファイルでも送れるか試し、通信・権限・Discord側の状態を確かめる |
| 送れたが、相手が再生できない | 相手のアプリで再生できるか確かめる。容量に収まることと、再生できることは別の問題 |
Windowsでは、エクスプローラーでファイルのプロパティを開き、バイト数を確かめてください。画面に出るMBの表示は丸められているので、それだけで判断しないでください。送る前に、元の動画と出力の最初・途中・最後を再生して比べます。
実際に出力したサイズ
上の1パスと2パスの例を、90秒・640x360・30fpsのテスト映像(合成した模様と440Hzの音)で1回ずつ実行しました(2026-09-11、Windows版FFmpeg 8.1)。
| 20MB目標の例 | 出力のバイト数 | 出力の長さ |
|---|---|---|
| 1パス | 19,039,954 | 90.005秒 |
| 2パス | 19,115,005 | 90.005秒 |
どちらも20,000,000バイト以内に収まりました。この例では、2パスの方がわずかに大きくなりました。
入力の条件と、出力の容量・長さは、テストの記録(JSON)で確かめられます。