FFmpegを使ってみたいけど、コマンドの書き方がわからない、オプションの意味が難しそう……そんな初心者の方でも大丈夫です。この記事では、FFmpegコマンドの基本的な構造と各パーツの意味を、実例を交えてわかりやすく説明します。


基本構文の全体像

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


よくある質問

なぜ -i を入力ファイルの前に書くの?

-i は「次に来るのが入力ファイル」という宣言です。FFmpeg は入力と出力をオプションで明示的に区別する設計のため、複数入力にも対応できます。

オプションの順番は決まっていますか?

はい。グローバルオプション → 入力オプション → -i 入力 → 出力オプション → 出力ファイル の順です。順番を変えると意図しない解釈になることがあります。

-c:v-vcodec の違いは?

機能は同じです。-c:v が現代的な書き方、-vcodec は古い書き方で互換のため残っています。新しいコマンドでは -c:v を推奨します。

出力ファイルが先にあると上書きされる?

デフォルトでは確認プロンプトが出ます。-y で強制上書き、-n で既存ファイルがあれば失敗、を選べます。スクリプトでは -y を明示するのが定番です。

ストリームの番号はどう確認するの?

ffprobe input.mp4 または ffmpeg -i input.mp4Stream #0:0, #0:1 のように表示されます。-map 0:0 のように番号で指定して使います。