ffmpeg 3.2でリリースしたビデオフィルタ。エッジ検出フィルタに単体ではedgedetectfrei0rsobelがあり、カーネルを指定するconvolutionでもエッジ検出ができるが、今回のこれらのフィルタはedgedetectよりもエッジ部分の線が太くconvolutionよりも手軽なのでマスクするのにも便利。sobelprewittrobertsはカーネルが少し異なるがオプションは同じである。

基本コマンド

ffmpeg -i input -vf sobel=planes=15:scale=1:delta=0 output
ffmpeg -i input -vf sobel=15:1:0 output
ffplay -i input -vf sobel=15:1:0

オプション

sobelprewittのオプションは同じ。

  • planes[int]
    フィルタを当てるチャンネル指定
    背景黒とエッジに色をつけるには Y だけに当てる 1 を指定する
    詳しくはffmpeg について | チャンネルの順番と注意点を参照
    既定値:15(すべてのチャンネル)
    範囲:0 から 15 まで
  • scale[float]
    フィルタを当てる乗算値の指定
    既定値:1
    範囲:0 から 65535 まで
  • delta[float]
    フィルタを当てる加算値の指定
    既定値:0
    範囲:-65535 から 65535 まで

サンプル画像

アニメ画像

アニメ「艦隊これくしょん~艦これ~」の11話の大和出撃のシーン

アニメ画像 sobel=1(1st plane だけフィルタを当てている)

アニメ画像 prewitt=1(1st plane だけフィルタを当てている)

実写画像

実物大の戦艦大和

実写画像 sobel=1(1st plane だけフィルタを当てている)

実写画像 prewitt=1(1st plane だけフィルタを当てている)

opencl を使う

opencl を使ってprewitt_opencl, sobel_openclフィルタを使う。

opencl が使えれば以下のコマンドを実行すると対応 CPU、または GPU が表示される。
ffmpeg -hide_banner -v verbose -init_hw_device opencl

出力コマンド例。

ポイントは opencl を使うデバイスを上の例では 0.0 から 1.1 から指定する。能力によって処理速度が大きく異なる。オプション指定は通常と同じ。

コマンド例。
ffmpeg -init_hw_device opencl=ocl:1.0 -filter_hw_device ocl -i input -vf hwupload,prewitt_opencl output
ffmpeg -init_hw_device opencl=ocl:1.0 -filter_hw_device ocl -i input -vf hwupload,sobel_opencl output

通常のフィルタに切り替えるにはhwdownload,format=yuv420pフィルタを挟む。
ffmpeg -init_hw_device opencl=ocl:1.0 -filter_hw_device ocl -i input -vf hwupload,sobel_opencl,hwdownload,format=yuv420p,lutyuv=val:128:128 output

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

コメントを残す

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

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