32blogby StudioMitsu

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

FFmpegの基本から応用まで実用コマンドを網羅。動画変換・圧縮・カット・GIF変換・ウォーターマーク・ノイズ除去まで、コピペで使えるコマンド集。

20 min read

当記事にはアフィリエイト広告が含まれています

目次

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

でも実は、よく使うコマンドはそんなに多くない。この記事では実務で頻出する操作を、入門から応用まで コピペで使えるコマンド として解説する。

この記事でわかること

  • FFmpegコマンドの基本構造とオプションの読み方
  • 動画変換・音声抽出・圧縮・カット・結合
  • GIF変換・サムネイル抽出・画像から動画作成
  • ウォーターマーク・字幕・クロップ・ノイズ除去
  • ffprobeでメディア情報を詳しく調べる方法

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:v libx264
-c:a音声コーデック-c:a aac
-b:v映像ビットレート-b:v 2M
-b:a音声ビットレート-b:a 192k
-rフレームレート-r 30
-s解像度-s 1920x1080
-ssシーク開始位置-ss 00:01:30
-t長さ(秒数)-t 60
-to終了時刻-to 00:05:00
-vn映像なし音声のみ抽出時
-an音声なし無音動画出力時

動画フォーマットの変換

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が最低品質。2で十分な高音質

より高品質に抽出したい場合は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

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

ファイルサイズを小さくしながら、できるだけ画質を保つ。FFmpegで最もよく使う操作の一つだ。

コーデック選びに迷ったら H.264 vs H.265 vs AV1 徹底比較 を参考にしてほしい。

H.265(HEVC)で圧縮する

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

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

CRFの目安品質ファイルサイズ
18以下ほぼ無劣化大きい
18〜23高品質(通常はこの範囲)中程度
24〜28Web配信向け小さめ
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

CRFとpresetの組み合わせをさらに詳しく知りたい場合は FFmpeg動画圧縮 完全ガイド を参照してほしい。GPUを使ってエンコード速度を劇的に上げる方法は FFmpeg GPUエンコード ガイド で解説している。

動画の分割・カット・結合

特定の時間帯を切り出す

bash
# 1分30秒から3分30秒間を切り出す(= 1:30〜5:00)
ffmpeg -ss 00:01:30 -t 00:03:30 -i input.mp4 -c copy output_clip.mp4
  • -ss 00:01:30 = 1分30秒の位置から開始
  • -t 00:03:30 = 3分30秒間を切り出す
  • -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

終了時刻で指定したい場合は、-ss-to の両方を -i の後に置く。

bash
# 1分30秒から5分00秒まで(-toは入力の絶対時刻)
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:05:00 -c copy output_clip.mp4

この場合は全フレームをデコードするため -ss before -i より遅いが、-to が入力ファイルの絶対時刻として確実に動作する。

複数の動画を結合する

同じコーデック・解像度の動画を結合する場合、ファイルリストを作る方法が最速だ。

まず filelist.txt を用意する。

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

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

bash
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output_merged.mp4

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

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

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 は「アスペクト比を保ちながら、値を偶数に丸めて自動計算」を意味する。多くのコーデックは偶数解像度を要求するため、-1 ではなく -2 を使うのが安全だ。

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

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

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

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

GIF変換・サムネイル抽出・画像から動画

動画をGIFに変換する

単純に変換するとファイルサイズが大きく、色が汚くなる。パレット最適化 を使うと品質が大幅に向上する。

bash
# Step 1: パレットを生成
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-2:flags=lanczos,palettegen" palette.png

# Step 2: パレットを使ってGIFに変換
ffmpeg -i input.mp4 -i palette.png \
  -lavfi "fps=15,scale=480:-2:flags=lanczos[x];[x][1:v]paletteuse" output.gif

各オプションの意味はこうだ。

  • fps=15 = 15フレーム/秒に削減(GIFにはこれで十分)
  • scale=480:-2 = 幅480pxにリサイズ
  • flags=lanczos = 高品質なリサイズアルゴリズム
  • palettegen / paletteuse = 動画の色分布に最適化したパレットを使用

