基本構文の全体像

公式ドキュメント に記載されている 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.

拡張子自動選択されるコンテナ
.mp4MP4(MPEG-4 Part 14)
.mkvMatroska
.aviAVI
.movQuickTime
.webmWebM
.mp3MP3
.wavWAV

拡張子で判定できない場合は -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