よく使うコマンド一覧
| コマンド例 | 説明 |
|---|---|
$ ffmpeg -version | バージョンを表示 |
$ ffmpeg -i input.mp4 output.avi | 動画の変換 |
$ ffmpeg -i input.mp4 -vn output.mp3 | 音声の抽出 |
$ ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 output.mp4 | 動画のトリミング |
$ ffmpeg -i input.mp4 -vf "crop=640:480:0:0" output.mp4 | 動画のクロップ |
$ ffmpeg -i input1.mp4 -i input2.mp4 -c copy -map 0 -map 1 output.mp4 | 動画の結合 |
$ ffmpeg -framerate 24 -i %05d.png -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4 | 連番画像から動画を作成 |
$ ffmpeg -i input.mp4 -ss 00:00:05 -t 00:00:10 -vf "fps=24" output_%03d.png | 動画から連番画像を作成 |
動画の変換オプション
例:
$ ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4
| -i input.mp4 | 入力ファイルとしてinput.mp4を指定します。 |
| -c:v libx264 | ビデオをH.264コーデックでエンコードします。 |
| -crf 23 | ビデオの品質を制御するためのオプションです。値が低いほど高品質になります。通常の範囲は0-51で、18-28の間の値が一般的です。 |
| -c:a aac -b:a 128k | 音声をAACコーデックでエンコードし、ビットレートを128kbpsに設定します。 |
| output.mp4 | 出力ファイルの名前をoutput.mp4に設定します。 |
主な動画フォーマット一覧
| フォーマット | コマンドオプション | 説明 |
|---|---|---|
| MPEG-4 | -c:v mpeg4 | MPEG-4形式で動画をエンコードします。 |
| H.264 | -c:v libx264 | H.264形式で動画をエンコードします。高圧縮で高品質な映像を実現します。 |
| H.265 | -c:v libx265 | H.265形式で動画をエンコードします。H.264よりも高い圧縮効率を持ち、同等品質でファイルサイズを削減します。 |
| VP9 | -c:v libvpx-vp9 | VP9形式で動画をエンコードします。高圧縮で高品質な映像を提供しますが、エンコードには時間がかかります。 |
| AV1 | -c:v libaom-av1 | AV1形式で動画をエンコードします。高圧縮で高品質な映像を提供しますが、エンコードには時間がかかります。 |
| MOV | -f mov | QuickTimeコンテナ形式で動画を保存します。 |
| AVI | -f avi | AVIコンテナ形式で動画を保存します。 |
| MKV | -f matroska | Matroskaコンテナ形式で動画を保存します。 |
| MP4 | -f mp4 | MP4コンテナ形式で動画を保存します。 |
| WebM | -f webm | WebMコンテナ形式で動画を保存します。Web上での再生に適しています。 |
動画のトリミング
例:
$ ffmpeg -i input.mp4 -ss 00:01:05 -t 00:00:10 -c copy output.mp4
動画の1分5秒から10秒間を無劣化でトリミングする。
| -ss 00:01:05 | トリミングの開始位置を指定します。フォーマットはHH:MM:SSや秒数など複数の形式で指定できます。ここでは、動画の1分5秒からトリミングを開始します。 |
| -t 00:00:10 | トリミングする時間の長さを指定します。HH:MM:SSや秒数などで指定します。左の例では、10秒間のトリミングを行います。 |
| -to 00:02:10 | トリミングの終了位置を指定します。HH:MM:SSで指定します。左の例では、開始位置から2分10秒までのトリミングを行います。 |
| -c copy | 再エンコードせずにそのまま切り出します。無劣化かつ早いので、エンコードの必要がなければ基本つけます。 |
動画のクロップ
例:
$ ffmpeg -i input.mp4 -vf "crop=300:200:0:0" output.mp4
動画の左上から幅300ピクセル、高さ200ピクセルの領域をクロップする。
| -vf “crop=300:200:0:0” | ビデオフィルターグラフを指定します。cropフィルタを使用してクロップの設定を行います。幅:高さ:X座標:Y座標の形式で指定します。この例では左上の幅300ピクセル、高さ200ピクセルの領域をクロップしています。 |
動画の結合オプション
例:
$ ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mp4
この例では、input1.mp4とinput2.mp4という2つの入力ファイルを結合して1つの動画にしています。
| -i input1.mp4 -i input2.mp4 | 入力ファイルとしてinput1.mp4とinput2.mp4を指定します。 |
| -filter_complex | 複数のフィルターを組み合わせて処理するためのオプションです。 |
| “[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]” | concatフィルターを使用して2つの動画を結合します。nパラメータで入力ストリームの数を指定し、vとaパラメータでビデオとオーディオのストリームを指定します。[outv]と[outa]は出力のビデオとオーディオストリームを示しています。※ |
| -map “[outv]” -map “[outa]” | 結合したビデオとオーディオストリームを指定します。 |
※concatフィルターについて
[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa] は、concatフィルターを使用して動画の結合を行うためのフィルターグラフを表しています。以下では、このフィルターグラフの詳細な説明を行います。
[0:v]: 最初の入力ファイルのビデオストリームを参照します。[0:a]: 最初の入力ファイルのオーディオストリームを参照します。[1:v]: 2番目の入力ファイルのビデオストリームを参照します。[1:a]: 2番目の入力ファイルのオーディオストリームを参照します。concat=n=2:v=1:a=1:concatフィルターを使用して結合を行います。n=2: 入力ストリームの数を2つ指定します。v=1: 結合されたビデオストリームを生成します。a=1: 結合されたオーディオストリームを生成します。
[outv]: 結合されたビデオストリームを[outv]というラベルで出力します。[outa]: 結合されたオーディオストリームを[outa]というラベルで出力します。
このフィルターグラフによって、2つの入力動画のビデオストリームとオーディオストリームが結合され、結果として1つのビデオストリームと1つのオーディオストリームが生成されます。そして、-mapオプションを使用してそれぞれの結果を指定し、最終的な出力ファイルに保存します。
連番画像から動画を作成
例:
$ ffmpeg -framerate 30 -i image%03d.jpg -start_number 60 -c:v libx264 -crf 18 -pix_fmt yuv420p output.mp4
この例では、image001.jpg、image002.jpg、image003.jpgなどの連番画像ファイルを使用して動画を作成します。
| オプション | 説明 |
|---|---|
| -framerate 30 | フレームレートを30fps(フレーム/秒)に設定します。連番画像の表示速度を制御します。 |
| -i image%03d.jpg | 入力ファイルとしてimage001.jpg、image002.jpg、image003.jpgなどの連番画像ファイルを指定します。%03dはゼロパディングされた3桁の連番を表します。 |
| -start_number 1 | 連番の最初の番号を指定します。 |
| -c:v libx264 | ビデオをH.264コーデックでエンコードするためのオプションです。 |
| -crf 18 | ビデオの品質を制御するためのオプションで、値が低いほど高品質になります(範囲は0-51)。この例では品質レベル18を指定しています。 |
| -pix_fmt yuv420p | 出力のピクセルフォーマットをYUV420Pに設定します。これは一般的なピクセルフォーマットであり、互換性が高いです。 |
動画から連番画像を書き出し
$ ffmpeg -i input.mp4 -ss 00:00:05 -t 00:00:10 -vf "fps=24" output_%03d.png
この例では、input.mp4という入力ビデオファイルから、00:00:05から00:00:15の区間をPNG連番画像として書き出します。
| オプション | 説明 |
|---|---|
| -i input.mp4 | 入力ビデオファイルとしてinput.mp4を指定します。 |
| -ss 00:00:05 | トリミングの開始位置を指定します。ここでは00:00:05(5秒)からトリミングを開始します。 |
| -t 00:00:10 | トリミングする時間の長さを指定します。ここでは00:00:10(10秒)の区間をトリミングします。 |
| -vf “fps=24” | フレームレートを24fpsに設定するビデオフィルターグラフを指定します。ここでは24fpsの連番画像を書き出します。 |
| output_%03d.png | 出力ファイル名のパターンを指定します。%03dはゼロパディングされた3桁の連番を表します。各フレームはoutput_001.png、output_002.png、output_003.pngなどとして書き出されます。 |
| -q:v 2 | pngではなく、JPEG形式で書き出す場合、品質を制御するためのオプションです。値が低いほど高品質になります。一般的な範囲は1-31で、2は中程度の品質を示します。 |
このコマンドを実行すると、指定の区間のフレームがPNG連番画像として書き出されます。
注意点として、-ssオプションを入力ファイルより前に配置することで、指定の開始位置に正確にトリミングを行います。また、-tオプションで指定する時間はトリミングする長さを表し、終了時刻ではないことに注意してください。
