ffmpegのコマンド一覧

よく使うコマンド一覧

コマンド例説明
$ 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 mpeg4MPEG-4形式で動画をエンコードします。
H.264-c:v libx264H.264形式で動画をエンコードします。高圧縮で高品質な映像を実現します。
H.265-c:v libx265H.265形式で動画をエンコードします。H.264よりも高い圧縮効率を持ち、同等品質でファイルサイズを削減します。
VP9-c:v libvpx-vp9VP9形式で動画をエンコードします。高圧縮で高品質な映像を提供しますが、エンコードには時間がかかります。
AV1-c:v libaom-av1AV1形式で動画をエンコードします。高圧縮で高品質な映像を提供しますが、エンコードには時間がかかります。
MOV-f movQuickTimeコンテナ形式で動画を保存します。
AVI-f aviAVIコンテナ形式で動画を保存します。
MKV-f matroskaMatroskaコンテナ形式で動画を保存します。
MP4-f mp4MP4コンテナ形式で動画を保存します。
WebM-f webmWebMコンテナ形式で動画を保存します。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.mp4input2.mp4という2つの入力ファイルを結合して1つの動画にしています。

-i input1.mp4 -i input2.mp4入力ファイルとしてinput1.mp4input2.mp4を指定します。
-filter_complex複数のフィルターを組み合わせて処理するためのオプションです。
“[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]”concatフィルターを使用して2つの動画を結合します。nパラメータで入力ストリームの数を指定し、vaパラメータでビデオとオーディオのストリームを指定します。[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.jpgimage002.jpgimage003.jpgなどの連番画像ファイルを使用して動画を作成します。

オプション説明
-framerate 30フレームレートを30fps(フレーム/秒)に設定します。連番画像の表示速度を制御します。
-i image%03d.jpg入力ファイルとしてimage001.jpgimage002.jpgimage003.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.pngoutput_002.pngoutput_003.pngなどとして書き出されます。
-q:v 2pngではなく、JPEG形式で書き出す場合、品質を制御するためのオプションです。値が低いほど高品質になります。一般的な範囲は1-31で、2は中程度の品質を示します。

このコマンドを実行すると、指定の区間のフレームがPNG連番画像として書き出されます。

注意点として、-ssオプションを入力ファイルより前に配置することで、指定の開始位置に正確にトリミングを行います。また、-tオプションで指定する時間はトリミングする長さを表し、終了時刻ではないことに注意してください。