よく使うコマンド一覧
コマンド例 | 説明 |
---|---|
$ 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
オプションで指定する時間はトリミングする長さを表し、終了時刻ではないことに注意してください。