斜めから撮った写真や動画をまっすぐから見たように修正する perspective
フィルタの使い方。修正部分だけを取り出すには crop
フィルタを併用する。crop
フィルタを併用しないと出力解像度が元の解像度のままになりアスペクト比がおかしくなる。
基本コマンド
既定値のコマンドだと何も変化しない
ffmpeg -i nput -vf perspective=x0=0:y0=0:x1=W:y1=0:x2=0:y2=H:x3=W:y3=H:interpolation=linear:sense=source:eval=int ouput
ffmpeg -i nput -vf perspective=0:0:W:0:0:H:W:H:0:0:0 ouput
ffplay -i nput -vf perspective=0:0:W:0:0:H:W:H:0:0:0
オプション
- x0, y0, x1, y1, x2, y2, x3, y3[string]
左から順番に左上、右上、左下、右下の横と縦の座標指定-
以下の評価式が使える
- W
入力フレームの横幅 - H
入力フレームの縦幅 - in
入力フレーム数 - on
出力フレーム数
- W
- interpolation[int]
補間方法- 0, linear:既定値
- 1, cubic
- sense[int]
補間方法の調整- 0, source:指定した座標の枠内を修正。既定値
- 1, destination:画面全体を指定した座標の枠内に修正して枠外で補完
- eval[int]
座標の評価式の設定- 0, init:入力した時点で固定。既定値
- 1, frame:フレーム毎に評価する。in, on で使う
コマンド解説
GIMPの事フリーソフトや思って舐めてた、すごいなこれ…
遠近法ツール>逆変換からパースに沿って四隅選択するだけで正面画に変換されよる pic.twitter.com/dU0XOdWiBN— はとむぎもこもこ (@htmg_mokomoko) July 6, 2016
で GIMP が紹介されていたがこれを ffmpeg で行う。
ffmpeg -i "Cmq2kPgVUAQFwEe.jpg" -vf crop=614-118:1088-99:118:99,perspective=0:0:595-118:127-99:228-118:1088-99:614-118:893-99 perspective.jpg
解説すると修正する対象の4隅の座標を画像編集ツールなどで調べる必要がある。それぞれの座標は順番に 118×99, 595×127, 228×1088, 614×893 となる。修正する部分だけを出力するには最初に crop
フィルタで対象部分を切り取る。1, 2 引数が出力解像度。3, 4 引数が左からの座標指定。つまり 1 引数は右幅と左幅を引いて出力の横幅を計算し、同様に縦幅も計算している。次に 3, 4 引数は左上の座標を指定して左上から出力解像度だけ切り取る。
次に perspective
フィルタでは、左上が 0x0 の位置になりそこから右上、左下、右下の座標は左上の座標が 0x0 になった分だけずらすことになる。そして出力ファイルを指定する。
ffmpeg -i Cmq2kPgVUAQFwEe.jpg -vf crop=614-118:1088-99:118:99,perspective=0:0:595-118:127-99:228-118:1088-99:614-118:893-99:1:1 perspective-destination.jpg
ffmpeg -i Cmq2kPgVUAQFwEe.jpg -vf perspective=118:99:595:127:228:1088:614:893:1:1 no-crop-perspective-destination.jpg
ffmpeg -i Cmq2kPgVUAQFwEe.jpg -vf perspective=118:99:595:127:228:1088:614:893:1:1,crop=614-118:1088-99:118:99 perspective-destination-crop.jpg