1コマンドでパレット生成と変換を同時にやる方法もある。

bash
ffmpeg -i input.mp4 \
  -lavfi "fps=15,scale=480:-2:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \
  output.gif

動画からサムネイルを抽出する

bash
# 特定の時間(10秒地点)のフレームを1枚抽出
ffmpeg -ss 10 -i input.mp4 -frames:v 1 thumbnail.jpg

# 一定間隔(10秒ごと)でフレームを抽出
ffmpeg -i input.mp4 -vf "fps=1/10" thumbnail_%03d.jpg

# キーフレームだけを抽出(最速)
ffmpeg -skip_frame nokey -i input.mp4 -fps_mode vfr keyframe_%03d.jpg

-frames:v 1 は「映像フレームを1枚だけ出力」の意味。fps=1/10 は「10秒あたり1フレーム」だ。

連番画像から動画を作る

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
ffmpeg -loop 1 -i input.jpg -t 10 -c:v libx264 -pix_fmt yuv420p output.mp4

SNSのサムネイルやプレゼン用の背景動画に使える。

ウォーターマーク・字幕・クロップ・ノイズ除去

ウォーターマーク(透かし)を追加する

bash
# 右下にロゴを配置(10pxマージン)
ffmpeg -i input.mp4 -i logo.png \
  -filter_complex "overlay=W-w-10:H-h-10" output.mp4

overlay フィルタの座標指定はこう読む。

  • W / H = 入力動画の幅/高さ
  • w / h = オーバーレイ画像の幅/高さ
  • W-w-10 = 右端からロゴ幅+10pxの位置

よく使う配置パターンをまとめておく。

位置overlay の値
左上overlay=10:10
右上overlay=W-w-10:10
左下overlay=10:H-h-10
右下overlay=W-w-10:H-h-10
中央overlay=(W-w)/2:(H-h)/2

テキストを動画に描画する

bash
ffmpeg -i input.mp4 \
  -vf "drawtext=text='Sample':fontsize=24:fontcolor=white:x=10:y=10" \
  output.mp4

ソフトサブタイトル(字幕ON/OFFが可能)

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

字幕をデータとして埋め込む方法。プレーヤー側で表示/非表示を切り替えられる。

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

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

字幕を映像に焼き込む方法。どのプレーヤーでも表示されるが、後から消せない。

AIによる自動字幕生成に興味があれば FFmpeg × Whisperで自動字幕を生成する方法 を読んでほしい。

動画をクロップ(切り抜き)する

bash
# 中央から640x480を切り抜く
ffmpeg -i input.mp4 -vf "crop=640:480" output.mp4

# 左上から指定サイズを切り抜く
ffmpeg -i input.mp4 -vf "crop=640:480:0:0" output.mp4

# 上下の黒帯を自動検出して除去
ffmpeg -i input.mp4 -vf "cropdetect" -f null - 2>&1 | grep cropdetect

crop フィルタの書式は crop=幅:高さ:x:y だ。x, y を省略すると中央からの切り抜きになる。

黒帯除去は2ステップで行う。まず cropdetect で検出値を確認し、その値を crop に指定する。

bash
# cropdetectの出力例: crop=1920:800:0:140
ffmpeg -i input.mp4 -vf "crop=1920:800:0:140" output.mp4

ノイズ除去

映像のノイズ除去には nlmeans(Non-Local Means)フィルタが使える。

bash
ffmpeg -i input.mp4 -vf "nlmeans=s=3.5:p=7:r=15" output.mp4
  • s = ノイズ除去の強度(大きいほど強い。デフォルト1.0)
  • p = パッチサイズ(奇数。デフォルト7)
  • r = 検索範囲(奇数。デフォルト15)

音声のノイズ除去には arnndn(Recurrent Neural Network)フィルタが使える。モデルファイルは別途ダウンロードが必要だ。

bash
# モデルをダウンロード(初回のみ)
curl -LO https://github.com/richardpl/arnndn-models/raw/master/bd.rnnn

