FFmpegのダウンロード・インストール方法と使い方を徹底解説
はじめに
動画や音声を扱っている方なら、「FFmpeg」という名前を一度は聞いたことがあるかもしれません。FFmpegは、動画や音声の変換、編集、ストリーミング、キャプチャなど、マルチメディア処理に関わるあらゆる作業をコマンドラインから行うことができる、非常に強力かつ多機能なオープンソースプロジェクトです。しかし、その強力さゆえに、初心者にとってはコマンドライン操作やインストール方法が難解に感じられることも少なくありません。
この記事では、FFmpegを初めて使う方でも安心して始められるように、ダウンロードからインストール、そして基本的な使い方から応用的なテクニックまでを、約5000語というボリュームで徹底的に解説します。Windows、macOS、Linuxそれぞれの環境での手順を網羅し、具体的なコマンド例を豊富に交えながら、FFmpegの無限の可能性に迫ります。
この記事を読むことで、あなたは以下のことができるようになります。
- FFmpegが何であるか、なぜ多くのプロフェッショナルに使われているかを理解する。
- お使いのOSに合わせたFFmpegの正確なダウンロード・インストール方法を知る。
- FFmpegをコマンドラインから実行するための環境設定を行う。
- 基本的な動画・音声ファイルのフォーマット変換やエンコーディングを行う。
- フィルタリング機能を使って、動画のサイズ変更、クロップ、テキスト挿入などの編集を行う。
- FFmpegの応用的な使い方(動画結合、音声抽出など)を知る。
- よくある問題のトラブルシューティング方法を知る。
さあ、FFmpegの世界へ踏み込み、マルチメディア処理の効率と柔軟性を飛躍的に向上させましょう。
FFmpegとは何か?
FFmpegは、動画や音声の処理に関する包括的なオープンソースプロジェクトです。単一のプログラムというよりは、マルチメディアデータを扱うための様々なライブラリとツール群の集合体と考えるのが適切です。その中核をなすのが、同名のコマンドラインツールである ffmpeg
です。
FFmpegプロジェクトに含まれる主要なコンポーネントは以下の通りです。
- libavcodec: エンコード(圧縮)とデコード(解凍)を行うためのライブラリです。多種多様なコーデック(H.264, H.265/HEVC, VP9, AAC, MP3など)をサポートしています。
- libavformat: 様々なマルチメディアコンテナフォーマット(MP4, AVI, MKV, MOV, FLV, MP3, AACなど)のパース(解析)やmuxing(多重化、複数のストリームを一つのファイルにまとめること)を行うためのライブラリです。
- libavfilter: フィルタリングシステムを提供します。動画や音声にエフェクトをかけたり、変換処理を行ったりするために使われます。リサイズ、クロップ、オーバーレイ、ボリューム調整など、数多くのフィルタが含まれています。
- libavdevice: 入出力デバイス(画面、マイク、カメラなど)へのアクセスを提供します。これにより、FFmpegを使って画面録画やマイクからの音声入力などを直接行うことができます。
- libswscale: 映像のスケーリング(サイズ変更)やピクセルフォーマットの変換を行います。
- libswresample: 音声のリサンプリング(サンプルレート変換)やサンプルフォーマットの変換を行います。
- libpostproc: ポストプロセッシング(デコード後の画質改善など)を行うためのライブラリですが、近年はlibavfilterに統合される傾向があります。
これらのライブラリ群を統合的に利用できるのが、コマンドラインツール ffmpeg
です。なぜ多くのプロフェッショナルや技術者がFFmpegを選ぶのでしょうか?その理由はいくつかあります。
- 圧倒的な対応フォーマットとコーデック: FFmpegは非常に多くの動画・音声フォーマットとコーデックをサポートしています。古今東西のほぼすべてのメディアファイルを扱うことができると言っても過言ではありません。
- 高い柔軟性とカスタマイズ性: コマンドラインツールであるため、様々なオプションを組み合わせて非常に細かく処理内容を制御できます。GUIツールでは不可能な複雑な処理も、FFmpegなら実現可能です。
- 自動化との親和性: コマンドライン操作はスクリプトによる自動化に適しています。大量のファイルを一括処理したり、特定の条件下で自動的に処理を実行したりするのに便利です。
- 高性能: 最適化されたライブラリにより、高速な処理が可能です。ハードウェアアクセラレーションを活用すれば、さらに高速化できます。
- オープンソース: 無料で利用できるだけでなく、ソースコードが公開されているため、内部の動作を理解したり、必要であれば自分で改良したりすることも可能です。
FFmpegは、動画編集ソフトやメディアプレイヤーなど、様々なソフトウェアのバックエンドとしても広く利用されています。つまり、あなたが普段使っているソフトウェアも、裏側でFFmpegの技術を使っている可能性が高いのです。
しかし、FFmpegの力を最大限に引き出すには、コマンドラインでの操作が必須となります。次のセクションでは、FFmpegを実際に使い始めるための第一歩として、ダウンロードとインストール方法を各OSごとに詳しく見ていきましょう。
FFmpegのダウンロード
FFmpegは公式にバイナリ(実行可能な形式)を提供していません。これは、FFmpegが非常に多くのライブラリやコーデックに依存しており、それらをすべて含んだ単一のバイナリを配布することが難しいためです。その代わりに、多くの場合は第三者によってビルドされたバイナリを利用するか、自分でソースコードからビルドする必要があります。
ここでは、最も一般的な方法である「第三者によるビルド済みバイナリを利用する方法」を中心に解説します。各OSによってダウンロード方法が異なります。
Windowsでのダウンロード
Windowsでは、FFmpeg公式サイトのダウンロードページ(https://ffmpeg.org/download.html
)から、信頼できる第三者が提供するビルド済みのバイナリを入手するのが一般的です。
- 公式サイトのダウンロードページにアクセス: ブラウザで
https://ffmpeg.org/download.html
を開きます。 - 「Get the packages」セクションを探す: このセクションに、Windows向けのリンクがあります。
- Windowsのアイコンをクリック: Windows用のダウンロードリンクが表示されます。
- 推奨されるビルド提供サイトを選択: 公式サイトでは、いくつかのビルド提供サイトが紹介されています。主に以下のサイトが信頼性が高く推奨されています。
- gyan.dev: (
https://www.gyan.dev/ffmpeg/builds/
) 最新版と古いバージョンが提供されています。SharedとFullがありますが、特に理由がなければ多くのコーデックやフィルタが含まれるFull版が良いでしょう。リリースバージョン(Release builds)と開発バージョン(GPL Full builds)がありますが、安定性を重視するならリリースバージョンがおすすめです。お使いのWindowsが64bit版か32bit版かを確認し、適切な方を選択してください(現在ほとんどのWindowsは64bit版です)。例:「ffmpeg-6.0-full_build.zip
」のようなファイル名になります。 - BtbN: (
https://github.com/BtbN/FFmpeg-Builds/releases
) こちらも定期的に最新のビルドが公開されています。GPL版とLGPL版、FullとEssentialsなどがありますが、基本的にはGPL Full版を選ぶと多くの機能が使えます。ファイル名にwin64-gpl-full
などが含まれるものを選びます。例:「ffmpeg-n5.0-latest-win64-gpl-full-5.0.zip
」のようなファイル名になります(nはバージョン番号を示すプレフィックス)。
- gyan.dev: (
- zipファイルをダウンロード: 選択したサイトから、最新のビルド版のzipファイルをダウンロードします。
- ダウンロードしたファイルを解凍: ダウンロードしたzipファイルを、任意の場所に解凍します。例えば、
C:\
直下にffmpeg
というフォルダを作成し、その中に解凍するなど、分かりやすい場所に配置するのがおすすめです。解凍すると、ffmpeg-x.y.z-full_build
(x.y.zはバージョン)のようなフォルダができます。このフォルダの中にbin
、doc
、presets
などのフォルダがあることを確認してください。
注意点:
- ビルドによって含まれるコーデックやライブラリが異なります。特定の機能(例:NVIDIA NVENCを使ったハードウェアエンコード)を使いたい場合は、それが有効になっているビルドを選ぶ必要があります。通常、
gpl full
やfull
と書かれているビルドは多くの機能を含んでいます。 - 32bit版のWindowsを使っている場合は、必ず32bit版のビルドをダウンロードしてください。64bit版のWindowsであれば、64bit版のビルドを使用するのが一般的です。
- 解凍したフォルダ名は、バージョンアップで変更されることがあります。環境パスを設定する際に必要になるため、解凍先のパスとフォルダ名を覚えておいてください。
macOSでのダウンロード
macOSでは、Homebrewというパッケージマネージャーを使ったインストールが最も簡単で推奨されています。Homebrewを使うことで、依存関係の解決も含めてコマンド一つでFFmpegをインストールできます。
Homebrewがインストールされていない場合:
まず、Homebrewをインストールします。ターミナルアプリ(Launchpadの「その他」フォルダなどにあります)を開き、以下のコマンドを実行します。
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
このコマンドは、Homebrewの公式インストールスクリプトを実行するものです。実行中にパスワード入力を求められたり、インストール内容の確認が表示されたりしますので、指示に従ってください。インストールが完了したら、ターミナルを一度閉じて再度開くか、source ~/.zshrc
(Zshの場合) や source ~/.bash_profile
(Bashの場合) のように設定ファイルを再読み込みしてください。brew help
と入力してコマンド一覧が表示されれば、Homebrewのインストールは成功です。
Homebrewを使ったFFmpegのダウンロード・インストール:
Homebrewがインストールされていれば、FFmpegのインストールは非常に簡単です。ターミナルを開き、以下のコマンドを実行するだけです。
bash
brew install ffmpeg
このコマンドを実行すると、HomebrewがFFmpegの最新版をダウンロードし、必要な依存ライブラリとともに自動的にビルド・インストールしてくれます。インストールには少し時間がかかる場合があります。
Homebrewを使わない場合:
Homebrewを使いたくない場合は、公式サイトのダウンロードページからmacOS向けのビルド提供サイトを探すことも可能ですが、Homebrewを使う方法が最も一般的でメンテナンスも容易なため、強く推奨します。
Linuxでのダウンロード・インストール
Linuxの場合、各ディストリビューションのパッケージマネージャーを使ってインストールするのが最も一般的で簡単です。依存関係も自動的に解決されるため、手動でビルドするより手間がかかりません。
Debian/Ubuntu:
aptコマンドを使います。
bash
sudo apt update
sudo apt install ffmpeg
最新版が必要な場合や、特定のコーデック(例:libavcodec-extra)を有効にしたい場合は、別途リポジトリを追加する必要があることもありますが、多くの場合、標準リポジトリのFFmpegで十分です。
Fedora/CentOS/RHEL:
dnfまたはyumコマンドを使います。EPELリポジトリが必要になる場合があります。
“`bash
sudo dnf install ffmpeg ffmpeg-devel
または yum install ffmpeg ffmpeg-devel (古いバージョン)
“`
FFmpegは通常RPM Fusionリポジトリで提供されることが多いです。RPM Fusionリポジトリが有効になっていない場合は、まずそちらを設定する必要があります。
Arch Linux:
pacmanコマンドを使います。
bash
sudo pacman -S ffmpeg
ソースコードからのビルド(上級者向け):
特定のオプションを有効にしたい場合や、最新の開発版を使いたい場合は、ソースコードから自分でビルドすることも可能です。この方法は、依存ライブラリのインストール、./configure
スクリプトの実行(多くのオプションを指定可能)、make
、make install
といった手順が必要になり、初心者にはハードルが高いです。各ライブラリのバージョン管理なども考慮する必要があるため、特別な理由がない限りはパッケージマネージャーやビルド済みバイナリを利用することを推奨します。
FFmpegのインストール(環境パスの設定)
Windowsでビルド済みバイナリをダウンロードした場合、そのままではFFmpegコマンドをどのディレクトリからでも実行できません。これは、FFmpegの実行ファイルがある場所がシステムの「環境パス(PATH)」に追加されていないためです。環境パスを設定することで、コマンドプロンプトやPowerShellのどこからでも ffmpeg
コマンドを実行できるようになります。
macOSやLinuxでパッケージマネージャーを使ってインストールした場合、通常は自動的に環境パスが設定されるため、このステップは不要です。しかし、もし ffmpeg
コマンドが見つからない場合は、シェルの設定ファイルを確認する必要があるかもしれません。
Windowsでの環境パス設定
Windowsで環境パスを設定する手順は以下の通りです(Windows 10/11を想定)。
- 「システムのプロパティ」を開く: スタートボタンを右クリックし、「システム」を選択します。開いたウィンドウの左側メニューから「システムの詳細設定」をクリックします。
- 「環境変数」ダイアログを開く: 「システムの詳細設定」ウィンドウの下部にある「環境変数(N)…」ボタンをクリックします。
- ユーザー環境変数またはシステム環境変数の「Path」を選択:
- ユーザー環境変数: 現在ログインしているユーザーのみがFFmpegを使えるようにする場合。通常はこちらで十分です。上段のユーザー環境変数リストから「Path」を選択します。もし「Path」が存在しない場合は、「新規」ボタンをクリックして「変数名」に
Path
、「変数値」にFFmpegのbinフォルダのパスを入力します。 - システム環境変数: コンピュータ上のすべてのユーザーがFFmpegを使えるようにする場合。下段のシステム環境変数リストから「Path」を選択します。管理者権限が必要です。
- ユーザー環境変数: 現在ログインしているユーザーのみがFFmpegを使えるようにする場合。通常はこちらで十分です。上段のユーザー環境変数リストから「Path」を選択します。もし「Path」が存在しない場合は、「新規」ボタンをクリックして「変数名」に
- 「編集」ボタンをクリック: 「Path」を選択した状態で「編集(I)…」ボタンをクリックします。
- FFmpegの
bin
フォルダのパスを追加:- 開いた「環境変数名の編集」ダイアログで、「新規(N)」ボタンをクリックします。
- FFmpegを解凍したフォルダの中にある
bin
フォルダのフルパスを入力します。例えば、C:\ffmpeg\ffmpeg-6.0-full_build\bin
のようになります。 - 入力したら、Enterキーを押して確定します。
- 重要: 複数のパスがリスト表示されていることを確認してください。誤って既存のパスを上書きしないように注意が必要です。
- 変更を保存: 「OK」ボタンを複数回クリックして、開いているすべてのダイアログ(環境変数、システムのプロパティなど)を閉じます。
- 新しいコマンドプロンプト/PowerShellを開く: 環境パスの変更は、設定を行った後に新たに開いたコマンドプロンプトやPowerShellのウィンドウに反映されます。設定前に開いていたウィンドウではFFmpegコマンドは認識されません。
-
設定の確認: 新しく開いたコマンドプロンプトまたはPowerShellで、以下のコマンドを入力して実行します。
cmd
ffmpeg -versionFFmpegのバージョン情報や設定オプションが表示されれば、環境パスの設定は成功です。もし
ffmpeg は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
のようなエラーが表示される場合は、パスが正しく入力されていないか、新しいウィンドウを開いていないなどの原因が考えられます。入力したパスがFFmpegのbin
フォルダを正確に指しているか、フォルダ名に誤りがないかなどを再度確認してください。
macOS/Linuxでの環境パス設定(確認)
macOSやLinuxでパッケージマネージャーを使ってインストールした場合、FFmpegの実行ファイルは /usr/local/bin
や /usr/bin
など、既に環境パスが通っている標準的なディレクトリに配置されることがほとんどです。そのため、特別な設定は不要で、インストールが完了すればすぐにターミナルから ffmpeg
コマンドを実行できるはずです。
念のため、ターミナルで以下のコマンドを実行して確認してください。
bash
ffmpeg -version
FFmpegのバージョン情報が表示されればOKです。
もし「command not found」のようなエラーが表示される場合は、いくつかの原因が考えられます。
- インストールが失敗している: FFmpegがそもそも正しくインストールされていない可能性があります。インストール時のエラーメッセージを確認してください。
- 実行ファイルが標準以外の場所にインストールされた: パッケージマネージャーの設定や、手動ビルドした場合などに、実行ファイルが環境パスが通っていないディレクトリにインストールされた可能性があります。
which ffmpeg
コマンドでFFmpegの場所を特定し、その場所が環境パスに含まれているか確認します。 - シェルの設定ファイルに問題がある: 環境パスは通常、
~/.bashrc
,~/.zshrc
,~/.bash_profile
などのシェルの設定ファイルで設定されています。これらのファイルに誤りがあるか、正しく読み込まれていない可能性があります。例えば、手動でFFmpegのパスを追加した場合は、export PATH="$PATH:/path/to/ffmpeg/bin"
のような行が設定ファイルに記述されており、ターミナルを開き直すかsource ~/.bashrc
のようにファイルを再読み込みする必要があります。
通常はパッケージマネージャーによるインストールで問題なくパスが設定されるため、このセクションはWindowsユーザー向けの詳細な手順として捉えていただければ十分です。
FFmpegの基本的な使い方
FFmpegの基本的なコマンド構文は以下のようになります。
bash
ffmpeg [global_options] {[input_file_options] -i input_url} {[output_file_options] output_url}
ffmpeg
: コマンド名です。[global_options]
: FFmpeg全体の動作に影響するオプションです。例:-y
(上書き確認なし)、-loglevel
(ログレベル設定)など。[input_file_options]
: 入力ファイルに対して適用されるオプションです。-i
オプションの直前に置きます。例:-ss
(開始位置)、-t
(期間)など。-i input_url
: 入力ファイルまたはURLを指定します。複数の入力ファイルを指定する場合は、-i
オプションをファイルごとに繰り返します。[output_file_options]
: 出力ファイルに対して適用されるオプションです。出力ファイル名の直前に置きます。例:-c:v
(映像コーデック)、-vf
(映像フィルタ)など。output_url
: 出力ファイル名またはURLを指定します。複数の出力ファイルを指定する場合は、出力設定とファイル名をセットで繰り返します。
入力オプションと出力オプションは混同しやすいですが、基本的に -i
の前に置くものが入力オプション、出力ファイル名の前に置くものが出力オプションと覚えておくと分かりやすいでしょう。
それでは、よく使われる基本的な使い方を見ていきましょう。
1. 動画フォーマットの変換
最も基本的な使い方は、一つのフォーマットから別のフォーマットへ動画を変換することです。
例:MP4ファイルをAVIファイルに変換する
bash
ffmpeg -i input.mp4 output.avi
このコマンドは、input.mp4
を読み込み、デフォルトの設定でAVIコンテナフォーマットの output.avi
として出力します。特にコーデックを指定しない場合、FFmpegは出力フォーマットに適したデフォルトのコーデックを選択します。しかし、明示的にコーデックを指定することが多いです。
2. コーデックを指定した変換
出力コーデックを指定することで、ファイルサイズや互換性を制御できます。
例:MP4 (H.264映像、AAC音声) を WebM (VP9映像、Opus音声) に変換する
bash
ffmpeg -i input.mp4 -c:v libvpx-vp9 -c:a libopus output.webm
-c:v libvpx-vp9
: 映像コーデックとしてVP9 (libvpx-vp9) を指定します。-c:a libopus
: 音声コーデックとしてOpus (libopus) を指定します。
-c:v copy
または -c:a copy
と指定すると、該当するストリーム(映像または音声)を再エンコードせずにコピーします。これにより変換時間を短縮できますが、フォーマットやコーデックの組み合わせによってはコピーできない場合や、予期しない問題が発生する場合があります。
例:MP4 (H.264/AAC) から MKV (H.264/AAC) へ、ストリームをコピーしてコンテナだけ変更する
bash
ffmpeg -i input.mp4 -c copy output.mkv
-c copy
: 映像 (-c:v copy
) と音声 (-c:a copy
) の両方をコピーします。
3. 音声フォーマットの変換
動画ファイルだけでなく、音声ファイルもFFmpegで変換できます。
例:MP3ファイルをWAVファイルに変換する
bash
ffmpeg -i input.mp3 output.wav
例:FLACファイルをAACファイルに変換する (ステレオ、192kbps)
bash
ffmpeg -i input.flac -c:a aac -b:a 192k output.aac
-c:a aac
: 音声コーデックとしてAACを指定します。-b:a 192k
: 音声ビットレートを192kbpsに指定します。
4. 動画から音声を抽出
動画ファイルから音声ストリームだけを抽出して、音声ファイルとして保存することも簡単です。
例:MP4ファイルからAAC音声を抽出してM4Aファイルとして保存する
bash
ffmpeg -i input.mp4 -vn -c:a copy output.m4a
-vn
: 映像ストリームを含めない(No Video)ことを指定します。-c:a copy
: 音声ストリームを再エンコードせずにそのままコピーします。元の動画がAAC音声であれば、そのまま高速に抽出できます。
別の音声フォーマットに変換しながら抽出することも可能です。
例:MP4ファイルから音声を抽出し、MP3ファイルとして保存する
bash
ffmpeg -i input.mp4 -vn -acodec libmp3lame -ab 192k output.mp3
-vn
: 映像なし。-acodec libmp3lame
: 音声コーデックとしてMP3 (libmp3lame) を指定します。-ab 192k
: 音声ビットレートを192kbpsに指定します。
5. 動画から画像を抽出(サムネイル作成)
動画の特定フレームを画像ファイルとして抽出できます。ウェブサイトのサムネイル作成などによく使われます。
例:動画の3秒時点のフレームをJPEG画像として抽出する
bash
ffmpeg -i input.mp4 -ss 00:00:03 -vframes 1 thumbnail.jpg
-ss 00:00:03
: 動画の開始位置を3秒に指定します。-ss
オプションは、入力オプションとして-i
の前に置くと、より正確かつ高速なシークが可能ですが、キーフレーム単位での移動になるため、厳密な時間指定には-i
の後に置くか、出力オプションとして使う方が適しています。この例では後者の使い方に近いため、-i
の後に置いています。-vframes 1
: 映像フレームを1枚だけ出力することを指定します。thumbnail.jpg
: 出力ファイル名。拡張子によって画像フォーマットが自動的に選択されます(jpg, png, webpなど)。
一定間隔で複数の画像を抽出することも可能です。
例:動画から10秒ごとにJPEG画像を抽出する
bash
ffmpeg -i input.mp4 -vf fps=1/10 thumb%04d.jpg
-vf fps=1/10
: 映像フィルタ (-vf
) としてfps
フィルタを使用します。fps=1/10
は「10秒ごとに1フレームを出力する」という意味です。thumb%04d.jpg
: 出力ファイル名のパターンを指定します。%04d
は連番を表し、thumb0001.jpg
,thumb0002.jpg
, …のように出力されます。
6. 画像から動画を作成
連番の画像ファイル群から動画ファイルを作成することもできます。タイムラプス動画作成などに応用できます。
例:img0001.png
, img0002.png
, … という連番画像から30fpsのMP4動画を作成する
bash
ffmpeg -framerate 30 -i img%04d.png -c:v libx264 output.mp4
-framerate 30
: 入力画像のフレームレート(動画にしたときの再生速度)を30fpsに指定します。これは入力オプションなので-i
の前に置きます。-i img%04d.png
: 入力ファイル名のパターンを指定します。FFmpegは指定されたパターンに一致するファイルを自動的に認識し、連番で読み込みます。-c:v libx264
: 映像コーデックとしてH.264 (libx264) を指定します。
7. 動画のトリミング(指定した時間範囲を抽出)
動画の特定の部分だけを切り出す(トリミング)ことができます。
例:動画の10秒地点から20秒間を切り出す
bash
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:20 -c copy output.mp4
-i input.mp4
: 入力ファイル。-ss 00:00:10
: 開始位置を10秒に指定します。入力オプションとして-i
の前に置くことで、ファイル全体をスキャンせずに効率的に目的の開始位置にシークできます。-t 00:00:20
: 開始位置から20秒間の期間を指定します。-c copy
: 映像・音声ストリームをコピーします。これにより再エンコードの必要がなく、高速かつ劣化なしでトリミングできます。ただし、コピーの場合は-ss
の精度がキーフレーム単位になるため、厳密な時間指定でトリミングしたい場合は、再エンコードが必要です。
厳密な時間指定でトリミングしたい場合は、-ss
を出力オプションとして指定し、再エンコードを行います。
例:動画の10秒地点から開始し、終了位置まで(または期間指定)を再エンコードして切り出す
bash
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:20 -c:v libx264 -c:a aac output.mp4
この場合、-ss
で指定した時間から正確にエンコードを開始します。-t
で期間を指定しない場合は、開始位置から動画の最後までを切り出します。
8. エンコーディングオプションの指定
ファイルサイズや画質、フレームレート、解像度などを細かく制御したい場合は、エンコーディングオプションを指定します。
-b:v <ビットレート>
: 映像ビットレートを指定します。例:-b:v 1000k
(1000kbps)。高いほど高画質になりますがファイルサイズも大きくなります。-b:a <ビットレート>
: 音声ビットレートを指定します。例:-b:a 128k
(128kbps)。-r <フレームレート>
: フレームレートを指定します。例:-r 30
(30fps)。-s <解像度>
: 解像度を指定します。例:-s 1280x720
(1280×720ピクセル)。-aspect <アスペクト比>
: アスペクト比を指定します。例:-aspect 16:9
。-crf <値>
: H.264 (libx264) や H.265 (libx265) コーデックで品質ベースのエンコードを行う場合に指定します。0〜51の値を指定し、値が小さいほど高画質(ファイルサイズ大)、大きいほど低画質(ファイルサイズ小)になります。推奨値は18〜28程度です。ビットレート指定よりも効率的な場合があります。例:-crf 23
。-preset <プリセット名>
: H.264/H.265エンコードの速度と圧縮率のバランスを指定します。ultrafast
,superfast
,fast
,medium
,slow
,slower
,veryslow
などがあります。medium
が標準的です。veryslow
ほど高圧縮・高画質になりますが、エンコード時間がかかります。例:-preset medium
。
例:入力動画をH.264 (CRF 23, mediumプリセット)、AAC音声 (128kbps) の720p、30fpsのMP4に変換する
bash
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -s 1280x720 -r 30 output_720p.mp4
これらの基本的なコマンドとオプションを組み合わせるだけでも、様々な変換や編集作業が可能です。しかし、FFmpegの真価は「フィルタリング」にあります。次のセクションでは、フィルタを使ってより高度な編集を行う方法を解説します。
FFmpegの応用的な使い方(フィルタリング)
FFmpegのフィルタ機能を使うと、動画や音声に様々な処理を施すことができます。リサイズ、クロップ、回転、透かしの追加、音量調整、ノイズ除去など、その種類は非常に豊富です。フィルタは -vf
(映像フィルタ)や -af
(音声フィルタ)、またはより複雑な処理のための -filter_complex
オプションを使って指定します。
フィルタの基本
フィルタは通常、-vf filter_name=option1=value1:option2=value2,...
のように指定します。複数のフィルタを連続して適用する場合は、カンマ ,
で区切ります。
例:動画を半分のサイズにリサイズする (scale
フィルタ)
bash
ffmpeg -i input.mp4 -vf scale=iw/2:ih/2 output_half_size.mp4
-vf scale=iw/2:ih/2
: 映像フィルタとしてscale
フィルタを指定します。iw
は入力映像の幅 (input width)、ih
は入力映像の高さ (input height) を表す変数です。iw/2:ih/2
で元の幅・高さの半分を指定しています。
よく使う映像フィルタ (-vf
)
-
scale
(リサイズ)scale=<width>:<height>
: 指定したサイズに変更。例:scale=640:480
scale=<width>:-1
: 幅を指定し、アスペクト比を維持して高さを自動計算。例:scale=1280:-1
scale=-1:<height>
: 高さを指定し、アスペクト比を維持して幅を自動計算。例:scale=-1:720
- 変数も利用可能:
scale=iw/2:ih/2
,scale=640:ih*640/iw
(幅640に固定、高さはアスペクト比維持) flags=lanczos
: リサイズ時の補間アルゴリズムを指定。画質に影響します。
例:幅を960ピクセルにし、アスペクト比を維持してリサイズ
bash
ffmpeg -i input.mp4 -vf scale=960:-1 output_960w.mp4 -
crop
(クロップ/切り抜き)crop=<width>:<height>:<x>:<y>
: 幅<width>
、高さ<height>
、左上隅の座標<x>
,<y>
で指定した領域を切り抜きます。座標は左上を (0,0) とします。- 変数も利用可能:
in_w
,in_h
,ow
,oh
,x
,y
など。x
,y
に(in_w-ow)/2
のように指定すると中央を切り抜けます。
例:動画の中央640×480ピクセルをクロップする
bash
ffmpeg -i input.mp4 -vf crop=640:480:(in_w-640)/2:(in_h-480)/2 output_cropped.mp4 -
transpose
(回転/反転)transpose=<value>
:0
: 90度反時計回りに回転 + 垂直反転 (デフォルト)1
: 90度時計回りに回転2
: 90度反時計回りに回転3
: 90度時計回りに回転 + 垂直反転
hflip
: 水平反転vflip
: 垂直反転
例:動画を90度時計回りに回転する
bash
ffmpeg -i input.mp4 -vf transpose=1 output_rotated.mp4 -
drawtext
(テキストオーバーレイ)- 動画にテキストを焼き付けます。非常に多くのオプションがあります。
fontfile=<フォントファイルパス>
: 使用するフォントファイル (.ttfなど) を指定。text='<表示するテキスト>'
: 表示するテキスト。fontsize=<サイズ>
: フォントサイズ。fontcolor=<色>
: テキストの色 (例: white, black, red, #RRGGBB形式など)。x=<座標>
,y=<座標>
: テキストの表示位置。変数も利用可能 (例:x=(w-text_w)/2
,y=(h-text_h)/2
で中央寄せ)。enable='lt(t,10)'
: フィルタを適用する時間範囲を指定。例: 開始から10秒まで。box=1
,[email protected]
: 背景ボックスを追加(半透明黒)。
例:動画の右下隅に半透明の白文字でタイムスタンプを表示する
bash
ffmpeg -i input.mp4 -vf drawtext="fontfile=/path/to/font.ttf:fontsize=30:[email protected]:x=w-text_w-10:y=h-text_h-10:text='%{pts \:hms}'" output_with_timestamp.mp4%{pts \:hms}
: 現在の再生時間を時:分:秒
形式で表示する特殊なテキスト変数です。w-text_w-10:h-text_h-10
: 右下隅から内側に10ピクセルオフセットした位置を指定しています。
-
overlay
(画像オーバーレイ)- 動画の上に別の画像や動画を重ね合わせます。
overlay=<x>:<y>
: オーバーレイする位置を指定。変数も利用可能。- 透過PNG画像を重ねることも可能です。
- 時間指定 (
enable='between(t,5,15)'
) で特定の時間だけ表示させることも可能。
例:動画の左上隅にロゴ画像を重ね合わせる
bash
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output_with_logo.mp4- この例では
-filter_complex
を使っています。overlay
フィルタは複数の入力(動画とロゴ画像)を取るため、-vf
ではなく-filter_complex
を使う必要があります。 -i input.mp4 -i logo.png
: 入力ファイルを2つ指定します。一つ目がメインの動画、二つ目がオーバーレイするロゴ画像です。"overlay=10:10"
: 最初の入力 (メイン動画) の上に、二つ目の入力 (ロゴ画像) を座標 (10,10) に重ねる、というフィルタグラフを指定しています。
よく使う音声フィルタ (-af
)
-
volume
(ボリューム調整)volume=<value>
: 音量を調整します。1.0
が元の音量です。2.0
で2倍、0.5
で半分です。単位としてdB
も使えます (volume=3dB
)。
例:音量を2倍にする
bash
ffmpeg -i input.mp4 -af volume=2.0 output_louder.mp4 -
aresample
(サンプルレート変換)aresample=<sample_rate>
: サンプルレートを変更します。例:aresample=48000
(48kHz)。
例:音声のサンプルレートを48kHzに変換する
bash
ffmpeg -i input.mp4 -af aresample=48000 output_48khz_audio.mp4
複雑なフィルタグラフ (-filter_complex
)
複数の入力を扱ったり、フィルタ処理を複雑に組み合わせたりする場合は、-filter_complex
オプションを使用します。フィルタグラフの文法はやや複雑ですが、非常に柔軟な処理が可能です。
基本的な文法: [input_stream_specifier]filter_name=options[output_stream_specifier]; [input_stream_specifier]filter_name=options[output_stream_specifier]; ...
[input_stream_specifier]
: フィルタへの入力ストリームを指定します。例えば[0:v]
は最初の入力ファイル (0番目) の映像ストリーム (v)、[1:a]
は2番目の入力ファイル (1番目) の音声ストリーム (a) を示します。フィルタからの出力を次のフィルタへの入力とする場合は、任意の名前を付けた[ラベル]
を使います。filter_name=options
: 適用するフィルタとそのオプションです。[output_stream_specifier]
: フィルタからの出力ストリームの名前(ラベル)を指定します。このラベルは、同じフィルタグラフ内の他のフィルタへの入力として使ったり、最終的な出力ファイルへのマッピング (-map
) で指定したりします。
例:2つの動画を縦に連結する (vstack
フィルタ)
bash
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "vstack" output_stacked.mp4
-i input1.mp4 -i input2.mp4
: 2つの入力ファイルを指定します。"vstack"
:vstack
フィルタは2つの入力映像ストリームを受け取り、それらを縦に連結して一つの映像ストリームとして出力します。入力ストリーム指定を省略した場合、FFmpegは最初の2つの映像ストリームを自動的に入力として選びます。
例:動画の左上隅に別の動画をピクチャーインピクチャーで表示する (overlay
フィルタを応用)
bash
ffmpeg -i main.mp4 -i pip.mp4 -filter_complex "[0:v][1:v]overlay=10:10" output_pip.mp4
[0:v]
: 最初の入力ファイル (main.mp4
) の映像ストリーム。これがメインの背景となります。[1:v]
: 二番目の入力ファイル (pip.mp4
) の映像ストリーム。これがオーバーレイされる動画となります。overlay=10:10
: 映像フィルタoverlay
を使います。[0:v]
を背景として、その上に[1:v]
を座標 (10,10) に重ね合わせます。結果は一つの映像ストリームとして出力されます。- このコマンドでは映像ストリームのみを処理しています。音声を含める場合は、適切に音声ストリームも処理し、
-map
オプションで出力に含める必要があります。
例:動画にリサイズ、クロップ、テキスト焼き付けの3つのフィルタを連続して適用する
bash
ffmpeg -i input.mp4 -filter_complex "[0:v]scale=1280:-1[scaled];[scaled]crop=1280:720:(iw-1280)/2:(ih-720)/2[cropped];[cropped]drawtext='text=Sample:fontfile=/path/to/font.ttf:x=10:y=10'[output]" -map "[output]" -c:v libx264 output_processed.mp4
[0:v]scale=1280:-1[scaled]
: 入力映像ストリーム[0:v]
を幅1280、アスペクト比維持でリサイズし、その出力を[scaled]
というラベルで参照できるようにします。[scaled]crop=1280:720:(iw-1280)/2:(ih-720)/2[cropped]
: 前のフィルタ出力[scaled]
を入力とし、中央の1280×720をクロップし、その出力を[cropped]
というラベルにします。[cropped]drawtext='...'[output]
: 前のフィルタ出力[cropped]
を入力とし、テキストを焼き付け、その最終的な出力を[output]
というラベルにします。-map "[output]"
:-filter_complex
で作成した[output]
という名前のストリームを、出力ファイルoutput_processed.mp4
の映像ストリームとして使用することを明示的に指定します。音声ストリームも必要であれば、別に処理するか、[0:a]copy[audio_out]
のようにコピーして-map "[audio_out]"
のように指定します。
フィルタリングはFFmpegの非常に強力な機能ですが、その文法やフィルタの種類は多岐にわたります。公式ドキュメント(特にFilter documentation)は非常に詳細ですが、最初は分かりにくいかもしれません。まずは基本的なフィルタから試してみて、徐々に複雑なフィルタグラフに挑戦していくのがおすすめです。
その他の高度な使い方
FFmpegは上記以外にも、様々な高度なタスクを実行できます。
- ストリーミング: RTMP, HLS, DASHなどのプロトコルを使って、リアルタイムでメディアをエンコード・配信できます。ライブストリーミング配信や動画サーバー構築などに利用されます。
- キャプチャ:
libavdevice
ライブラリを利用して、画面、マイク、カメラなどのデバイスから直接映像や音声をキャプチャできます。画面録画やWebカメラからの入力に使われます。 - メタデータ操作: 動画や音声ファイルに含まれるメタデータ(タイトル、アーティスト、作成日時など)を表示、編集、削除できます。
- チャプター追加: 動画ファイルにチャプターマーカーを追加できます。
- ハードウェアアクセラレーション: 対応するハードウェア(NVIDIA (NVENC/NVDEC), Intel (QuickSync), AMD (VCE/VCN), Apple (VideoToolbox) など)を利用してエンコード/デコード処理を高速化できます。これには、FFmpegをビルドする際に該当するハードウェアアクセラレーションライブラリを有効にする必要があります。利用可能なコーデック名は
h264_nvenc
,hevc_nvenc
(NVIDIA),h264_qsv
,hevc_qsv
(Intel QuickSync),h264_videotoolbox
,hevc_videotoolbox
(macOS VideoToolbox) などとなります。
例:NVIDIA NVENCを使ってH.264形式でエンコードする
bash
ffmpeg -i input.mp4 -c:v h264_nvenc -c:a copy output_nvenc.mp4
ハードウェアアクセラレーションの利用可否やパフォーマンスは、お使いのハードウェア、ドライバー、そしてFFmpegのビルドに依存します。
これらの高度な機能については、それぞれの目的に特化した詳細な知識が必要になる場合があります。公式ドキュメントや専門的な記事を参照しながら試してみてください。
FFmpegを使う上での注意点とトラブルシューティング
FFmpegはコマンドラインツールであるため、慣れるまではエラーが発生しやすいかもしれません。ここでは、FFmpegを使う上での注意点と、よくある問題のトラブルシューティング方法をいくつか紹介します。
注意点
- コマンドのスペルミスと大文字・小文字: コマンド名、オプション名、ファイル名などは正確に入力する必要があります。特にLinuxやmacOSでは大文字・小文字が区別されます。
- オプションの順序: オプションの多くは入力ファイル (
-i
) の前(グローバルオプション、入力オプション)か、出力ファイル名の前(出力オプション)に置く必要があります。順序を間違えると期待通りに動作しないか、エラーになります。特に-ss
オプションは、位置によって動作が変わる代表例です。 - ファイルパス: ファイルパスにスペースや特殊文字が含まれる場合は、パス全体をダブルクォーテーション (
"
) で囲む必要があります。 - 上書き確認: デフォルトでは、出力ファイルが既に存在する場合に上書きするかどうか確認を求められます。確認なしで常に上書きしたい場合は、グローバルオプションとして
-y
を指定します。 - エンコード時間とCPU負荷: 動画の再エンコードは非常にCPUに負荷がかかる処理であり、完了まで時間がかかる場合があります。特に高解像度や高フレームレートの動画、複雑なフィルタ処理を行う場合は注意が必要です。
- 品質とファイルサイズのトレードオフ: エンコード設定(ビットレート、CRF、プリセットなど)によって、出力動画の品質とファイルサイズが決まります。一般的に、品質を高めるとファイルサイズは大きくなります。目的に応じて最適なバランスを見つけることが重要です。
- 対応フォーマットとコーデック: FFmpegのビルドによって、サポートしているフォーマットやコーデックが異なります。特定のコーデックが見つからない、特定のフォーマットを扱えないといった場合は、
ffmpeg -formats
やffmpeg -codecs
コマンドで利用可能なものリストを確認したり、別のビルドを探したり、自分でソースコードからビルドしたりする必要があるかもしれません。
トラブルシューティング
- 「command not found」エラー:
- FFmpegが正しくインストールされていないか、実行ファイルが見つからない場所に置かれている可能性があります。
- Windowsの場合は環境パス設定が正しく行われているか、新しいコマンドプロンプト/PowerShellで試しているか確認してください。
- macOS/Linuxの場合は
which ffmpeg
で場所を確認し、その場所が環境パスに含まれているか (echo $PATH
)、シェルの設定ファイルに誤りがないか確認してください。
- FFmpeg自体のエラーメッセージ:
- FFmpegは詳細なエラーメッセージを出力することが多いです。メッセージを注意深く読み、何が問題なのかを理解しようと努めてください。例えば、「Unknown encoder」「Codec not found」「Input file does not contain any stream」「Filter … not found」などのメッセージは、指定したコーデックやフィルタが利用できない、入力ファイルに問題があるといった原因を示唆しています。
- 特に複雑なフィルタグラフ (
-filter_complex
) のエラーは、グラフの文法間違いやストリームの参照間違いなどが原因であることが多いです。 - エラーメッセージとFFmpegのバージョン、使用したコマンドを添えてインターネットで検索すると、解決策が見つかることが多いです。
- 出力された動画/音声ファイルに問題がある:
- 再生できない、音が出ない、映像が出ない: コーデックの指定ミス、ストリームのマッピングミス (
-map
) などが考えられます。 - 画質が悪い、ノイズが多い: ビットレートやCRFなどのエンコード設定が低すぎる可能性があります。プリセットを遅いものに変えてみる、CRF値を小さくしてみるなどの対策が有効です。
- 音ズレする: 一部のフォーマットやコーデック、フィルタリング処理の組み合わせで発生することがあります。特に
-c copy
でのトリミングや結合、複数の入力を扱う場合に注意が必要です。assinc
やitsoffset
といったオプションで調整できる場合もありますが、原因特定と解決は難しい場合があります。 - ファイルサイズが大きすぎる/小さすぎる: ビットレートやCRFの設定が適切でない可能性があります。
- 再生できない、音が出ない、映像が出ない: コーデックの指定ミス、ストリームのマッピングミス (
- 処理速度が遅い:
- 動画の再エンコードは時間がかかります。
-c copy
で可能な部分は再エンコードを避けるのが最も高速です。 - エンコーディング設定(ビットレート、CRF、プリセット)を見直してください。低いビットレートや
ultrafast
のような速いプリセットは高速ですが、品質は低下します。 - ハードウェアアクセラレーションが利用できる環境であれば、対応するコーデックを指定することで劇的に高速化できる可能性があります。ただし、ハードウェアアクセラレーションは画質面でCPUエンコードに劣る場合があるほか、機能(フィルタリングなど)に制限があることもあります。
- PCのCPUやストレージの速度も影響します。
- 動画の再エンコードは時間がかかります。
FFmpegの学習は、試行錯誤の連続です。エラーを恐れずに、まずは簡単なコマンドから試してみて、少しずつ複雑な処理に挑戦していくのが上達の鍵です。そして、困ったときは公式ドキュメントやオンラインの情報を積極的に活用しましょう。
まとめ
この記事では、FFmpegのダウンロード・インストール方法から、基本的な使い方、そしてフィルタリングを活用した応用的なテクニックまでを網羅的に解説しました。
- FFmpegは、動画・音声処理のための非常に強力で柔軟なコマンドラインツールです。
- ダウンロード・インストールは、OSによって推奨される方法が異なります。Windowsではビルド済みバイナリのダウンロードと環境パス設定、macOS/Linuxではパッケージマネージャーの利用が一般的です。
- 基本的なコマンド構文は
ffmpeg [options] -i input [options] output
であり、入出力オプション、グローバルオプションを適切に指定します。 - フォーマット変換、コーデック指定、ストリーム抽出、画像化など、基本的なタスクはシンプルなコマンドで実行できます。
-vf
,-af
,-filter_complex
オプションを使ったフィルタリングは、リサイズ、クロップ、オーバーレイ、ボリューム調整など、様々な編集処理を可能にします。- より高度な用途として、ストリーミング、キャプチャ、メタデータ操作、ハードウェアアクセラレーションなども利用できます。
- コマンド入力の正確性、オプションの順序、エラーメッセージの確認が、FFmpegを使いこなす上での重要なポイントです。
FFmpegはコマンドラインツールであるという特性上、習得にはある程度の時間と労力がかかります。しかし、一度その使い方をマスターすれば、GUIツールでは実現できないような細かな制御や、大量のファイルを自動的に処理するパイプライン構築などが可能になり、あなたのマルチメディアワークフローを大きく変える可能性を秘めています。
この記事が、あなたがFFmpegの世界へ踏み出すための一助となれば幸いです。まずは簡単なコマンドから始め、徐々に複雑な処理に挑戦してみてください。FFmpegは、あなたのクリエイティブなアイデアや技術的な課題解決において、強力な味方となるでしょう。FFmpegの公式ドキュメントは非常に網羅的で、すべての機能について詳しく解説されていますので、さらに深く学びたい場合はぜひ参照してください。
Happy FFmpeg’ing!