FFmpegの使い方とコマンド一覧【完全ガイド】
FFmpegの基本構文は ffmpeg -i 入力ファイル 出力ファイル。これだけで動画変換ができる。あとは -c:v で映像コーデック、-crf で品質、-ss でカット位置を指定するだけ。実務で使うコマンドは実はそんなに多くない。
この記事ではFFmpegの使い方を、動画変換・圧縮・カット・結合・GIF変換・音声抽出・ウォーターマーク・ノイズ除去まで コピペで使えるコマンド一覧 として網羅する。すべてのコマンドは FFmpeg 7.x/8.x で動作確認済み(最新安定版はFFmpeg 8.1、2026年3月リリース)。
この記事でわかること
- FFmpegコマンドの基本構造とオプションの読み方
- 動画変換・音声抽出・圧縮・カット・結合
- GIF変換・サムネイル抽出・画像から動画作成
- ウォーターマーク・字幕・クロップ・ノイズ除去
- ffprobeでメディア情報を詳しく調べる方法
FFmpegコマンドの基本構造
すべてのFFmpegコマンドはこのパターンに従っている。
bashCopyffmpeg [入力オプション] -i 入力ファイル [出力オプション] 出力ファイル重要なのは オプションの位置 だ。-i の前に書いたオプションは入力に対して適用され、-i の後に書いたオプションは出力に対して適用される。この仕組みは FFmpeg公式ドキュメントのSynopsis に詳しく書かれている。全オプションの一覧は FFmpegメインオプション を参照してほしい。
入力ファイル-i input.mp4読取デコードDemux → Decode処理フィルタ/変換-vf / -c:v書込出力ファイルoutput.mp4入力ファイル-i input.mp4読取デコードDemux → Decode処理フィルタ/変換-vf / -c:v書込出力ファイルoutput.mp4具体例を見てみよう。
bashCopy# 最もシンプルな変換(フォーマット変換のみ) 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に変換 bashCopyffmpeg -i input.mp4 output.aviFFmpegは入力と出力のファイル拡張子を見て、適切なコーデックを自動で選択する。シンプルな変換ならこれだけでいい。
MP4をMKVに変換(再エンコードなし) bashCopyffmpeg -i input.mp4 -c copy output.mkv-c copy は「再エンコードせず、ストリームをそのままコピー」する指示だ。変換が一瞬で終わり、画質も劣化しない。コンテナ(ファイル形式の外枠)だけを変えたいときに使う。
MOVをMP4に変換(iPhone動画の定番) bashCopyffmpeg -i input.mov -c:v libx264 -c:a aac output.mp4iPhoneが撮影した .mov を、WebやSNSで使いやすい .mp4 に変換する定番コマンドだ。
音声の抽出・変換
動画から音声だけを抽出する bashCopyffmpeg -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を使う。音量を揃えたい場合は FFmpegで音声を正規化する方法 を参照してほしい。
bashCopyffmpeg -i input.mp4 -vn -c:a aac -b:a 192k output.m4a 音声フォーマットの変換 bashCopy# 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.264の詳細なチューニングは FFmpeg公式Wiki H.264ガイド にまとまっている。
H.265(HEVC)で圧縮する bashCopyffmpeg -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と比べて約半分のファイルサイズで同等の画質を実現できる。ただしエンコード時間は長くなる。さらに高い圧縮率を求めるなら SVT-AV1によるAV1エンコード も選択肢に入る(具体的な設定は FFmpeg 8 × SVT-AV1 最適設定ガイド を参照)。大量の動画を H.265 で変換するなら、XServer VPS のようなリモートサーバーにエンコードを任せると効率的だ。
H.264でエンコードする(互換性重視) bashCopyffmpeg -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最遅最小 bashCopy# 速度重視(大量の動画を処理するとき) 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.mp4CRFとpresetの組み合わせをさらに詳しく知りたい場合は FFmpeg動画圧縮 完全ガイド を参照してほしい。GPUを使ってエンコード速度を劇的に上げる方法は FFmpeg GPUエンコード ガイド で解説している。
動画の分割・カット・結合
特定の時間帯を切り出す bashCopy# 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 は秒数でも指定できる。
bashCopy# 1分30秒から60秒間を切り出す ffmpeg -ss 00:01:30 -t 60 -i input.mp4 -c copy output_clip.mp4終了時刻で指定したい場合は、-ss と -to の両方を -i の後に置く。
bashCopy# 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 が入力ファイルの絶対時刻として確実に動作する。
複数の動画を結合する同じコーデック・解像度の動画を結合する場合、concatデマルチプレクサを使ったファイルリスト方式が最速だ。
まず filelist.txt を用意する。
textCopyfile 'video1.mp4' file 'video2.mp4' file 'video3.mp4'次に結合コマンドを実行する。
bashCopyffmpeg -f concat -safe 0 -i filelist.txt -c copy output_merged.mp4 異なる形式の動画を結合する場合コーデックや解像度が異なる動画を結合するには、再エンコードが必要だ。
bashCopyffmpeg -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解像度・フレームレートの変更
解像度を変更する bashCopy# 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.mp4scale=-2:720 の -2 は「アスペクト比を保ちながら、値を偶数に丸めて自動計算」を意味する。多くのコーデックは偶数解像度を要求するため、-1 ではなく -2 を使うのが安全だ。全オプションは scaleフィルタのドキュメント を参照してほしい。
YouTube Shorts、Instagram Reels、TikTok向けに16:9→9:16の縦動画に変換する方法は FFmpegでSNS縦動画を作る方法 で詳しく解説している。
フレームレートを変更する bashCopy# 30fpsに変更 ffmpeg -i input.mp4 -r 30 output.mp4 # 60fpsに変更 ffmpeg -i input.mp4 -r 60 output.mp4フレームレートを下げると(例: 60fps → 30fps)ファイルサイズが小さくなる。
GIF変換・サムネイル抽出・画像から動画
動画をGIFに変換する単純に変換するとファイルサイズが大きく、色が汚くなる。パレット最適化 を使うと品質が大幅に向上する。
bashCopy# 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コマンドでパレット生成と変換を同時にやる方法もある。
bashCopyffmpeg -i input.mp4 \ -lavfi "fps=15,scale=480:-2:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \ output.gif動画の最終フレームだけをピンポイントで取得したい場合は FFmpegで動画の最後のフレームを爆速抽出する方法 を参照してほしい。
動画からサムネイルを抽出する bashCopy# 特定の時間(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フレーム」だ。
連番画像から動画を作る bashCopy# 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枚の画像からループ動画を作る bashCopyffmpeg -loop 1 -i input.jpg -t 10 -c:v libx264 -pix_fmt yuv420p output.mp4SNSのサムネイルやプレゼン用の背景動画に使える。
ウォーターマーク・字幕・クロップ・ノイズ除去
ウォーターマーク(透かし)を追加する bashCopy# 右下にロゴを配置(10pxマージン) ffmpeg -i input.mp4 -i logo.png \ -filter_complex "overlay=W-w-10:H-h-10" output.mp4overlay フィルタの座標指定はこう読む。
- 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 テキストを動画に描画する bashCopyffmpeg -i input.mp4 \ -vf "drawtext=text='Sample':fontsize=24:fontcolor=white:x=10:y=10" \ output.mp4 ソフトサブタイトル(字幕ON/OFFが可能) bashCopyffmpeg -i input.mp4 -i subtitle.srt -c:v copy -c:a copy -c:s mov_text output.mp4字幕をデータとして埋め込む方法。プレーヤー側で表示/非表示を切り替えられる。
ハードサブタイトル(映像に焼き込む) bashCopyffmpeg -i input.mp4 -vf subtitles=subtitle.srt output.mp4字幕を映像に焼き込む方法。どのプレーヤーでも表示されるが、後から消せない。
AIによる自動字幕生成に興味があれば FFmpeg × Whisperで自動字幕を生成する方法 を読んでほしい。FFmpeg 8.0以降では whisper フィルタが組み込まれ、外部ツールなしでローカル音声認識ができるようになった。
動画をクロップ(切り抜き)する bashCopy# 中央から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 cropdetectcrop フィルタの書式は crop=幅:高さ:x:y だ。x, y を省略すると中央からの切り抜きになる。
黒帯除去は2ステップで行う。まず cropdetect で検出値を確認し、その値を crop に指定する。
bashCopy# cropdetectの出力例: crop=1920:800:0:140 ffmpeg -i input.mp4 -vf "crop=1920:800:0:140" output.mp4 ノイズ除去映像のノイズ除去には nlmeans(Non-Local Means)フィルタが使える。
bashCopyffmpeg -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)フィルタが使える。モデルファイルは別途ダウンロードが必要だ。
bashCopy# モデルをダウンロード(初回のみ) 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と一緒にインストールされるメディア情報分析ツールだ。変換前にコーデック・解像度・ビットレートなどを確認するのに使う。
基本的な情報を表示する bashCopyffprobe -v quiet -print_format json -show_format -show_streams input.mp4- -v quiet = FFmpegのバナー表示を抑制
- -print_format json = JSON形式で出力
- -show_format = コンテナ情報(フォーマット、長さ、ビットレート)
- -show_streams = 各ストリーム情報(コーデック、解像度、fps)
エンコード前に元ファイルの情報を確認する習慣をつけておくと、意図しない変換結果を防げる。
よくある質問(FAQ)
Q: 音量を上げる・下げるには?
bashCopy# 音量を2倍にする ffmpeg -i input.mp4 -af volume=2.0 output.mp4 # 音量を半分にする ffmpeg -i input.mp4 -af volume=0.5 output.mp4Q: 動画を90度・180度回転させるには?
bashCopy# 90度時計回りに回転 ffmpeg -i input.mp4 -vf transpose=1 output.mp4 # 180度回転 ffmpeg -i input.mp4 -vf "hflip,vflip" output.mp4Q: 再生速度を変えるには?
bashCopy# 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.mp4Q: 既存ファイルを強制上書きするには?
bashCopyffmpeg -y -i input.mp4 output.mp4-y で上書き確認をスキップできる。
Q: 動画のメタデータ(タイトル・作成日等)を削除するには?
bashCopyffmpeg -i input.mp4 -map_metadata -1 -c copy output.mp4-map_metadata -1 で全メタデータを削除できる。プライバシー保護のために公開前に実行しておくと安心だ。
Q: 複数ファイルを一括変換するには?
bashCopy# Bash(Mac/Linux) for f in *.avi; do ffmpeg -i "$f" -c:v libx264 -crf 23 "${f%.avi}.mp4"; done # PowerShell(Windows) Get-ChildItem *.avi | ForEach-Object { ffmpeg -i $_.Name -c:v libx264 -crf 23 ($_.BaseName + ".mp4") }もっと複雑なバッチ処理が必要なら FFmpeg × Pythonバッチ処理入門 でスクリプト化する方法を解説している。
Q: コマンドが苦手な場合、GUIツールはある?
HandBrake や LosslessCut など、FFmpegをバックエンドに使うGUIツールがある。詳しくは FFmpeg GUIツール比較 を参照してほしい。
Q: 商用プロジェクトでFFmpegを使うときのライセンスは?
GPLとLGPLの違い、再配布時の注意点は FFmpeg商用ライセンスガイド で詳しく解説している。
次のステップ:FFmpegの学び方
ここまでのコマンドを一通り試したら、次は体系的に深掘りしていこう。
公式ドキュメント英語だが、コマンドリファレンスとしては最も正確で網羅的だ。
- FFmpeg公式ドキュメント: ffmpeg.org/documentation.html — コマンドリファレンスとして最も正確
- FFmpeg Wiki: trac.ffmpeg.org/wiki — エンコードやフィルタの実践的なハウツー記事が充実
- FFmpegフィルタリファレンス: ffmpeg.org/ffmpeg-filters.html — 全フィルタの詳細仕様
- manページ: ターミナルで man ffmpeg を実行すると全オプションが確認できる
FFmpegはリファレンスを読むより手を動かすほうが身につく。以下のステップで進めるといい。
- 基本コマンド(この記事の内容) — フォーマット変換、音声抽出、カット
- フィルターグラフ — scale、crop から始めて filter_complex へ。動画圧縮ガイド でCRFの使い分けを深掘り
- エンコードパラメーター — CRF・ビットレート制御、コーデック固有オプション(x264, x265, SVT-AV1)。GPUエンコードガイド でハードウェア活用も
- 配信・ストリーミング — HLS配信の構築方法 でCDN経由の動画配信を学ぶ。ブラウザで動画処理(ffmpeg.wasm) ならサーバー不要
- 自動化・スクリプト化 — Python連携 でバッチ処理、VPSエンコードサーバー でリモート化。クラウドサービスとの比較は FFmpeg vs AWS MediaConvert を参照
- Stack Overflow — ffmpeg タグで大量のQ&Aが蓄積されている
- Reddit r/ffmpeg — 実践的な使い方の議論が活発
- FFmpegメーリングリスト (ffmpeg-user@ffmpeg.org) — コア開発者が直接回答することもある
まとめ
FFmpegのよく使うコマンドを一覧にまとめておく。
やりたいことコマンドの核フォーマット変換ffmpeg -i input.mp4 output.avi再エンコードなし変換-c copy音声抽出-vn -c:a libmp3lameH.265圧縮-c:v libx265 -crf 28動画カット-ss 開始 -to 終了 -c copy動画結合-f concat -i filelist.txt解像度変更-vf scale=1280:-2GIF変換palettegen + paletteuseサムネイル抽出-frames:v 1ウォーターマーク-filter_complex overlay=...字幕焼き込み-vf subtitles=subtitle.srtクロップ-vf crop=幅:高さ:x:yノイズ除去-vf nlmeans / -af arnndnまずは「動画を圧縮したい」「音声を取り出したい」といった一つのユースケースから始めて、少しずつオプションを覚えていくのが上達の近道だ。
もっと自動化したくなったら、Pythonとの連携がおすすめだ。
- FFmpeg × Pythonバッチ処理入門 — 大量の動画を一括変換するスクリプトの書き方
FFmpegの処理をローカル PC から切り離したい場合は、VPS にエンコード専用サーバーを立てる選択肢もある。
XServer VPS国内シェアNo.1のエックスサーバーが提供する高性能VPS
- NVMe SSD・AMD EPYC搭載の高速サーバー
- 2GBプラン 月額990円〜(3コア / 50GB SSD)
- 初期費用無料
関連記事:
- FFmpeg最新版インストールガイド【全OS対応】
- FFmpeg動画圧縮の完全ガイド
- FFmpegで動画を無劣化・爆速カット:-c copyによるトリミング術
- FFmpegをGPUで高速化する完全ガイド
- FFmpeg × Pythonで動画バッチ処理を自動化する