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

リサイズする scale
映像に余白を追加する pad

基本コマンド

中央から縦横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

公式ドキュメント: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
  • 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から始まるタイムスタンプ秒。1フレーム目の経過時間が最初の値になる。不明ならNAN

2 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=フィルタ名`で表示される順番に指定しなければならないが同じ意味のオプションはまとめて一つの順番とする。

コメントを残す

メールアドレスが公開されることはありません。

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