---
title: "FFmpegとは？使い方とコマンド一覧｜MP4変換・音声抽出・fps変更を9.0で実行確認"
url: "https://www.issoh.co.jp/tech/details/5023/"
published: 2025-01-27
updated: 2026-09-27
categories: ["開発"]
publisher: "株式会社一創"
---

# FFmpegとは？使い方とコマンド一覧｜MP4変換・音声抽出・fps変更を9.0で実行確認

FFmpegは、動画や音声の変換・圧縮・切り出し・結合をコマンド1行で実行できる無料のソフトウェアです。できることが多い分オプションも多く、同じ「MP4にしたい」でも、再エンコードするかどうかで書き方も処理時間も変わります。

この記事では、よく使う操作を目的別のコマンド一覧にまとめ、形式変換、音声抽出、CRFによる圧縮、解像度とfpsの変更、切り出し、字幕、結合、一括変換の順に解説します。コマンドは2026年9月時点の最新版FFmpeg 9.0.2（evermeet.cxのmacOS用ビルド）とbashで実行し、出力をffprobeで確認しました（Windowsのコマンドプロンプト用の1行だけは未実行です）。9.0では `-vsync` などの古いオプションが削除され、古い解説記事のコマンドがそのままでは動かなくなっています。その置き換え方も載せています。

## まとめ：FFmpegの要点とよく使うコマンド

- FFmpegは、変換用の `ffmpeg`、解析用の `ffprobe`、再生用の `ffplay` と、それらが使うライブラリ群をまとめたプロジェクト名です。公式サイトはソースコードだけを配布しており、実行ファイルは公式サイトからリンクされた外部のビルドを使います。
- 2026年9月時点の最新版は9.0.2「Lei」（2026-09-18公開）で、8.1系も8.1.3（2026-09-21）まで更新されています。
- 基本形は `ffmpeg [入力オプション] -i 入力 [出力オプション] 出力` です。オプションは直後のファイルに効くので、書く位置で意味が変わります。
- コンテナだけ替えるなら `-c copy`（デコードもエンコードもしないので速く、画質も落ちない）、コーデックやサイズを変えるなら再エンコード（`-c:v libx264 -crf 23` など）を使います。
- 画質とサイズの調整はビットレート指定よりCRFが先です。libx264の既定はCRF 23で、数値を上げるほどファイルが小さくなります。
- FFmpeg 9.0で `-vsync` と `-filter_complex_script` は削除されました。代わりに `-fps_mode` と `-/filter_complex ファイル名` を使います。
- 解像度の違う動画をconcatでコピー結合したときと、`-c copy` で切り出したときは、エラーが出ないまま想定と違うファイルができます。結果はffprobeで確かめてください。

## FFmpegの正体：3つのコマンドと配布形態・ライセンス

「FFmpeg」はプロジェクト名で、実際に打つのは次の3つのコマンドです。中身は libavcodec（コーデック）、libavformat（コンテナの読み書き）、libavfilter（フィルター）などのライブラリで、OBS StudioやVLC、Pythonの動画編集ライブラリなど多くのソフトがこれを内部で使っています。

| コマンド      | 役割    | 典型的な使い方             |
| --------- | ----- | ------------------- |
| `ffmpeg`  | 変換・加工 | 形式変換、圧縮、切り出し、結合     |
| `ffprobe` | 解析    | コーデック、解像度、fps、長さの確認 |
| `ffplay`  | 簡易再生  | フィルターの効き具合の確認       |

### 配布形態とインストールの入口

