32blogby StudioMitsu
Archive12 min read

FFmpegの使い方 完全入門ガイド【実用コマンド集】

FFmpegの基本コマンドを実例つきで解説。動画変換・音声抽出・圧縮・結合・カット・字幕追加まで、実際に動くコマンドを網羅した実践的入門ガイド。

FFmpeg は「なんとなく知っている」から「使えるようになる」までの壁が少し高い。コマンドの書き方は独特だし、オプションの数は膨大だし、エラーメッセージは英語だ。

でも実は、よく使うコマンドはそんなに多くない。この記事では実務でよく出てくる操作に絞って、実際にコピーして使えるコマンドを解説する。

この記事でわかること

  • FFmpeg コマンドの基本構造
  • 動画フォーマットの変換方法
  • 音声の抽出・変換
  • 動画の圧縮とクオリティ設定
  • 動画の結合・分割・カット
  • 解像度・フレームレートの変更
  • 字幕の追加
  • 画像から動画を作る方法

FFmpeg コマンドの基本構造

まず、FFmpeg コマンドの構造を理解しよう。すべてのコマンドはこのパターンに従っている。

bash
ffmpeg [入力オプション] -i 入力ファイル [出力オプション] 出力ファイル

重要なのはオプションの位置だ。-i の前に書いたオプションは入力に対して適用され、-i の後に書いたオプションは出力に対して適用される。この区別を間違えると意図しない結果になることがある。

具体的な例:

bash
# 最もシンプルな変換(フォーマット変換のみ)
ffmpeg -i input.mp4 output.avi

# 入力オプションあり(シーク位置を先に指定)
ffmpeg -ss 00:01:00 -i input.mp4 output_trimmed.mp4

# 出力オプションあり(ビットレートを指定)
ffmpeg -i input.mp4 -b:v 1M output.mp4

よく使うオプションの記号の読み方:

  • -c:v = コーデック ビデオ(映像コーデックの指定)
  • -c:a = コーデック オーディオ(音声コーデックの指定)
  • -b:v = ビットレート ビデオ
  • -b:a = ビットレート オーディオ
  • -r = フレームレート
  • -s = サイズ(解像度)
  • -ss = シーク開始位置
  • -t = 長さ(秒数)
  • -to = 終了時刻

動画フォーマットの変換

MP4 を AVI に変換

bash
ffmpeg -i input.mp4 output.avi

FFmpeg は入力と出力のファイル拡張子を見て、適切なコーデックを自動で選択してくれる。シンプルな変換であればこれだけでいい。

MP4 を MKV に変換(再エンコードなし)

bash
ffmpeg -i input.mp4 -c copy output.mkv

-c copy は「再エンコードせず、そのままコピー」という指示だ。変換が一瞬で終わり、画質も劣化しない。コンテナ(外側のファイル形式)だけを変えたい場合に使う。

MOV を MP4 に変換(iPhoneの動画変換によく使う)

bash
ffmpeg -i input.mov -c:v libx264 -c:a aac output.mp4

iPhoneが撮影した .mov ファイルを、Web やSNSで使いやすい .mp4 に変換する定番コマンドだ。


音声の抽出・変換

動画から音声だけを抽出する

bash
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3

各オプションの説明:

  • -vn = ビデオなし(Video No)。映像ストリームを無視する
  • -c:a libmp3lame = 音声を MP3 でエンコード
  • -q:a 2 = 音声品質。0が最高品質、9が最低品質

より高品質に抽出したい場合は AAC を使う。

bash
ffmpeg -i input.mp4 -vn -c:a aac -b:a 192k output.m4a

音声ファイルのフォーマット変換

bash
# WAV を MP3 に変換
ffmpeg -i input.wav -c:a libmp3lame -b:a 320k output.mp3

# MP3 を FLAC(可逆圧縮)に変換
ffmpeg -i input.mp3 -c:a flac output.flac

# 音声のビットレートを下げる(ファイルサイズを小さくする)
ffmpeg -i input.mp3 -b:a 128k output_compressed.mp3

動画の圧縮とクオリティ設定

ファイルサイズを小さくしながら、できるだけ画質を保つ方法を解説する。

H.265(HEVC)で圧縮する

bash
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac output.mp4

-crf は品質と圧縮のバランスを決める値だ。

CRF の目安品質ファイルサイズ
18 以下非常に高い(ほぼ無劣化)大きい
18〜23高品質(通常はこの範囲)中程度
24〜28許容範囲(Web 配信向け)小さめ
28 以上劣化が見える非常に小さい

H.265 は H.264 と比べて約半分のファイルサイズで同等の画質を実現できる。ただし、エンコード時間は長くなる。

H.264 でエンコードする(互換性重視)

bash
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

-preset で速度と品質のトレードオフを選べる。

presetエンコード速度ファイルサイズ
ultrafast最速最大
fast速い大きめ
mediumバランス(デフォルト)中程度
slow遅い小さめ
veryslow最遅最小
bash
# 速度重視(ライブ配信の録画処理など)
ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 23 output.mp4

# 品質重視(アーカイブ用)
ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 output.mp4

動画の分割・カット

特定の時間帯を切り出す

bash
ffmpeg -ss 00:01:30 -to 00:05:00 -i input.mp4 -c copy output_clip.mp4
  • -ss 00:01:30 = 1分30秒の位置から開始
  • -to 00:05:00 = 5分00秒の位置で終了
  • -c copy = 再エンコードなしでコピー(高速・無劣化)

