3ツールの全体像

FFmpeg には、次の3つのコマンドラインツールが含まれています(公式 About)。

ツール 主な役割 主な用途
ffmpeg 変換・エンコード・フィルタ処理・ストリーミング ファイルの変換、動画の加工
ffprobe ファイルの中身を調べて表示 ファイル情報の確認、スクリプトでの利用
ffplay SDL を使った再生 動作確認、開発中のテスト

ffmpeg — 変換・処理の主力ツール

ffmpeg は、3つの中でいちばん機能が多いツールです。公式ドキュメント では「汎用のメディア変換ツール」と説明されていて、さまざまな入力(ライブのキャプチャ機器や録画機器を含む)を読み込み、フィルタをかけ、多くの形式にトランスコード(形式の変換)できます。

基本構文

ffmpeg [グローバルオプション] {[入力オプション] -i 入力URL} ... {[出力オプション] 出力URL} ...

書き方の詳細は「FFmpegコマンドの基本構文」にあります。

代表的な使用例

入れ物(コンテナ)だけを変える(ストリームコピー):

ffmpeg -i input.mkv -c copy output.mp4

圧縮方式(コーデック)を変える:

ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4

フィルタで解像度を変える:

ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4

ffprobe — ファイル情報の解析ツール

ffprobe は、ファイルに入っている映像・音声(ストリーム)や、ファイル形式(コンテナ)の情報を調べるツールです。公式ドキュメント では「ストリームの情報を集め、人にもプログラムにも読みやすい形で出力する」と説明されています。

ffprobe gathers information from multimedia streams and prints it in human- and machine-readable fashion.

基本構文

ffprobe [オプション] 入力URL

主要オプション

オプション 説明
-show_streams ストリームごとの詳しい情報を表示
-show_format ファイル形式(コンテナ)の情報を表示
-of json JSON形式で出力(スクリプトで読むとき向け)
-select_streams v:0 特定のストリームだけを選ぶ(例: 映像の1本目)
-v quiet 余分なログを消して、データだけを出す

使用例

ファイルの基本情報を見る(いちばんよく使う方法):

ffmpeg -i でも同じような情報が表示されます。このとき変換は行われません。

ffmpeg -i input.mp4 -hide_banner

ストリーム情報を JSON で出す(スクリプト向け):

ffprobe -v quiet -show_streams -of json input.mp4

映像ストリームだけを表示:

ffprobe -v quiet -show_streams -select_streams v input.mp4

ファイル全体(コンテナ)の情報だけを表示:

ffprobe -v quiet -show_format -of json input.mp4

ffprobe の出力例

{
  "streams": [
    {
      "index": 0,
      "codec_name": "h264",
      "codec_type": "video",
      "width": 1920,
      "height": 1080,
      "r_frame_rate": "30/1"
    },
    {
      "index": 1,
      "codec_name": "aac",
      "codec_type": "audio",
      "sample_rate": "48000",
      "channels": 2
    }
  ]
}

ffplay — テスト用メディアプレーヤー

ffplay は、SDL(画面表示と音声出力のためのライブラリ)を使った簡単なプレーヤーです。公式ドキュメント では「主に FFmpeg の各種 API を試すための道具として使われる」と説明されています。

FFplay is a very simple and portable media player using the FFmpeg libraries and the SDL library. It is mostly used as a testbed for the various FFmpeg APIs.

基本構文

ffplay [オプション] [入力URL]

主なキーボードショートカット

キー 動作
q / ESC 終了
f 全画面の切り替え
p / Space 一時停止・再開
m ミュートの切り替え
9 / 0 音量を下げる / 上げる
← / → 10秒戻る / 進む
↓ / ↑ 1分戻る / 進む
s 1フレームずつ進める

主な用途

  • エンコードしたファイルを、すぐに再生して確かめたいとき
  • フィルタをかけた結果を見たいとき
  • ライブ配信を受信できるか試すとき

Note: ffplay は映像を画面に表示するため、画面のない環境(サーバーや CI)では、そのままでは動きません。-nodisp で止められるのは映像の表示だけです。音声は再生されるので、音を出せる環境が必要です。

使い分けの指針

ファイル情報を確認したい
  → ffprobe -show_streams input.mp4
     または ffmpeg -i input.mp4 -hide_banner

ファイルを変換・エンコードしたい
  → ffmpeg -i input.mp4 output.mkv

変換結果をその場で再生確認したい
  → ffplay output.mp4

よくある使い方の流れ

  1. ffmpeg -i input.mp4 -hide_banner で、元のファイルの情報を見る
  2. ffmpeg で目的の形式に変換する
  3. ffplay output.mp4 で、変換したファイルを再生して確かめる

ffmpeg で情報表示する際の注意

ffmpeg -i input.mp4 は、ファイル情報を表示したあと、エラーで終わります(終了コード 1)。出力ファイルを指定していないためで、最後に At least one output file must be specified と表示されます。情報を見るだけなら、-hide_banner(最初のバージョン表示を省くオプション)を付けてエラーは無視するか、ffprobe を使ってください。

よくある質問

ffmpeg ではなく ffprobe を使うべきタイミングは?

ffprobe はファイルを読むだけで、書き換えません。メタデータを調べるとき、情報を JSON ファイルにして動画と一緒に保存するとき、うっかり再エンコードすると困るスクリプトの中で使うときに向いています。

通常メディアプレーヤーと比べて ffplay の何が違う?

ffplay は FFmpeg と同じデコーダとフィルタを使い、タイムスタンプも同じように扱います。そのため、フィルタの結果を書き出す前に確かめるのに向いています。

JSON でメタデータを取りたい

ffprobe -v quiet -of json -show_format -show_streams input.mp4 を実行します。-show_chapters を足すとチャプター、-show_packets を足すとパケット(データの小さな単位)ごとの情報も出ます。

ffplay で自動再生スクリプト作れる?

作れます。-autoexit -nodisp -loglevel error を付けると、画面を出さずに音声だけを再生し、最後まで再生したら自動で終了します。音を出せる環境が必要で、音声のないファイルでは何も再生されません。フレームを静止画として正確に取り出したいときは、ffmpeg を使ってください。

ffprobe の duration が N/A になる

パイプに書き出した MKV や、生の H.264 ストリーム(.h264)のように、ファイルに長さが記録されていないと N/A になります。パイプに書き出した MKV は、ffmpeg -i input.mkv -c copy output.mkv のようにファイルへ書き直すと、長さが記録されます。生の H.264 はフレームごとの時刻を持たないため、コピーでは失敗したり、再生の順番が乱れたりすることがあります。そのときは ffmpeg -framerate 30 -i input.h264 -c:v libx264 output.mp4 のように、元のフレームレートを指定して再エンコードします。