映像を指定座標に切り取るcropフィルタの使い方。出力解像度はフレーム毎に変更できないがクロップする場所はフレーム毎に変更できる。

基本コマンド

中央から縦横100ピクセルにクロップする
ffmpeg -i input -vf crop=w=100:h=100 output
ffplay -i input -vf crop=100:100

左上からクロップするにはx、yを0にする
ffmpeg -i input -vf crop=w=100:h=100:x=0:y=0 output
ffplay -i input -vf crop=100:100:0:0

左から1フレーム1ピクセル毎に移動する
ffmpeg -i input -vf crop=w=100:h=100:x=n output
ffplay -i input -vf crop=100:100:n

シネマスコープの1080pで上下についた黒枠を取り除く。
ffmpeg -i input -vf crop=w=1920:h=816:x=0:y=132 output
ffplay -i input -vf crop=1920:816:0:132

中央を切り取って半分程度の解像度にする。
ffmpeg -i input -vf crop=0.7*iw:0.7*ih:0.15*in_w:0.15*ih output
ffplay -i input -vf crop=0.7*iw:0.7*ih:0.15*in_w:0.15*ih

公式ドキュメント:FFmpeg Filters Documentation : crop

オプション

  • out_w, w[string]
    出力解像度の横幅
    既定値:iw
  • out_h, h[string]
    出力解像度の縦幅
    既定値:ih
  • x[string]
    クロップする場所の横座標の指定。評価式が使える
    既定値:(in_w-out_w)/2
  • y[string]
    クロップする場所の縦座標の指定。評価式が使える
    既定値:(in_h-out_h)/2
  • keep_aspect[boolean]
    出力解像度のアスペクト比を入力した映像のアスペクト比に保持する。0は保持しない
    既定値:0
  • exact[boolean]
    クロマサブサンプルによっては数値が丸められて指定した値でクロップしないのを指定した値でクロップする
    既定値:0

x、y に使える評価式

ffmpeg で使える評価式を使って複雑な計算ができる。

  • x:xで指定した値
  • y:yで指定した値
  • in_w, iw:入力横幅
  • in_h, ih:入力縦幅
  • out_w, ow:横幅(out_w, w)で指定した値
  • out_h, oh:縦幅(out_h, h)で指定した値
  • hsu:水平方向のクロマサブサンプル値。yuv422pなら2
  • vsub:垂直方向のクロマサブサンプル値。yuv422pなら1
  • n:0から始まるフレーム番号
  • pos:映像のバイトサイズの位置。不明ならNAN
  • t:0から始まるタイムスタンプ秒。最初のフレームの経過時間が最初の値になる。不明ならNAN

上下左右に切り取る

左半分
crop=iw/2:ih:0:0
右半分
crop=iw/2:ih:iw/2:0
上半分
crop=iw:ih/2:0:0
下半分
crop=iw:ih/2:0:ih/2

3 thoughts on “映像を指定座標に切り取る crop

  • 匿名

    ここのFFmpegの使い方のページ(https://nico-lab.net/about-ffmpeg/)のフィルタの記述方法の項でオプション名を省略するときは”ffmpeg -h filter=crop”の順で引数を指定するとありました。こちらの記事の記述のほうが正しいのか、また out_wとw、out_hとhはそれぞれエイリアスの関係にあるということでよいのでしょうか。”ffmpeg -h filter=crop”の表示が別行で異なるオプションなのか混乱してます。

    • admin

      > また out_wとw、out_hとhはそれぞれエイリアスの関係にあるということでよいのでしょうか。
      その通りです。ソースコードを見るとわかります。
      https://github.com/FFmpeg/FFmpeg/blob/master/libavfilter/vf_crop.c#L363
      たとえば、out_wとwはOFFSET(w_expr)が同じになっています。

      https://nico-lab.net/about-ffmpeg/)
      > 指定にはオプション名を指定するのとしないのがあり、指定しないほうは`ffmpeg -h filter=フィルタ名`で表示される順番に指定しなければならない。
      を以下のように直しました。

      指定にはオプション名を指定するのとしないのがあり、指定しないほうは`ffmpeg -h filter=フィルタ名`で表示される順番に指定しなければならないが同じ意味のオプションはまとめて一つの順番とする。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)