30000/1001fpsのインターレースの動画からアニメの24000/1001fpsのプログレッシブ動画にするためにインターレースを解除、逆テレシネする。フレームを間引くにはいくつかの方法があるので目的に合わせてフィルタを使う。
ポイントはフレームを間引く必要があるかどうかと、テロップなどの片フィールド補間がいるかどうか。フレーム間引きするにはdecimate
を併用し、pullup
、detelecine
には必要ない。
片フィールドを補間した 60pはw3fdif
だけ使うのが手軽だが、他にもyadif
とbwdif
、nnedi
、estdif
もBob化できる。yadif
、bwdif
、estdif
の第1引数を1にする必要があるのは片フィールド補間しBob化する場合である。
逆テレシネするならfieldmatch
フィルタを使って、逆テレシネ漏れにestdif
フィルタの併用がよさそう。毎フレームのフィールドが動く映像は逆テレシネはせずにbwdif
フィルタで片フィールド補間するか、30pにするのが無難にきれいになる。
片フィールドを補間しない場合にnnedi
は速度の割にはあまり品質はよくないかもしれない。
インターレース解除、または逆テレシネとリサイズを併用する場合は、インターレース解除、または逆テレシネした後にリサイズする。
yadif,scale=1280:-2
フレームを間引くのならインターレース解除した後に行うことでリサイズするフレーム数を減らせて処理がはやくなる。
yadif,decimate,scale=1280:-2
リサイズする scale
Zライブラリを使ったリサイズフィルタ zscale
24pの処理速度比較
8 < 7 < 6 < 5 << 4 << 3 < 2 << 1
- フィールドパターンを手動の逆テレシネして、間引きも手動指定
“separatefields,shuffleframes=0 1 4 3 6 5 8 9 -1 -1,setfield=tff,weave,setpts=(N*1001)/(24000*TB),setparams=field_mode=prog” -r 24000/1001 -fps_mode cfr - フィールドパターンを手動の逆テレシネして、間引きは自動
detelecine=start_frame=3 - 手動インターレース解除して、間引きも手動指定
fieldhint=hint.txt:pattern,select=mod(n-1\,5),fps=24000/1001 - 高速なプログレVFR(
-r
で固定フレームにできる)(速度を重視)
pullup -r 24000/1001 - 意外に速くて高品質で 24fps化(品質と速度を両立)
fieldmatch,decimate - 一般的な 24fps化(品質と速度を両立)
yadif=0:-1:1,decimate - yadif より高画質(常に高画質とは限らない)な 24fps化(速度より品質重視)
bwdif=0:-1:1,decimate - IVTCとyadifを併用して24fps化(速度より品質重視)
fieldmatch=mode=pc:cthresh=40,yadif=0:-1:1,decimate - 一般的なインターレース解除(品質と速度を両立)
yadif=0:-1:1 - yadif より高画質(常に高画質とは限らない)
bwdif=0:-1:1 - テロップなど60pのBob
yadif=1:-1:1 - テロップなど60pのBob
bwdif=1:-1:1 - テロップなど60pのBob
w3fdif=1:0 - テロップなど60pのBob(かなり遅いが一番高画質)
nnedi=deint=1:field=af
関連記事
- インターレースを解除する bwdif
- インターレース解除フィルタ w3fdif
- 単純な逆テレシネフィルタdetelecine
- 手動でフィールド処理を行う fieldhint
- ffmpeg でのフレームレート設定の違い
- 高速で万能な逆テレシネフィルタ pullup
- フレームを間引くdecimate、mpdecimate
- デノイズとインターレース解除ができる pp
- 一番メジャーなインターレース解除フィルタ yadif
- 指定フレーム毎に順番を入れ換える shuffleframes
- 各フィールドをフレームに変換する separatefields
- 前後フィールドを考慮して逆テレシネするfieldmatch
- QSV でインターレース解除 : qsv 対応の ffmpeg をつくる
- エッジ傾斜を考慮したインターレース解除フィルタestdif
- 2つの連続したフィールドを1つのフレームで出力する weave
- ニューラルネットワーク予測を使ってインターレース解除する nnedi
- Raspberry Pi 4 Model Bの64bit OSでインタレ解除してHWエンコードする
- vmaf スコアをインターレース解除とデノイズのフィルタを使って調べてみた
ロゴ消しはこちら:ffmpeg できれいにロゴを消す方法
一定周期ではない重複フレームを除く場合はmpdecimate
フィルタを使う。
Remove sequentially duplicate frames when using FFmpeg – Stack Overflow
映像はプログレッシブなのに、インターレースのフラグを立てるにはfake-interlacedというx264の設定がある。
猫科研究所 – x264-changelog-jp r1500-r1599
これは全てのフレームをプログレッシブでエンコードするが、ストリームにはインターレースであるとしてフラグを立てる。
これは有効な25pと30pのBlu-Rayストリームをエンコードすることを可能にする。
コマンド例
ffmpeg -f lavfi -i color=black:r=24000/1001:d=10,drawtext=fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text='%{n}':fontcolor=yellow:x=(w-tw)/2:y=(h-th)/2:fontsize=64 -x264-params fake-interlaced=1 fake_interlaced.mp4
インターレースのままエンコードする。
ffmpeg -f lavfi -i color=black:r=24000/1001:d=10,drawtext=fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text='%{n}':fontcolor=yellow:x=(w-tw)/2:y=(h-th)/2:fontsize=64,telecine -flags +global_header+ilme+ildct -weightp 0 interlaced.mp4