テレビ録画や古い DV カメラの映像を PC で再生すると、横方向に細かい縞模様(コーミング)が出ることがあります。これはインターレース方式の映像をそのまま表示しているのが原因で、FFmpeg の yadif フィルタでプログレッシブに変換すれば解消します。この記事では modeparity の意味、インターレース映像の見分け方、フレームレートへの影響と対処までをまとめます。

動作確認: FFmpeg 6.1(検証スクリプトで実 FFmpeg 実行確認)/対象 OS: Windows / macOS / Linux


インターレースとは

インターレース映像は、1フレームを奇数ライン(フィールド1)と偶数ライン(フィールド2)に分けて交互に表示する方式です。テレビ放送(NTSC・PAL)やDVカメラの録画でよく使われています。

現代のPC・スマートフォンのディスプレイはプログレッシブ方式のため、インターレース映像をそのまま再生すると**縞模様(コーミングアーティファクト)**が生じます。


基本コマンド

ffmpeg -i input.mp4 -vf yadif output.mp4

yadif はデフォルトで mode=0(入力フレームごとに1フレーム出力)を使います。


mode オプション

ffmpeg -i input.mp4 -vf "yadif=mode=0" output.mp4
mode値動作フレームレート
0各フレームを1フレームに変換変化なし
1各フィールドを1フレームに変換2倍になる
2mode=0 + フレームタイプを確認して処理(インターレースのみ変換)変化なし
3mode=1 + フレームタイプを確認して処理最大2倍

通常は mode=0 で問題ありません。mode=1 は60i(インターレース)→60pに変換したい場合に使います。


60i → 30p への変換(半分のフレームレートに)

日本のテレビ放送(1080i 60Hz)を30pに変換する場合:

ffmpeg -i input.mp4 -vf "yadif=mode=0" -r 30 output.mp4

60i → 60p への変換(フレームレートを保持)

ffmpeg -i input.mp4 -vf "yadif=mode=1" output.mp4

mode=1 でフィールドごとに1フレーム出力し、60fpsのプログレッシブ映像になります。


parity オプション(フィールド順の指定)

ffmpeg -i input.mp4 -vf "yadif=mode=0:parity=0" output.mp4
parity値説明
-1自動検出(デフォルト、推奨)
0BFF(Bottom Field First)— NTSC放送に多い
1TFF(Top Field First)— PAL放送・DVに多い

通常は -1(自動)で問題ありません。


インターレース映像の見分け方

動画がインターレースかどうかを確認するには ffprobe を使います:

ffprobe -v quiet -show_streams -select_streams v:0 input.mp4 | grep field_order

出力が tt(TFF)・bb(BFF)・tbbt ならインターレース映像です。progressive なら解除不要です。


高品質なインターレース解除(yadifの代替)

bwdif(Better Weave Deinterlacing Filter)はyadifよりも高品質ですが処理が重いです:

ffmpeg -i input.mp4 -vf bwdif output.mp4

実測例

1080i/29.97fps、2分の H.264 素材を yadif=mode=0 で30p相当に変換する例です。

ffmpeg -i input.mp4 \
  -vf "yadif=mode=0:parity=-1" \
  -c:v libx264 -crf 23 -preset medium -c:a copy \
  output_30p.mp4

mode=0 は出力フレーム数を増やさないため、処理時間は通常の再エンコードより少し重い程度です。8コア程度のデスクトップ環境では、実時間の1.2〜2倍程度が目安です。

mode=1 で60p相当にすると出力フレーム数がほぼ2倍になるため、エンコード時間とファイルサイズも増えやすくなります。動きは滑らかになりますが、Web配信用で30pに落とすなら mode=0 の方が扱いやすいです。環境により変動します。

解除前後の確認では、横スクロールのテロップ、人物の腕、スポーツ映像のボールなど、動きの速い輪郭を見ると差が分かりやすいです。parity が逆だと動きが前後に揺れるように見えるため、その場合は parity=0parity=1 を短い区間で比較してください。


関連リソース

よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。

FFmpeg チートシート

関連記事


動作確認: ffmpeg 6.1 / Ubuntu 24.04 (検証スクリプトで実行確認) 一次ソース: ffmpeg.org/ffmpeg-filters.html#yadif / trac.ffmpeg.org/wiki/Deinterlacing


よくある質問

yadif、bwdif、nnedi、どれが一番良い?

bwdif は yadif の改良後継で現代の標準デフォルト。nnedi(ニューラルネット)が最高品質だが遅い。yadif はバッチ用途に十分。

60i を 30p と 60p どちらに deinterlace する?

60p(mode=1: フィールド毎にフレーム)はモーションが滑らか。30p(mode=0)は半分のフレームレートで「カクカク」見えるが Web 配信ターゲットに合う。

映像がインターレースかどうか先に判定したい

できます — ffmpeg -i in.mp4 -filter:v idet -f null - で 200 フレーム解析して BFF/TFF/progressive のカウントを返す。インターレースのフラグ数 > プログレッシブなら deinterlace 適用。

プログレッシブ素材を deinterlace すると劣化する?

若干します — deinterlacer は無いフィールドをぼかしか複製で埋めるため。idet でゲートして「インターレース確定ストリーム」だけに適用してください。

deinterlace で解像度は変わる?

変わりません。出力寸法は入力と同じ。フィールド合成だけが変わります。1080i (1920×1080 インターレース) の出力は 1920×1080 プログレッシブ。