pullupフィルタは逆テレシネフィルタで、ハードテレシネや24000/1001fpsプログレッシブや 30000/1001fpsプログレッシブの混在した映像に対応している。未来フレームを参照するように設計されていてパターン周期が不定期でも正しく逆テレシネし、不要な重複フィールドを自動で間引く。片フィールド補間は行わないのでその部分の映像はなめらかにはならない。入力フレームレートが29.97fpsの場合は24000/1001fpsに、30fpsや(まれに)テレシネされた25fpsの場合は24fpsになる。

pullupフィルタの後のPTS間隔はフレームを間引く前と変わらないVFRになり、そのまま出力するとフレームレートが元の映像のままになるので間引かれた後のフレームレートを指定することでPTS間隔も修正される。

ffmpeg でインターレース解除
映像と音声の pts を扱う setpts, asetpts

基本コマンド

日本で一般的なNTSCを24000/1001fpsプログレッシブに変換する。
2016年4月8日 ffplay は出力オプションに-rが使えなかったので直した。
ffmpeg -i input -vf pullup -r 24000/1001 output
ffplay -i input -vf pullup,fps=24000/1001

再生だけならPTSを修正するだけでもよい。
ffplay -i input -vf pullup,setpts=N/((24000/1001)*TB)

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

オプション

変更できるオプションはいくつかあるが初期設定で重複フレームがなければ変更しない方が最善の結果になる。

  • jl[int]:左端を無視する設定。1ユニットあたり8ピクセル
    範囲:0からint_maxまで
    既定値:1
  • jr[int]:右端を無視する設定。1ユニットあたり8ピクセル
    範囲:0からint_maxまで
    既定値:1
  • jt[int]:上部を無視する設定。1ユニットあたり2ライン
    範囲:0からint_maxまで
    既定値:4
  • jb[int]:下部を無視する設定。1ユニットあたり2ライン
    範囲:0からint_maxまで
    既定値:4
  • sb[int]:処理の厳格さ
    1は重複フレームを減らすが、あまり動いていない映像の場合に重複フレームと判断して間引くかもしれない。-1は処理を簡略がするがインターレースが残るかもしれない
    範囲:-1から1まで
    既定値:0
  • mp[int]:メトリックチャンネルを指定する。輝度差分が少ない映像の場合には u, v を指定するといいかもしれない
    • 0, l:輝度信号。既定値
    • 1, u:青色成分の差分信号
    • 2, v:赤色成分の差分信号

3 thoughts on “高速で万能な逆テレシネフィルタ pullup

  • やらかし

    イマイチ分からんのですが、pullupの書式として例えばoptionのsbを使う場合の記載例等があれば助かります…
    ffplay -i input -vf “pullup:sb:1” -r 24000/1001
    でいいのか
    ffplay -i input -vf “pullup sb1” -r 24000/1001
    なのか…どっちでやってもエラーが出ないので分からんのですorz

コメントを残す

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

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