FFmpegは、無料で使えるオープンソース(プログラムの中身が公開されている)の動画処理ソフトです。変換、圧縮、カット、音声の取り出し、GIF作成など、動画に関するほとんどの作業を、コマンド1行で実行できます。

FFmpegとは

FFmpegは、音声と映像のあらゆる処理に使える、オープンソースのフレームワーク(ソフトと部品のまとまり)です。公式サイトのトップページでは、次のように紹介されています。

A complete, cross-platform solution to record, convert and stream audio and video.

主な特徴は次のとおりです。

  • 無料・オープンソース(ライセンスはLGPLまたはGPL)
  • Windows・macOS・Linux・BSDなどで動く(クロスプラットフォーム)
  • コマンドで操作する(ボタンなどの操作画面はない。同じ処理の自動化がしやすい)
  • 扱える形式が多い(コーデックとコンテナが数百種類)
  • YouTube・Netflix・VLC・HandBrakeなどの裏側でも使われている

VLC、HandBrake、OBS、Adobe Premiereなど、多くの動画ソフトが、内部でFFmpegのライブラリ(libav*。ほかのソフトに組み込んで使う部品)を使っています。

コーデックとコンテナの違い(重要な前提知識)

FFmpegを使うときに、いちばん混同しやすいのがコーデックとコンテナです。

概念 説明 例
コンテナ(ファイル形式) 映像・音声・字幕などをまとめて入れる「入れ物」。拡張子で見分ける .mp4, .mkv, .avi, .mov, .webm
コーデック(エンコード方式) 映像や音声を圧縮し、再生のために元に戻す方式 H.264, H.265, AV1, AAC, MP3, Opus

よくある組み合わせは次のとおりです。

ファイル名 コンテナ 映像コーデック 音声コーデック
video.mp4 MP4 H.264 AAC
video.mkv Matroska H.264 or H.265 AAC or FLAC
video.webm WebM VP9 or AV1 Vorbis or Opus
video.mov QuickTime ProRes or H.264 AAC

たとえばMP4をMKVにするときは、コーデックはそのままで、コンテナだけを替えられます。これをストリームコピーといいます。

FFmpegでできること(実例コマンド付き)

1. フォーマット変換(コンテナ変換)

映像と音声を圧縮し直さず(再エンコードせず)、コンテナだけを替えます。処理が速く、画質も音質も落ちません。

# MKV → MP4(コーデックはそのまま)
ffmpeg -i input.mkv -c copy output.mp4

2. エンコード・圧縮

映像を圧縮し直して、画質を保ちながらファイルを小さくできます。元の動画がすでに強く圧縮されていると、逆に大きくなることがあります。-crf は画質の目安で、数字が小さいほど高画質になり、ファイルは大きくなります。

# H.264圧縮(最も汎用)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac output.mp4

# H.265でさらに高圧縮(エンコードは遅くなる)
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac output.mp4

3. 動画のトリミング・カット

# 1分00秒から2分00秒を切り出し(高速・ストリームコピー)
ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4

4. 音声抽出

# 動画からMP3を抽出
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3

# 無劣化でAACをそのまま抽出
ffmpeg -i input.mp4 -vn -c:a copy output.aac

5. GIF作成

# 動画全体をGIFアニメーションに変換
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif

6. 解像度変更(リサイズ)

# 1080p → 720pに変換
ffmpeg -i input_1080p.mp4 -vf scale=1280:-2 -c:v libx264 -crf 23 output_720p.mp4

7. ライブ配信(RTMP)

RTMPは、配信サービスへ映像を送るための通信方式です。YOUR_KEY の部分には、YouTube Studioに表示されるストリームキーを入れます。-g 60 は、キーフレーム(再生を始められる区切りの画面)を60フレームごとに入れる指定です。YouTubeの推奨は2秒ごと(4秒以内)なので、30fpsの動画なら60、60fpsなら120にします。

# YouTubeライブに配信
ffmpeg -re -i input.mp4 -c:v libx264 -b:v 4000k -g 60 -c:a aac -f flv rtmp://a.rtmp.youtube.com/live2/YOUR_KEY

FFmpegでできないこと

できないこと 理由・代替手段
DRM(コピー防止)で保護された動画の解除 著作権法で守られている。FFmpegには、保護を外すための鍵を手に入れる機能はない
画面を見ながらの編集 コマンドで操作するソフトのため。画面で操作したいならHandBrakeやOpenShotなどを使う
タイムライン編集(非線形編集) Adobe PremiereやDaVinci Resolveなどの動画編集ソフト(NLE)が必要
AIによる高解像度化(アップスケーリング) AIのモデルを動かす sr・dnn_processing フィルターはあるが、対応するビルド(DNNバックエンド入り)とモデルファイルが必要。gyan.devの配布版では使えないため、ふつうはReal-ESRGANなどの専用ツールを使う

ffmpeg・ffprobe・ffplayの役割

ツール 役割 使いどき
ffmpeg 変換、圧縮(エンコード)、加工(フィルター)、配信 動画の処理のほとんど
ffprobe ファイルの中身を調べる。メタデータ(作成日時などの付加情報)も確認できる コーデック、解像度、フレームレートを確かめるとき
ffplay テスト用の簡単な動画プレーヤー(SDLを使用) フィルターの結果をすぐ確かめるとき
# バージョン確認
ffmpeg -version

# ファイル情報を確認
ffprobe -v quiet -show_streams -print_format json input.mp4

# 動画を再生して確認
ffplay input.mp4

開発者向けライブラリ構成(libav*)

ライブラリ 役割
libavcodec エンコーダー(圧縮)とデコーダー(展開)の集まり
libavformat コンテナへの格納(mux)と取り出し(demux)
libavdevice デバイスの入出力(カメラ・マイクなど)
libavfilter フィルターをつないだ処理(フィルタグラフ)の実行
libavutil 各ライブラリが共通で使う機能
libswscale 映像のサイズ変更と、画素の形式(ピクセルフォーマット)の変換
libswresample 音声のサンプリング周波数(リサンプリング)や形式の変換

FAQ

Q1. FFmpegは有料ですか?
A. 無料です。ライセンスはLGPL v2.1以降(またはGPL v2以降)の、オープンソースのソフトです。条件を守れば、商用でも使えます。条件はFFmpegの法的情報のページにあります。

Q2. プログラミング知識がなくても使えますか?
A. 使えます。ターミナル(Windowsではコマンドプロンプト)を開いて、コマンドを入力できれば十分です。上のコマンドは、ファイル名を自分のファイルに変えれば、そのまま貼り付けて試せます。

Q3. WindowsとMacとLinux、どれでも動きますか?
A. 動きます。インストールの方法は違いますが、コマンドはほぼ同じです。フォルダの区切り文字(パス区切り文字)など、細かな違いはあります。

Q4. 対応しているフォーマットを確認するには?
A. 次のコマンドで一覧を表示できます。

# 対応フォーマット一覧
ffmpeg -formats

# 対応コーデック一覧
ffmpeg -codecs

# 利用可能エンコーダー一覧
ffmpeg -encoders

Q5. FFmpegとHandBrakeの違いは?
A. HandBrakeは、FFmpegのライブラリを内部で使う、画面で操作するソフト(GUIソフト)です。FFmpegはコマンドで操作するぶん自由度が高く、処理の自動化もできます。HandBrakeは画面で直感的に操作できますが、FFmpegほど細かくは設定できません。

関連記事