ffmpeg 3.2 でリリースしたビデオフィルタ。前後フレームから中間フレームを作り出すminterpolate
フィルタの使い方。無料でフレーム補間する方法には AviSynth+MvTools が一般的だが、もっと手軽に1コマンドでフレーム補間した動画を作ることができる。
基本コマンド
かなり負荷が高く、シングルスレッドしか働かないので出力解像度を小さくしないと ffplay ではプレビューがまともに動かない。
30fps の動画を 60fps にフレーム補間する
ffmpeg -i input -vf minterpolate=fps=60:mi_mode=mci:mc_mode=obmc:me_mode=bilat:me=epzs:mb_size=16:search_param=32:vsbmc=0:scd=fdiff:scd_threshold=5 output
ffmpeg -i input -vf minterpolate=60:2:0:1:8:16:32:0:1:5 output
2つの映像から映像補間した効果を作る例。
Motion Interpolation for Glitch Aesthetics using FFmpeg part 1 | Antonio Roberts
公式ドキュメント:FFmpeg Filters Documentation : minterpolate
基本コマンド
フレームレートを設定する以外に変更しない方が無難。
- fps[video_rate]
出力フレームレート。元の映像より少なくするとフレームを減らし、多くすると mi_mode に沿ってフレームを増やす - mi_mode[int]
モーション補間モード - 0, dup:重複フレーム
- 1, blend:前後フレームを平均する
- 2, mci:フレーム補間。既定値
- mc_mode[int]
モーション補正モード - 0, obmc:Overlapped block motion compensation。既定値
- 1, aobmc:Adaptive overlapped block motion compensation
- me_mode[int]
モーション推定モード - 0, bidir:前後フレームから推定
- 1, bilat:bilateral motion estimation。既定値
- me[int]
モーション推定のアルゴリズム - 1, esa:Exhaustive search algorithm。一番重たい
- 2, tss:Three step search algorithm
- 3, tdls:Two dimensional logarithmic search algorithm
- 4, ntss:New three step search algorithm
- 5, fss:Four step search algorithm
- 6, ds:Diamond search algorithm
- 7, hexbs:Hexagon-based search algorithm
- 8, epzs:Enhanced predictive zonal search algorithm。一番軽い。既定値
- 9, umh:Uneven multi-hexagon search algorithm
- mb_size[int]
マクロブロックサイズの指定。出力解像度の約数に合わせる。小さい値の方が動きの小さいモーション補間には効果的だが、本来映像に無いはずの部分に補間が入ることがある
既定値:16
範囲:4 から 16 まで - search_param[int]
モーション推定の探索パラメーター
既定値:32
範囲:4 から INT_MAX まで - vsbmc[int]
可変サイズの(マクロ)ブロックのモーション補間をするかの指定。有効にすると境界のぼけが少なくなる
既定値:0(無効)
範囲:0 から 1 まで - scd[int]
シーンチェンジ検出モード - 0, none:検出しない
- 1, fdiff:検出する。既定値
- scd_threshold[double]
シーンチェンジ検出モードの閾値
既定値:5
範囲:0 から 100 まで
初期設定でフレームレートを2倍の 60fps に補間し、解像度を2倍にしている
1.5GB制限のアカウントから投稿しているのでZenzaWatch : megalodon.jpで観るとオリジナルのフレーム補間した映像が観られるはず。Flash Player上でも再エンコードはされているが 60fps で観られる。きれいにフレーム補間できるわけではなく本来ないはずの部分に映像が載っていたり、映像が薄れたりしている。
説明のところvsmbcじゃなくてvsbmcじゃないですか?
指摘ありがとうございます。実装当時間違えていてそれを公式が直して、この記事が直してなかったようです。
https://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=0098eeaa62899136caf61aa76e3be2c198144ecc