テレビ録画や古い DV カメラの映像を PC で再生すると、横方向に細かい縞模様(コーミング)が出ることがあります。これはインターレース方式の映像をそのまま表示しているのが原因で、FFmpeg の yadif フィルタでプログレッシブに変換すれば解消します。この記事では mode と parity の意味、インターレース映像の見分け方、フレームレートへの影響と対処までをまとめます。
動作確認: FFmpeg 8.1 / Windows — 本記事のコマンド 7 件を検証スクリプトで実行し、全て成功しました(2026-09-06)
インターレースとは
インターレース映像は、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倍になる |
2 |
mode=0 + フレームタイプを確認して処理(インターレースのみ変換) | 変化なし |
3 |
mode=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 |
自動検出(デフォルト、推奨) |
0 |
BFF(Bottom Field First)— NTSC放送に多い |
1 |
TFF(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)・tb・bt ならインターレース映像です。progressive なら解除不要です。
高品質なインターレース解除(yadifの代替)
bwdif(Better Weave Deinterlacing Filter)はyadifよりも高品質ですが処理が重いです:
ffmpeg -i input.mp4 -vf bwdif output.mp4
実測: 処理時間とサイズ
計測したのは、次のコマンドです。
ffmpeg -i input.mp4 -vf yadif=mode=0:parity=-1 -c:v libx264 -crf 23 -preset medium -an output.mp4
| 項目 | 実測値 |
|---|---|
| 処理時間 | 14 秒(実時間の 8.57 倍速) |
| 出力サイズ | 67.94 MB |
| フィルタなし再エンコードとのサイズ差 | -21.2% |
計測環境: Core i9-14900KF(32スレッド)/ FFmpeg 8.1 (gyan.dev)、2026-09-05、逐次実行。素材は 1920x1080・30fps・120秒・351.4 MB(Big Buck Bunny をループしたもの、CC BY 3.0)で、入力にはこれを 1080i にインターレース化して再エンコードしたファイルを使っています。比較対象となるフィルタなしの再エンコード(-c:v libx264 -crf 23 -preset medium のみ)は 27.97 秒・86.26 MB でした。全データはデータセットで公開しています。
なぜこの数字になるのか
フィルタを一段追加しているのに、フィルタなしの再エンコード(27.97 秒)より短い 14 秒で終わっています。理由は出力サイズ側に出ています。yadif は隣接フィールドから欠けた走査線を補間して1枚のフレームに合成するので、縦方向の細かいディテール(櫛状のエッジを含む高周波成分)がその過程で落ちます。x264 から見れば符号化すべき情報が減るため、ビットが減り(-21.2%)、動き探索と量子化も軽くなります。インターレース解除は「重い前処理」ではなく、素材をなだらかにして後段のエンコードを軽くする処理として振る舞います。
ただしこの 14 秒と 27.97 秒を直接引き算して「yadif のコスト」と読むことはできません。ベースラインが読んでいるのは元のプログレッシブ素材で、こちらの入力は同じ映像を 1080i にエンコードし直した別ファイルです。中身のビットレートも符号化構造も違います。ここから言えるのは、フィルタの単体コストではなく、インターレース解除込みの再エンコード1本がどれだけかかるかです。
もうひとつ効くのが、この処理は -c copy では絶対に済まないという点です。同じ計測回で、ストリームをコピーするだけの操作はストリーム選択 0.41 秒、moov アトム移動 0.49 秒、音声フェード 1.03 秒で終わっています。対して再エンコードを伴う操作は 14.0 秒(本記事の yadif)から VP9 変換の 729.16 秒まで。フィルタを挿す時点で必ず後者の土俵に乗るので、秒単位の世界には戻れません。とはいえ yadif はその再エンコード帯の最も軽い側で、720p スケール(18.43 秒)やカラー補正(53.26 秒)より速く終わっています。
旧版の本記事は「8コア程度のデスクトップ環境では実時間の1.2〜2倍程度」と書いていました。CPU が違うので直接の反証にはなりませんが、実測では 120 秒の素材が 14 秒(8.57 倍速)で終わっており、桁が合いません。この見積もりは撤回します。
mode=1 で60p相当にする場合は出力フレーム数が増えるため、この数字はそのまま当てはまりません(今回の計測対象は mode=0 のみです)。
解除前後の確認では、横スクロールのテロップ、人物の腕、スポーツ映像のボールなど、動きの速い輪郭を見ると差が分かりやすいです。parity が逆だと動きが前後に揺れるように見えるため、その場合は parity=0 と parity=1 を短い区間で比較してください。
関連記事
動作確認: FFmpeg 8.1 / Windows — 本記事のコマンド 7 件を検証スクリプトで実行し、全て成功しました(2026-09-06) 一次ソース: 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 プログレッシブ。