-ss-i の前に置くのが重要だ(Input Seeking)。これにより、先頭から全部デコードせず、指定位置に直接ジャンプするため処理が速い。

-t を使うと「長さ」で指定できる。

bash
# 1分30秒から60秒間を切り出す
ffmpeg -ss 00:01:30 -t 60 -i input.mp4 -c copy output_clip.mp4

複数の動画を結合する

concat フィルターを使う方法(ファイルリスト)

まず、結合したいファイルのリストを作る(filelist.txt)。

file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'

次に結合コマンドを実行する。

bash
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output_merged.mp4
  • -f concat = 結合モード
  • -safe 0 = 相対パスや絶対パスを許可する
  • -c copy = 再エンコードなし

同じコーデック・解像度の動画を結合するときはこの方法が最速だ。

異なる形式の動画を結合する場合

コーデックや解像度が異なる動画を結合するには、一度再エンコードが必要だ。

bash
ffmpeg -i video1.mp4 -i video2.mp4 \
  -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" \
  -map "[outv]" -map "[outa]" output_merged.mp4

解像度・フレームレートの変更

解像度を変更する

bash
# 1920x1080 にリサイズ
ffmpeg -i input.mp4 -s 1920x1080 output.mp4

# 幅を 1280px に固定し、アスペクト比を維持してリサイズ
ffmpeg -i input.mp4 -vf scale=1280:-2 output.mp4

# 高さを 720px に固定し、アスペクト比を維持してリサイズ
ffmpeg -i input.mp4 -vf scale=-2:720 output.mp4

scale=-2:720-2 は「アスペクト比を保ちながら、幅を偶数に丸めて自動計算」を意味する。(-2を使うことで幅が偶数に丸められ、多くのコーデックで必要な偶数幅が保証される)縦横比を崩さずにサイズを変えたいときはこれを使おう。

フレームレートを変更する

bash
# 30fps に変更
ffmpeg -i input.mp4 -r 30 output.mp4

# 60fps に変更
ffmpeg -i input.mp4 -r 60 output.mp4

フレームレートを下げると(例: 60fps → 30fps)ファイルサイズが小さくなる。


字幕を動画に追加する

ソフトサブタイトル(字幕ファイルを別で保持)

bash
ffmpeg -i input.mp4 -i subtitle.srt -c:v copy -c:a copy -c:s mov_text output.mp4

字幕ファイル(.srt)をデータとして動画に埋め込む方法。プレーヤー側で字幕の表示/非表示を切り替えられる。

ハードサブタイトル(字幕を映像に焼き込む)

bash
ffmpeg -i input.mp4 -vf subtitles=subtitle.srt output.mp4

字幕を映像に完全に焼き込む方法。どのプレーヤーでも必ず表示されるが、後から消すことはできない。


画像から動画を作る(タイムラプス・スライドショー)

連番画像から動画を作る

bash
# image001.png, image002.png ... という連番画像を動画にする
ffmpeg -framerate 24 -i image%03d.png -c:v libx264 -pix_fmt yuv420p output.mp4
  • -framerate 24 = 1秒あたり24枚の画像を使用
  • image%03d.png = 3桁ゼロ埋めの連番(001, 002, 003...)
  • -pix_fmt yuv420p = 幅広い互換性のためのピクセルフォーマット

タイムラプス動画を作るときに便利だ。

1枚の画像からループ動画を作る

bash
# 1枚の画像を10秒の静止動画にする
ffmpeg -loop 1 -i input.jpg -t 10 -c:v libx264 -pix_fmt yuv420p output.mp4

よくある質問(FAQ)

Q: FFmpeg で音量を上げる・下げるには?

bash
# 音量を2倍にする
ffmpeg -i input.mp4 -af volume=2.0 output.mp4

# 音量を半分にする
ffmpeg -i input.mp4 -af volume=0.5 output.mp4

Q: 動画を90度・180度回転させるには?

bash
# 90度時計回りに回転
ffmpeg -i input.mp4 -vf transpose=1 output.mp4

# 180度回転(hflip と vflip の組み合わせを使用する)
ffmpeg -i input.mp4 -vf "hflip,vflip" output.mp4

Q: 動画の再生速度を変えるには?

bash
# 2倍速にする
ffmpeg -i input.mp4 -vf setpts=0.5*PTS -af atempo=2.0 output.mp4

# 0.5倍速(スロー)にする
ffmpeg -i input.mp4 -vf setpts=2.0*PTS -af atempo=0.5 output.mp4

Q: ファイルの情報を調べるには?

bash
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

Q: 既存ファイルを強制上書きするには?

bash
ffmpeg -y -i input.mp4 output.mp4

-y オプションで「上書きする」と指定できる。デフォルトでは上書きするか確認を求められる。


まとめ

FFmpeg のよく使うコマンドをまとめると:

やりたいことコマンドの核
フォーマット変換ffmpeg -i input.mp4 output.avi
音声抽出-vn -c:a libmp3lame
動画圧縮-c:v libx265 -crf 28
動画カット-ss 開始 -to 終了 -c copy
動画結合-f concat -i filelist.txt
解像度変更-vf scale=1280:-2
字幕焼き込み-vf subtitles=subtitle.srt

最初は「圧縮して軽くしたい」「音声を取り出したい」といった一つのユースケースから始めて、徐々にオプションを覚えていくのが上達の近道だ。わからないことがあれば ffmpeg -help や公式ドキュメントも活用してほしい。