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
よくある使い方の流れ
ffmpeg -i input.mp4 -hide_bannerで、元のファイルの情報を見るffmpegで目的の形式に変換する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 のように、元のフレームレートを指定して再エンコードします。