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:赤色成分の差分信号
イマイチ分からんのですが、pullupの書式として例えばoptionのsbを使う場合の記載例等があれば助かります…
ffplay -i input -vf “pullup:sb:1” -r 24000/1001
でいいのか
ffplay -i input -vf “pullup sb1” -r 24000/1001
なのか…どっちでやってもエラーが出ないので分からんのですorz
フィルタにオプションを適応するのに最初は = でつないで次から : でつなぎ、別フィルタは , でつなげます
ffplay -i input -vf pullup=sb=1,fps=24000/1001
https://ffmpeg.org/ffmpeg-filters.html#Filtergraph-syntax-1
ffplay は出力オプションに -r が使えなかったので直した
有難う御座います
使っていて未だに全く理解できてない状態なので助かりました!