# ノイズ除去を実行
ffmpeg -i input.mp4 -af "arnndn=m=bd.rnnn" output.mp4

モデルファイルは arnndn-models リポジトリで配布されている。bd.rnnn は汎用ノイズ除去モデルで、会議録音やポッドキャストの背景ノイズ除去に効果的だ。

ffprobeでメディア情報を調べる

ffprobe はFFmpegと一緒にインストールされるメディア情報分析ツールだ。変換前にコーデック・解像度・ビットレートなどを確認するのに使う。

基本的な情報を表示する

bash
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
  • -v quiet = FFmpegのバナー表示を抑制
  • -print_format json = JSON形式で出力
  • -show_format = コンテナ情報(フォーマット、長さ、ビットレート)
  • -show_streams = 各ストリーム情報(コーデック、解像度、fps)

よく使うffprobeコマンド

bash
# 動画の解像度だけを表示
ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height -of csv=p=0 input.mp4

# 動画の長さ(秒)だけを表示
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4

# コーデック名を表示
ffprobe -v error -select_streams v:0 \
  -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 input.mp4

エンコード前に元ファイルの情報を確認する習慣をつけておくと、意図しない変換結果を防げる。

よくある質問(FAQ)

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

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度回転
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
ffmpeg -y -i input.mp4 output.mp4

-y で上書き確認をスキップできる。

Q: 商用プロジェクトでFFmpegを使うときのライセンスは?

GPLとLGPLの違い、再配布時の注意点は FFmpeg商用ライセンスガイド で詳しく解説している。

次のステップ:FFmpegの学び方

ここまでのコマンドを一通り試したら、次は体系的に深掘りしていこう。

公式ドキュメント

英語だが、コマンドリファレンスとしては最も正確で網羅的だ。

学習の進め方

FFmpegはリファレンスを読むより手を動かすほうが身につく。以下のステップで進めるといい。

  1. 基本コマンド(この記事の内容) — フォーマット変換、音声抽出、カット
  2. フィルターグラフscalecrop から始めて filter_complex へ。動画圧縮ガイド でCRFの使い分けを深掘り
  3. エンコードパラメーター — CRF・ビットレート制御、コーデック固有オプション(x264, x265, SVT-AV1)。GPUエンコードガイド でハードウェア活用も
  4. 自動化・スクリプト化Python連携 でバッチ処理、VPSエンコードサーバー でリモート化

コミュニティ

  • Stack Overflowffmpeg タグで大量のQ&Aが蓄積されている
  • Reddit r/ffmpeg — 実践的な使い方の議論が活発
  • FFmpegメーリングリスト (ffmpeg-user@ffmpeg.org) — コア開発者が直接回答することもある

まとめ

FFmpegのよく使うコマンドを一覧にまとめておく。

やりたいことコマンドの核
フォーマット変換ffmpeg -i input.mp4 output.avi
再エンコードなし変換-c copy
音声抽出-vn -c:a libmp3lame
H.265圧縮-c:v libx265 -crf 28
動画カット-ss 開始 -to 終了 -c copy
動画結合-f concat -i filelist.txt
解像度変更-vf scale=1280:-2
GIF変換palettegen + paletteuse
サムネイル抽出-frames:v 1
ウォーターマーク-filter_complex overlay=...
字幕焼き込み-vf subtitles=subtitle.srt
クロップ-vf crop=幅:高さ:x:y
ノイズ除去-vf nlmeans / -af arnndn

まずは「動画を圧縮したい」「音声を取り出したい」といった一つのユースケースから始めて、少しずつオプションを覚えていくのが上達の近道だ。

もっと自動化したくなったら、Pythonとの連携がおすすめだ。

FFmpegの処理をローカル PC から切り離したい場合は、VPS にエンコード専用サーバーを立てる選択肢もある。

XServer VPS

国内シェアNo.1のエックスサーバーが提供する高性能VPS

  • NVMe SSD・AMD EPYC搭載の高速サーバー
  • 2GBプラン 月額990円〜(3コア / 50GB SSD)
  • 初期費用無料