ffmpegのダウンロード・インストール方法と使い方を徹底解説

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を選ぶのでしょうか?その理由はいくつかあります。

  1. 圧倒的な対応フォーマットとコーデック: FFmpegは非常に多くの動画・音声フォーマットとコーデックをサポートしています。古今東西のほぼすべてのメディアファイルを扱うことができると言っても過言ではありません。
  2. 高い柔軟性とカスタマイズ性: コマンドラインツールであるため、様々なオプションを組み合わせて非常に細かく処理内容を制御できます。GUIツールでは不可能な複雑な処理も、FFmpegなら実現可能です。
  3. 自動化との親和性: コマンドライン操作はスクリプトによる自動化に適しています。大量のファイルを一括処理したり、特定の条件下で自動的に処理を実行したりするのに便利です。
  4. 高性能: 最適化されたライブラリにより、高速な処理が可能です。ハードウェアアクセラレーションを活用すれば、さらに高速化できます。
  5. オープンソース: 無料で利用できるだけでなく、ソースコードが公開されているため、内部の動作を理解したり、必要であれば自分で改良したりすることも可能です。

FFmpegは、動画編集ソフトやメディアプレイヤーなど、様々なソフトウェアのバックエンドとしても広く利用されています。つまり、あなたが普段使っているソフトウェアも、裏側でFFmpegの技術を使っている可能性が高いのです。

しかし、FFmpegの力を最大限に引き出すには、コマンドラインでの操作が必須となります。次のセクションでは、FFmpegを実際に使い始めるための第一歩として、ダウンロードとインストール方法を各OSごとに詳しく見ていきましょう。

FFmpegのダウンロード

FFmpegは公式にバイナリ(実行可能な形式)を提供していません。これは、FFmpegが非常に多くのライブラリやコーデックに依存しており、それらをすべて含んだ単一のバイナリを配布することが難しいためです。その代わりに、多くの場合は第三者によってビルドされたバイナリを利用するか、自分でソースコードからビルドする必要があります。

ここでは、最も一般的な方法である「第三者によるビルド済みバイナリを利用する方法」を中心に解説します。各OSによってダウンロード方法が異なります。

Windowsでのダウンロード

Windowsでは、FFmpeg公式サイトのダウンロードページ(https://ffmpeg.org/download.html)から、信頼できる第三者が提供するビルド済みのバイナリを入手するのが一般的です。

  1. 公式サイトのダウンロードページにアクセス: ブラウザで https://ffmpeg.org/download.html を開きます。
  2. 「Get the packages」セクションを探す: このセクションに、Windows向けのリンクがあります。
  3. Windowsのアイコンをクリック: Windows用のダウンロードリンクが表示されます。
  4. 推奨されるビルド提供サイトを選択: 公式サイトでは、いくつかのビルド提供サイトが紹介されています。主に以下のサイトが信頼性が高く推奨されています。
    • 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はバージョン番号を示すプレフィックス)。
  5. zipファイルをダウンロード: 選択したサイトから、最新のビルド版のzipファイルをダウンロードします。
  6. ダウンロードしたファイルを解凍: ダウンロードしたzipファイルを、任意の場所に解凍します。例えば、C:\直下にffmpegというフォルダを作成し、その中に解凍するなど、分かりやすい場所に配置するのがおすすめです。解凍すると、ffmpeg-x.y.z-full_build(x.y.zはバージョン)のようなフォルダができます。このフォルダの中にbindocpresetsなどのフォルダがあることを確認してください。

注意点:

  • ビルドによって含まれるコーデックやライブラリが異なります。特定の機能(例:NVIDIA NVENCを使ったハードウェアエンコード)を使いたい場合は、それが有効になっているビルドを選ぶ必要があります。通常、gpl fullfull と書かれているビルドは多くの機能を含んでいます。
  • 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 スクリプトの実行(多くのオプションを指定可能)、makemake install といった手順が必要になり、初心者にはハードルが高いです。各ライブラリのバージョン管理なども考慮する必要があるため、特別な理由がない限りはパッケージマネージャーやビルド済みバイナリを利用することを推奨します。

FFmpegのインストール(環境パスの設定)

Windowsでビルド済みバイナリをダウンロードした場合、そのままではFFmpegコマンドをどのディレクトリからでも実行できません。これは、FFmpegの実行ファイルがある場所がシステムの「環境パス(PATH)」に追加されていないためです。環境パスを設定することで、コマンドプロンプトやPowerShellのどこからでも ffmpeg コマンドを実行できるようになります。

macOSやLinuxでパッケージマネージャーを使ってインストールした場合、通常は自動的に環境パスが設定されるため、このステップは不要です。しかし、もし ffmpeg コマンドが見つからない場合は、シェルの設定ファイルを確認する必要があるかもしれません。

Windowsでの環境パス設定

Windowsで環境パスを設定する手順は以下の通りです(Windows 10/11を想定)。

  1. 「システムのプロパティ」を開く: スタートボタンを右クリックし、「システム」を選択します。開いたウィンドウの左側メニューから「システムの詳細設定」をクリックします。
  2. 「環境変数」ダイアログを開く: 「システムの詳細設定」ウィンドウの下部にある「環境変数(N)…」ボタンをクリックします。
  3. ユーザー環境変数またはシステム環境変数の「Path」を選択:
    • ユーザー環境変数: 現在ログインしているユーザーのみがFFmpegを使えるようにする場合。通常はこちらで十分です。上段のユーザー環境変数リストから「Path」を選択します。もし「Path」が存在しない場合は、「新規」ボタンをクリックして「変数名」に Path、「変数値」にFFmpegのbinフォルダのパスを入力します。
    • システム環境変数: コンピュータ上のすべてのユーザーがFFmpegを使えるようにする場合。下段のシステム環境変数リストから「Path」を選択します。管理者権限が必要です。
  4. 「編集」ボタンをクリック: 「Path」を選択した状態で「編集(I)…」ボタンをクリックします。
  5. FFmpegのbinフォルダのパスを追加:
    • 開いた「環境変数名の編集」ダイアログで、「新規(N)」ボタンをクリックします。
    • FFmpegを解凍したフォルダの中にある bin フォルダのフルパスを入力します。例えば、C:\ffmpeg\ffmpeg-6.0-full_build\bin のようになります。
    • 入力したら、Enterキーを押して確定します。
    • 重要: 複数のパスがリスト表示されていることを確認してください。誤って既存のパスを上書きしないように注意が必要です。
  6. 変更を保存: 「OK」ボタンを複数回クリックして、開いているすべてのダイアログ(環境変数、システムのプロパティなど)を閉じます。
  7. 新しいコマンドプロンプト/PowerShellを開く: 環境パスの変更は、設定を行った後に新たに開いたコマンドプロンプトやPowerShellのウィンドウに反映されます。設定前に開いていたウィンドウではFFmpegコマンドは認識されません。
  8. 設定の確認: 新しく開いたコマンドプロンプトまたはPowerShellで、以下のコマンドを入力して実行します。

    cmd
    ffmpeg -version

    FFmpegのバージョン情報や設定オプションが表示されれば、環境パスの設定は成功です。もし 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)

  1. 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

  2. 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

  3. 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

  4. 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ピクセルオフセットした位置を指定しています。
  5. 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)

  1. 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

  2. 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 -formatsffmpeg -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 でのトリミングや結合、複数の入力を扱う場合に注意が必要です。assincitsoffset といったオプションで調整できる場合もありますが、原因特定と解決は難しい場合があります。
    • ファイルサイズが大きすぎる/小さすぎる: ビットレートや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!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール