30000/1001fpsのインターレースの動画からアニメの24000/1001fpsのプログレッシブ動画にするためにインターレースを解除、逆テレシネする。フレームを間引くにはいくつかの方法があるので目的に合わせてフィルタを使う。

ポイントはフレームを間引く必要があるかどうかと、テロップなどの片フィールド補間がいるかどうか。フレーム間引きするにはdecimateを併用し、pullupdetelecineには必要ない。

片フィールドを補間した 60pはw3fdifだけ使うのが手軽だが、他にもyadifbwdifnnediestdifもBob化できる。yadifbwdifestdifの第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

  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
  2. フィールドパターンを手動の逆テレシネして、間引きは自動
    detelecine=start_frame=3
  3. 手動インターレース解除して、間引きも手動指定
    fieldhint=hint.txt:pattern,select=mod(n-1\,5),fps=24000/1001
  4. 高速なプログレVFR(-rで固定フレームにできる)(速度を重視)
    pullup -r 24000/1001
  5. 意外に速くて高品質で 24fps化(品質と速度を両立)
    fieldmatch,decimate
  6. 一般的な 24fps化(品質と速度を両立)
    yadif=0:-1:1,decimate
  7. yadif より高画質(常に高画質とは限らない)な 24fps化(速度より品質重視)
    bwdif=0:-1:1,decimate
  8. IVTCとyadifを併用して24fps化(速度より品質重視)
    fieldmatch=mode=pc:cthresh=40,yadif=0:-1:1,decimate
  9. 一般的なインターレース解除(品質と速度を両立)
    yadif=0:-1:1
  10. yadif より高画質(常に高画質とは限らない)
    bwdif=0:-1:1
  11. テロップなど60pのBob
    yadif=1:-1:1
  12. テロップなど60pのBob
    bwdif=1:-1:1
  13. テロップなど60pのBob
    w3fdif=1:0
  14. テロップなど60pのBob(かなり遅いが一番高画質)
    nnedi=deint=1:field=af

関連記事

ロゴ消しはこちら: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

コメントを残す

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

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