[公式サイトのダウンロードページ](https://ffmpeg.org/download.html)には「FFmpeg only provides source code.」とあり、実行ファイルは公式からリンクされた外部のビルドを使います。Windowsなら gyan.dev または BtbN、macOSなら evermeet.cx の静的ビルドか Homebrew（`brew install ffmpeg`）、Ubuntu・Debianなら `sudo apt install ffmpeg` が一般的です。ただし、aptで入るのはディストリビューションが固定した版で、最新の9.0系とは限りません。導入手順と版ごとの変更点は[FFmpeg 8.1の新機能とインストール方法の解説](/tech/details/11447/)にまとめています。

入ったかどうかは `ffmpeg -version` で確かめます。1行目に版、`configuration:` 行に有効化されたライブラリが並びます。`--enable-libx264` が無いビルドでは、この記事の `-c:v libx264` は使えません。

### ライセンスと商用利用の条件

FFmpeg本体はLGPL 2.1以降です。ただし[公式の法務ページ](https://ffmpeg.org/legal.html)のとおり、x264などGPLの部品を有効化してビルドした場合は、FFmpeg全体にGPLが適用されます。手元のビルドのライセンスは `ffmpeg -L` で表示できます。今回使った evermeet.cx のビルドは `--enable-gpl --enable-version3` 付きなので、表示はGPL version 3以降でした。

コマンドとして使って変換するだけなら、変換後の動画にライセンス上の制約はかかりません。自社製品に同梱・組み込みして配布する場合は、LGPLの条件（ソースの提供や動的リンクなど）を満たす必要があります。GPL部品入りのFFmpegライブラリを自社のプログラムにリンクして配布すると、そのプログラムにもGPLの条件がかかります。組み込む場合は、ビルド構成（`--enable-gpl` の有無）から選んでください。

## FFmpegの基本構文：入力オプションと出力オプションの位置

[公式ドキュメント](https://ffmpeg.org/ffmpeg.html)の原則は「オプションは次に指定したファイルに適用される」です。`-i` より前に書けば入力の読み方、出力ファイル名の前に書けば出力の作り方を指定したことになります。

```
ffmpeg -hide_banner -y -ss 30 -i input.mp4 -t 10 -c:v libx264 -crf 23 -c:a aac output.mp4
#                   └入力オプション┘          └──────── 出力オプション ────────┘
```

- `-i`：入力ファイル。複数書けば0番、1番…と番号が振られます。
- `-c:v` ／ `-c:a`：映像／音声のエンコーダー。`copy` を指定すると再エンコードせずにそのまま移します。
- `-vf` ／ `-af`：映像／音声フィルター（拡大縮小、fps変換、音量など）。
- `-y`：出力先を確認なしで上書きします。一括処理で既存ファイルを残したいときは逆の `-n` を使います。
- `-hide_banner`：起動時のビルド情報を省きます。

出力の拡張子から形式が決まり、エンコーダーを省略するとその形式の既定が選ばれます。9.0.2のMP4の既定は映像h264・音声aac（`ffmpeg -h muxer=mp4` で確認）で、libx264入りのビルドならlibx264が使われます。作業前後の確認はffprobeで行います。

```
ffprobe -v error -show_entries stream=codec_name,width,height,r_frame_rate -of csv=p=0 input.mp4
# h264,1920,1080,30/1
# aac,0/0
```

## FFmpegコマンド一覧：目的別の早見表

よく使う操作の核になる部分だけを並べました。詳しい使い分けは各章で説明します。

| 目的                | コマンド                                                     |
| ----------------- | -------------------------------------------------------- |
| MKV・MOVをMP4へ（無劣化） | `ffmpeg -i in.mkv -c copy out.mp4`                       |
| H.264のMP4へ再エンコード  | `ffmpeg -i in.mov -c:v libx264 -crf 23 -c:a aac out.mp4` |
| 動画からMP3を抽出        | `ffmpeg -i in.mp4 -vn -c:a libmp3lame -q:a 2 out.mp3`    |
| 音声を無劣化で抜く（AAC）    | `ffmpeg -i in.mp4 -vn -c:a copy out.m4a`                 |
| 720pへ縮小           | `ffmpeg -i in.mp4 -vf scale=-2:720 out.mp4`              |
| 30fpsを24fpsへ      | `ffmpeg -i in.mp4 -vf fps=24 out.mp4`                    |
| 30秒目から10秒切り出す     | `ffmpeg -ss 30 -i in.mp4 -t 10 out.mp4`                  |
| サムネイルを1枚書き出す      | `ffmpeg -ss 3 -i in.mp4 -frames:v 1 thumb.jpg`           |
| 90度回転（時計回り）       | `ffmpeg -i in.mp4 -vf transpose=1 out.mp4`               |
| メタデータを消す          | `ffmpeg -i in.mp4 -map_metadata -1 -c copy out.mp4`      |
| Web再生向けに先頭へ索引     | `ffmpeg -i in.mp4 -c copy -movflags +faststart out.mp4`  |

## 形式変換：MOV・MKV・AVIをMP4にする2つの方法

変換には、コンテナ（入れ物）だけを替える方法と、中身のコーデックから作り直す方法があります。先にffprobeで中身を見て、MP4に入るコーデックならコピーで済ませるのが最短です。

### コンテナだけの変更：-c copyでの無劣化変換

iPhoneのMOVや録画ソフトのMKVは、中身がH.264／HEVCとAACであることが多く、その場合は再エンコード不要です。

```
ffmpeg -i input.mkv -map 0 -c copy output.mp4
```

公式ドキュメントのとおりデコードもエンコードもしないため、再エンコードより大幅に速く、画質も変わりません。`-map 0` を付けると全ストリームを移しますが、MKVにSRT字幕が入っているとMP4はそのまま格納できず、`Could not find tag for codec subrip` …… `codec not currently supported in container` で止まります（9.0.2で再現）。字幕も残すなら `-c:s mov_text` を足すか、字幕を外すなら `-map 0:v -map 0:a` に絞ります。AVIの中身がDivX／Xvid（MPEG-4 Part 2）など古いコーデックのときは、次の再エンコードに進みます。

### H.264へ再エンコード（HEVC→H.264を含む）

古いコーデックの動画や、再生環境がHEVCに対応していない場合は、対応する再生環境が広いH.264＋AACへ作り直します。

```
ffmpeg -i input.mov -c:v libx264 -crf 23 -preset medium -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart output.mp4
```

`-pix_fmt yuv420p` は、10bitや4:2:2の素材を一般的なプレーヤーで再生できる形式にそろえる指定です。`-movflags +faststart` の意味は後述の「Web公開前の-movflags +faststart」で説明します。

## 音声抽出とMP3・M4A・WAVへの変換

「MP4からMP3」は、映像を捨てる `-vn` と音声エンコーダーの組み合わせです。

```
# MP3（VBRの高音質側。-q:a は0が最高・9が最低）
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3

# 元のAACをそのまま取り出す（無劣化・再エンコードなし）
ffmpeg -i input.mp4 -vn -c:a copy output.m4a

# 編集ソフトに渡すWAV（44.1kHz・16bit）
ffmpeg -i input.mp4 -vn -c:a pcm_s16le -ar 44100 output.wav
```

MP4の音声はたいていAACなので、音質を落としたくないならMP3に変換せずM4Aで抜くのが正解です。MP3は再エンコードになるため、配布先がMP3を指定しているときだけ使います。音量をそろえたいときは `-af loudnorm=I=-16:TP=-1.5:LRA=11` のようにEBU R128のラウドネス正規化フィルターを使います。

## 画質とファイルサイズの調整：CRF・解像度・ビットレート

### CRFの目安

CRF（Constant Rate Factor）は「一定の画質」を指定する方式で、ファイルサイズは結果として決まります。8bitのlibx264では0〜51の範囲で指定し、数値が小さいほど高画質・大容量になります。既定は23で、9.0.2でCRFを指定せずにエンコードしたときも、x264のログには `crf=23.0` と出ました。

始める値は23、画質を優先するなら18〜20、サイズを優先するなら26〜28あたりから試すのが実用的です。ただし、同じCRFでも素材によってサイズは大きく変わります。ノイズを多く乗せたテスト映像（`testsrc2` と `noise=alls=12:allf=t` で生成した1920×1080・30fps・10秒、yuv420p）を `-preset medium`・音声なしで変換したところ、CRF 18が約187MB、23が約74MB、28が約6.4MBで、5段階動かしただけで10倍以上の差が出ました。本番の前に `-t 10` で10秒だけ書き出し、画質とサイズを見比べて決めてください。

`-preset` は圧縮効率とエンコード速度の兼ね合いを決めるオプションで、既定は `medium` です。libx265（HEVC）は同じ数値でも基準が違い、既定のCRFは28です。

### 1080pから720pへの縮小

```
ffmpeg -i input.mp4 -vf scale=-2:720 -c:v libx264 -crf 23 -c:a copy output_720p.mp4
```

`scale=-2:720` は「高さ720、幅は縦横比を保って2の倍数に丸める」という指定で、1920×1080の素材は1280×720、640×480（4:3）の素材は960×720になりました。一般的なyuv420pでは、libx264は幅・高さが奇数だと `height not divisible by 2` などで止まるため、`-1` ではなく `-2` を使います（丸められるのは計算される側だけなので、指定する側の数値は自分で偶数にします）。

古い記事に多い `-s 1280x720` は、縦横比に関係なく画素数を指定サイズにします。640×480の素材に当てると1280×720になり、FFmpegは画素の縦横比（SAR）を3:4に設定して表示上の4:3を保とうとします。SARを読むプレーヤーでは正しく見えますが、SARを無視する環境では横に引き伸ばされて見えるので、縮小には `scale=-2:高さ` を使うのが確実です。

### ビットレートを指定する場面

配信サービスの入稿規定のように「映像5Mbps以下」と上限が決まっているときは、ビットレートの上限を指定します。CRFと組み合わせることもできます。

```
# 平均ビットレートを指定する
ffmpeg -i input.mp4 -c:v libx264 -b:v 5M -maxrate 5M -bufsize 10M -c:a aac -b:a 160k output.mp4

# 画質はCRFで決め、上限だけ5Mbpsで抑える
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -maxrate 5M -bufsize 10M -c:a aac -b:a 160k output.mp4
```

`-maxrate` と `-bufsize` を付けないと、`-b:v` は平均値にすぎず、動きの激しい場面で上限を超えます。単位の `M`／`k` を忘れると「5ビット毎秒」として解釈されるので注意してください。

## フレームレートの変更：30fps→24fpsと-fps\_mode

### コマを間引く方法と、再生速度を変える方法

「30fpsを24fpsに」には2つの意味があり、結果が大きく違います。6秒・30fpsのテスト動画で比べました。

```
# 間引き：長さは変わらない（6.0秒・144フレーム）
ffmpeg -i input.mp4 -vf fps=24 -c:a copy output_24fps.mp4

# 全コマを24fpsで再生し直す（映画的なコンフォーム）：6秒が7.5秒に伸びる
ffmpeg -i input.mp4 -vf "setpts=30/24*PTS" -r 24 -af "atempo=24/30" output_conform.mp4
```

通常の「24fpsにしたい」は上の `fps=24` です。30コマから24コマへの間引きでは5コマに1コマが落ちるので、動きの間隔が不均等になります。24fpsで撮影した映像と同じ動きにはならない点は理解しておいてください。下のコンフォームは全コマを残したまま再生速度を0.8倍にするので、音声も `atempo` で伸ばさないと映像とずれます。

### \-vsyncは9.0で削除：-fps\_modeへの置き換え

フレームの複製・間引きの方式は、5.1で追加された `-fps_mode` で指定します。古い記事の `-vsync` は長く非推奨のまま残っていましたが、コミット「fftools/ffmpeg: Remove deprecated -vsync option」（作成2026年3月9日・取り込み2026年6月23日）で削除され、9.0では `Unrecognized option 'vsync'.` で止まります。

```
# 旧：ffmpeg -i input.mp4 -vsync cfr -r 30 output.mp4
ffmpeg -i input.mp4 -fps_mode cfr -r 30 output.mp4
```

値は `passthrough`（タイムスタンプをそのまま通す）、`cfr`（複製と間引きで一定fpsにそろえる）、`vfr`、`auto`（既定）の4つです。旧 `-vsync drop` に当たる `drop` も同時に削除され、9.0.2では `Invalid value drop specified for fps_mode` になりました。タイムスタンプが欠けた素材を直す `genpts` は、出力オプションではなく入力側の `-fflags +genpts` で指定します（`-genpts` と書くと未知のオプション扱い）。

## 切り出し：-ss・-t・-toとキーフレームの関係

```
# 1分30秒の位置から20秒間（再エンコードあり＝正確）
ffmpeg -ss 00:01:30 -i input.mp4 -t 20 -c:v libx264 -crf 23 -c:a aac clip.mp4

# 1分30秒から2分00秒まで
ffmpeg -ss 00:01:30 -to 00:02:00 -i input.mp4 -c:v libx264 -crf 23 -c:a aac clip.mp4
```

`-ss` を `-i` の前に置くと、入力を指定位置までシークしてから読むので長い動画でもすぐ始まります。公式ドキュメントによると、再エンコード時は直前のシーク点から目的位置までをデコードして捨てるため、位置は正確です。`-t` は長さ、`-to` は終了位置で、両方あれば `-t` が優先されます。9.0.2では負の `-t` が拒否されるようになりました。

注意が要るのは `-c copy` で切り出すときです。公式ドキュメントは、ストリームコピーでは直前のシーク点から目的位置までの区間が「保持される」と書いています。キーフレームが0秒にしかない動画を `-ss 2.5 -t 2 -c copy` で切ったところ、エラーは出ずにファイルができましたが、中には−2.5秒から始まる137パケットが入っていました。編集リストに対応したプレーヤーでは2.5秒から再生されますが、対応していない環境では冒頭に余計な映像が出たり止まったりします。フレーム単位で正確に切りたいときは再エンコードを選び、コピーで切るならキーフレーム位置を先に調べます。

```
ffprobe -v error -select_streams v -skip_frame nokey -show_entries frame=pts_time -of csv=p=0 input.mp4
```

## 字幕：MP4に入れる方法と焼き込む方法

```
# ソフトサブ（プレーヤーでON／OFFできる）。MP4ではmov_textに変換する
ffmpeg -i input.mp4 -i sub.srt -map 0 -map 1 -c copy -c:s mov_text -metadata:s:s:0 language=jpn output.mp4

# ハードサブ（映像に焼き込む）。libass入りのビルドが必要
ffmpeg -i input.mp4 -vf "subtitles=sub.srt" -c:a copy output_burned.mp4
```

MP4に入れられるテキスト字幕はmov\_textで、SRTを `-c:s mov_text` なしでコピーすると、形式変換の章と同じ `Could not find tag for codec subrip` で止まります。SNSのように字幕トラックを読まない投稿先では、焼き込みを選びます。焼き込みは再エンコードなので時間がかかり、あとから字幕だけを直すことはできません。

## 結合：concatの3つの方式と、エラーなしで壊れる組み合わせ

FFmpegの結合方法は3つあります。

| 方式                               | 再エンコード | 向いている素材             |
| -------------------------------- | ------ | ------------------- |
| concat demuxer（`-f concat`）      | 不要     | 同じ設定で撮った・書き出した動画    |
| concat filter（`-filter_complex`） | 必要     | 解像度やコーデックが違う動画      |
| concat protocol（`concat:a\|b`）   | 不要     | MPEG-TSなど単純に連結できる形式 |

いちばん使うのはconcat demuxerです。ファイル一覧を書いたテキストを渡します。

```
printf "file '%s'\n" part1.mp4 part2.mp4 > list.txt
cat list.txt
# file 'part1.mp4'
# file 'part2.mp4'

ffmpeg -f concat -safe 0 -i list.txt -c copy merged.mp4
```

`-safe 0` は、絶対パスや記号を含むファイル名を許可する指定です。公式ドキュメントはconcat demuxerの条件を「All files must have the same streams (same codecs, same time base, etc.)」としていますが、条件を外れてもエラーにならないことがあります。1920×1080と1280×720のH.264動画をこの方法で結合したところ、終了コード0で完了し、ffprobeのストリーム情報は1920×1080と表示されました。ところがフレームを数えると、後半180フレームは1280×720のままでした。プレーヤーによっては後半が崩れたり止まったりします。解像度やfpsが違う素材は、concat filterで両方の映像を同じサイズ・SAR・fpsにそろえてから結合します。

```
ffmpeg -i part1.mp4 -i part2_720p.mp4 -filter_complex "[0:v]scale=1920:1080,setsar=1,fps=30[v0];[1:v]scale=1920:1080,setsar=1,fps=30[v1];[v0][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" -c:v libx264 -crf 23 -c:a aac merged.mp4
```

この例は両方の素材に音声がある前提です。音声のない素材が混ざる場合は、`anullsrc` で無音を作ってつなぐなど、音声側の対応が別に必要です。

## 一括変換：フォルダ内の動画をまとめて処理

macOS・Linuxのbashで、フォルダ内のMOVをすべてMP4へ変換するスクリプトです。空白を含むファイル名でも動作を確認しています。

```
#!/usr/bin/env bash
set -u
shopt -s nullglob
mkdir -p out
for f in *.mov; do
  ffmpeg -hide_banner -loglevel error -nostdin -n -i "$f" \
    -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k \
    -movflags +faststart "out/${f%.*}.mp4" \
    || echo "失敗: $f" >> out/errors.log
done
```

`shopt -s nullglob` は、MOVが1本も無いときに `*.mov` という文字列そのものを処理しないための指定です。`-nostdin` は標準入力での対話（キー操作の受け付け）を無効にします。公式ドキュメントも、バックグラウンドで動かす場合などに有用だと書いています。`-n` は出力ファイルが既にあればそのファイルを飛ばします。ただし完成したかどうかは見ないので、途中で止めた場合は書きかけのMP4を消してから再実行してください。Windowsのコマンドプロンプトなら1行で書けます（バッチファイルに書くときは `%` を `%%` にします）。

```
for %f in (*.mov) do ffmpeg -n -i "%f" -c:v libx264 -crf 23 -c:a aac "%~nf.mp4"
```

Pythonから呼ぶなら、subprocessで上のコマンドを組み立てるか、[MoviePyでの動画編集](/tech/details/6079/)を使います。MoviePyも内部ではFFmpegを呼び出しています。

## FFmpeg Command Generatorの使い方と、生成コマンドを確かめる手順

「FFmpeg Command Generator」という名前の公式ツールはありません。GitHubで検索すると同じ名前の個人リポジトリが複数見つかりますが、その中でスター数が多いのは alfg氏の **[ffmpeg-commander](https://github.com/alfg/ffmpeg-commander)**（ffmpeg-commander.com・MITライセンス・スター約1,100・最終コミット2026年9月）です。HandBrakeを参考にしたWeb画面で、コンテナ、コーデック、CRF、解像度などを選ぶとコマンドが組み上がります。プリセットは次のようなものがそろっています。

- H.264／VP9の360p〜1080p、CRFと固定ビットレート
- faststart付きのWeb向けMP4、AV1
- 縦型9:16（1080×1920）と正方形
- MP3・M4A・FLACへの音声抽出
- タイムラプス、スローモーション、10秒プレビュー

設定はURLに入るので、チーム内で同じ変換条件を共有するのに向いています。ただしREADME自身が「FFmpegの全オプションは網羅していない」「出力はFFmpegの版やビルド構成で変わりうる」と書いています。最近は自然文からコマンドを作るAI型のジェネレーター（llmpegなど）や、生成AIチャットに頼む方法も増えましたが、学習時点より後の変更は反映されないため、9.0で削除された `-vsync` のようなオプションを含むコマンドが出てくることがあります。どのツールで作ったコマンドも、次の3段階で確かめてから本番のファイルに当ててください。

1. `ffmpeg -h full | grep -- -オプション名` で、手元のビルドにそのオプションがあるかを見る
2. `-t 5` を付けて先頭5秒だけ変換する
3. 出力をffprobeで開き、コーデック・解像度・fps・長さが狙いどおりかを確認する

Claude CodeのようなAIエージェントにFFmpegを実行させる手順は、[Claude Codeで動画を編集・生成・読み込みする方法](/tech/details/12534/)で扱っています。

## FFmpeg 9.0で動かなくなった書き方と置き換え先

9.0では、非推奨のまま残っていたffmpegコマンドのオプションがまとめて削除されました（いずれも2026年3月9日作成・6月23日取り込みのコミット）。古い記事やAIが出すコマンドで次のエラーが出たら、下の表で置き換えます。

| 9.0で削除                         | 9.0.2での表示                   | 置き換え先                    |
| ------------------------------ | --------------------------- | ------------------------ |
| `-vsync cfr` など                | Unrecognized option ‘vsync’ | `-fps_mode cfr`          |
| `-vsync drop`／`-fps_mode drop` | Invalid value drop          | なし（`passthrough`等を検討）    |
| `-filter_complex_script f.txt` | Unrecognized option         | `-/filter_complex f.txt` |
| `-top 1`                       | is not a encoding option    | `-vf setfield=tff`       |

`-/オプション名 ファイル名` は、オプションの値をファイルから読む書き方で、`-/vf` や `-/filter_complex` に使えます（9.0.2で動作確認）。フィルターが長くなる処理は、この形でファイルに逃がすとシェルのクォートに悩まずに済みます。`-top` は2023年に非推奨となった際、コミットメッセージで「setfieldフィルターと完全に重複する」と説明されていました。フィールド順を指定するオプションなので、インターレース素材を扱う場合だけ関係します。

## よく出るエラーメッセージと対処

| メッセージ                                      | 原因           | 対処                     |
| ------------------------------------------ | ------------ | ---------------------- |
| ‘ffmpeg’ は、内部コマンドまたは外部コマンド…                | PATH未設定      | binフォルダをPATHに追加        |
| At least one output file must be specified | 出力ファイル名が無い   | 末尾に出力名を書く              |
| Encoder not found                          | ビルドに無いエンコーダー | `ffmpeg -encoders` で確認 |
| moov atom not found                        | 書き出し途中のMP4   | 元データから再出力              |
| width not divisible by 2                   | 奇数サイズ        | `scale=-2:高さ` を使う      |

Windowsで「内部コマンドまたは外部コマンド…として認識されていません」と出るのは、ffmpeg.exeのあるbinフォルダが環境変数PATHに入っていないためです。設定後はコマンドプロンプトを開き直してください。`-c:v libx264` で「Encoder not found」と出た場合は、libx264を含まないビルドです。`ffmpeg -encoders` の一覧にlibx264があるビルドへ入れ替えます。

### Web公開前の-movflags +faststart

FFmpegのMP4出力は、既定ではファイル末尾に索引（moov）を書きます。この状態でWebに置くと、ブラウザは再生の前に末尾の索引を取りに行く必要があり、範囲指定の取得（HTTPのRangeリクエスト）に対応していない配信環境では、全体を読み込むまで再生が始まりません。4.8MBのテストファイルで確かめると、通常出力のmoovは4,785,567バイト目、`-movflags +faststart` 付きでは36バイト目にありました。録画中に強制終了してmoovが書かれなかったファイルが、上の表の「moov atom not found」です。

## FFmpegに関するよくある質問

### FFmpegで何ができますか？

動画・音声の形式変換、圧縮、解像度やfpsの変更、切り出し、結合、音声抽出、字幕の追加や焼き込み、サムネイルやGIFの書き出しなどです。カメラや画面のキャプチャ、ライブ配信の送出にも使われます。

### FFmpegは無料ですか？商用利用できますか？

無料です。変換ツールとして使う分には商用の動画制作にも使えます。製品に組み込んで配布するときは、LGPL（GPL部品入りのビルドならGPL）の条件を満たす必要があります。

### FFmpegは安全ですか？

公式が配布するのはソースコードだけなので、実行ファイルは公式のダウンロードページからリンクされた配布元から入手してください。ポイントリリースでは脆弱性の修正も入ります（9.0.2でもメモリ範囲外書き込みの修正が複数あります）。同じ系列の最新版へ更新しておくのが基本です。

### FFmpegのインストール方法は？

Windowsは gyan.dev などのビルドを展開してbinをPATHへ、macOSは `brew install ffmpeg`、Ubuntuは `sudo apt install ffmpeg` です。確認は `ffmpeg -version` です。

### MP4をMP3に変換するコマンドは？

`ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3` です。MP3である必要がなければ、`-c:a copy` でM4Aとして抜くほうが音質が落ちず、再エンコードもしません。

## 関連記事

- [FFmpeg 8.1の新機能と8.0からの変更点｜インストール方法・最新版8.1.2まで解説](/tech/details/11447/)
- [MoviePyの使い方｜v2対応の動画編集コードとv1からの移行ポイント](/tech/details/6079/)
- [Claude Codeで動画を編集・生成・読み込みする方法｜スキル×FFmpeg×Remotion](/tech/details/12534/)
- [JavaCVとは何か？OpenCVとFFmpegを統合したJavaラッパーの概要](/tech/details/6779/)

---

出典: [FFmpegとは？使い方とコマンド一覧｜MP4変換・音声抽出・fps変更を9.0で実行確認](<https://www.issoh.co.jp/tech/details/5023/>)（株式会社一創）
