基本構文の全体像
公式ドキュメント に記載されている FFmpeg コマンドの構文は次のとおりです。
ffmpeg [グローバルオプション] {[入力オプション] -i 入力URL} ... {[出力オプション] 出力URL} ...
具体例で見てみましょう。
ffmpeg -y -i input.mp4 -c:v libx264 -c:a aac output.mkv
| 部分 | 説明 |
|---|---|
ffmpeg | コマンド本体 |
-y | グローバルオプション(出力ファイルを確認なしに上書き) |
-i input.mp4 | 入力ファイル指定 |
-c:v libx264 | 出力オプション(映像コーデックを libx264 に指定) |
-c:a aac | 出力オプション(音声コーデックを AAC に指定) |
output.mkv | 出力ファイル(拡張子からコンテナが自動判定される) |
グローバルオプション
グローバルオプションはコマンド全体に影響します。入力・出力の指定より前に書きます。
| オプション | 説明 |
|---|---|
-y | 出力ファイルが存在する場合に確認なしで上書き |
-n | 出力ファイルが存在する場合はスキップ(上書きしない) |
-loglevel quiet | ログ出力を最小にする |
-hide_banner | バージョン等のバナーを非表示にする |
入力の指定(-i)
入力ファイルは -i フラグで指定します(公式)。
ffmpeg -i input.mp4 output.avi
複数の入力を指定する場合は -i を複数回使います。
ffmpeg -i input.mp4 -i audio.wav output.mkv
重要な規則: 入力オプションは必ず
-iの直前に書きます。-iより後に書くと、それは出力オプションとして解釈されます。
出力の指定
出力ファイルはコマンドの末尾に書きます(- ではじまらない引数は出力URLとして扱われます)。
ffmpeg -i input.mkv output.mp4
出力フォーマットの自動判定
公式ドキュメント によれば、出力フォーマットは「通常ファイル拡張子から推測される」と説明されています。
The format is normally auto detected for input files and guessed from the file extension for output files.
| 拡張子 | 自動選択されるコンテナ |
|---|---|
.mp4 | MP4(MPEG-4 Part 14) |
.mkv | Matroska |
.avi | AVI |
.mov | QuickTime |
.webm | WebM |
.mp3 | MP3 |
.wav | WAV |
拡張子で判定できない場合は -f オプションでフォーマットを明示します。
ffmpeg -i input.mp4 -f matroska output
オプションの順序規則(最重要)
公式ドキュメント は順序規則について次のように述べています。
As a general rule, options are applied to the next specified file. Therefore, order is important, and you can have the same option on the command line multiple times.
つまり、オプションは直後に続くファイルに適用されます。
入力オプションと出力オプションの違い
同じ -ss(シーク)でも、-i の前に書くか後に書くかで意味が変わります。
# -ss を入力側に指定(入力のデコード位置を指定。高速だが不正確なこともある)
ffmpeg -ss 10 -i input.mp4 output.mp4
# -ss を出力側に指定(出力の開始位置を指定。正確だが入力全体をデコードする)
ffmpeg -i input.mp4 -ss 10 output.mp4
入力と出力を混在させない
# NG: 入力と出力が混在している
ffmpeg -i input.mp4 output1.mp4 -i input2.mp4
# OK: 先に全入力、後に全出力
ffmpeg -i input.mp4 -i input2.mp4 output.mp4
コーデック指定(-c, -c:v, -c:a)
-c オプションでエンコーダー・デコーダーを指定します。
| オプション | 対象 | 例 |
|---|---|---|
-c:v | 映像コーデック | -c:v libx264, -c:v libvpx-vp9, -c:v copy |
-c:a | 音声コーデック | -c:a aac, -c:a libmp3lame, -c:a copy |
-c | 全ストリーム | -c copy |
特に重要な copy:
ffmpeg -i input.mkv -c copy output.mp4
-c copy は再エンコードせずにストリームをそのままコピーします。「非常に高速で品質劣化もない」と公式に記載されています。
ストリーム選択(-map)
FFmpegはデフォルトで「最適なストリームを自動選択」します(公式)。
- 映像: 最も高解像度のストリーム
- 音声: 最もチャンネル数の多いストリーム
明示的に選択する場合は -map を使います。
# 1つ目の入力の映像ストリーム0番と音声ストリーム0番を出力
ffmpeg -i input.mp4 -map 0:v:0 -map 0:a:0 output.mp4
よくある構文ミス
ミス 1: グローバルオプションを後ろに書く
# NG: -y を後ろに書いてしまった
ffmpeg -i input.mp4 output.avi -y
# OK: グローバルオプションは先頭へ
ffmpeg -y -i input.mp4 output.avi
ミス 2: 出力オプションを入力の前に書く
NG(-c:v libx264 が入力オプションとして解釈されエラー):
ffmpeg -c:v libx264 -i input.mp4 output.mp4
OK(コーデック指定は -i より後ろ):
ffmpeg -i input.mp4 -c:v libx264 output.mp4
ミス 3: 出力ファイルを指定し忘れる
NG(出力がないためエラー):
ffmpeg -i input.mp4 -c:v libx264
OK:
ffmpeg -i input.mp4 -c:v libx264 output.mp4
実践:構文確認コマンド
以下は実際に動作する最小構成のコマンドです。
ffmpeg -i input.mp4 output.avi
ffmpeg -y -i input.mp4 -c:v libx264 -c:a aac output.mkv
ffmpeg -i input.mp4 -c copy output.mkv
コーデックの詳細や具体的な変換レシピは「FFmpegで動画をMP4(H.264/AAC)に変換する」を参照してください。
動作確認: ffmpeg 6.1.1 / Ubuntu 24.04 (GitHub Actions runner) 一次ソース: ffmpeg.org/ffmpeg.html — Synopsis / Detailed description