はじめに
本記事は、FFmpeg(full-build版)がサポートするインターレース解除(deinterlace)フィルタの性能を、実動画を用いて比較・検証したものです。
PT3等でTV録画した映像 1080i や、過去アーカイブの 480i 素材を 60p へ戻す際に「結局どのフィルタが一番良いのか?」という問いに、SSIM / PSNR / VMAF / 処理速度の4軸で比較・検証したものです。
本記事の対象は 60i (30i) → 60p の純粋なデインターレースのみです。元が24p (23.98p) のアニメ・映画等の素材は対象外とします。詳細は後述「本記事の対象外」を参照。
本記事はffmpeg 9.0.1-full_build (gyan.dev)を前提としています。通常ビルドでは HWフィルタが含まれない場合があります。
対象読者
- TS録画したインターレース動画をインタレース解除したい方
- FFmpegで
bwdifとyadifのどちらを使うか迷っている方 - QSV / CUDA / Vulkan / D3D12VA の違いを実測値で知りたい方
環境・前提条件
PC-1 (Desktop): Windows 11 26200 / Ryzen 7 9800X3D / RTX 5060 Ti 16GB / 64GB RAM
PC-2 (Laptop): Windows 11 26200 / Core i7-1280P (iGPU Iris Xe) / 32GB RAM
FFmpeg: 9.0.1-full_build - https://github.com/GyanD/codexffmpeg/releases
Python: 3.12.13 / 3.14.7 (計測用)
VMAF: libvmaf model=vmaf_v0.6.1
素材は全て yuv420p progressive の 60p y4m を 30i にインターレース化したものを使用しています。
| ID | 素材 | 解像度 | 内容 |
|---|---|---|---|
| SRC1 | OpenCV生成 output_1280x720_60fps
|
1280x720 60p | 自作Pythonスクリプト生成、黄/青三角高速移動 |
| SRC2 | big_buck_bunny_1080p60_fast | 1920x1080 60p | Xiph.org Bunnyを60fps化、高速パン多 |
| SRC3 | sintel_trailer_1080p60_fast | 1920x1080 60p | Xiph.org Sintelを60fps化、映画的 |
SRC1 の出力イメージ
上記は SRC1出力イメージ
SRC1 の生成方法
SRC1 output_1280x720_60fps_yuv420p.y4m は、 gen_movie.py で生成した完全合成素材です。インターレース解除の弱点である「高速移動する斜めエッジ」の再現性を厳密に測るため作成しました。
仕様
解像度: 1280x720 / 60fps / 3600フレーム (60秒) / yuv420p
出力: output_1280x720_60fps_yuv420p.y4m (y4mパイプ経由)
依存: Python 3.10+ / OpenCV (cv2) / numpy / ffmpeg (PATH上)
-
黄三角: 画面外周を矩形周回。高さ200pxの正三角形 (辺 ~230.9px)。1周目は 200px/s、周回ごとに +200px/s 加速 (2周目 400px/s, 3周目 600px/s...)。
L_y = 2*(W+ H)を周回距離として計算 -
青三角: 45度斜め移動
(0,620) -> (620,0)を往復。1往復目は 150px/sから開始し、往復ごとに+50px/s加速。片道距離620*sqrt(2) ≈ 876.8px
三角形は cv2.fillConvexPoly で BGR(黄: 0,255,255 / 青: 255,0,0) で塗りつぶし、OpenCVのBGR24フレームを subprocess.Popen で ffmpeg にパイプしています。
生成コマンドの中身
# gen_movie.py 抜粋 - ffmpegパイプ部分
ffmpeg_cmd = [
"ffmpeg", "-y",
"-f", "rawvideo", "-pix_fmt", "bgr24",
"-video_size", f"{WIDTH}x{HEIGHT}",
"-framerate", str(FPS),
"-i", "-",
"-c:v", "rawvideo", "-pix_fmt", "yuv420p",
"-f", "yuv4mpegpipe",
OUTPUT_FILE,
]
proc = subprocess.Popen(ffmpeg_cmd, stdin=subprocess.PIPE)
# ... 3600フレームを frame.tobytes() で書き込み
実行方法
pip install opencv-python numpy
python gen_movie.py
# -> output_1280x720_60fps_yuv420p.y4m が生成される (約 1.9GB相当の非圧縮y4m)
この素材は、移動速度が既知であるため、理論上のSSIMが最も高くなりやすく、フィルタの純粋な補完性能差が出やすいです。実際の計測でも bwdif で SSIM 0.993〜0.999 を記録しました。
インターレース化コマンド(TFF固定):
ffmpeg -hide_banner -i inFile.y4m -vf "interlace=scan=tff:lowpass=complex" -c:v ffv1 -level 3 -flags +ildct+ilme outFile_ffv1.mkv
idet フィルタで TFF 95-100% を確認済み。日本の地上波 1080i を想定しています。
本記事で想定するインターレース画像
テレビ放送の1080i (TFF: Top Field First) を想定します。60iのビデオカメラ素材、スポーツ中継、バラエティ等の「完全インターレース」素材が対象です。
本記事の対象外 - 24pアニメ/映画は逆テレシネが正解
本記事は、素動画がアニメや映画等の 24fps (23.98fps) Progressive の素材は対象外とします。
その理由は、アニメや映画が地上波で放送される際に行われる「テレシネ」と、純粋なインターレースでは処理が根本的に異なるためです。
なぜ対象外か? - テレシネと逆テレシネ
- 純粋な60i (本記事の対象): 撮影時点で60枚/秒の異なる瞬間がフィールドに記録されている。例: ビデオカメラ、スポーツ中継。→ デインターレース (bwdif等) で60pに戻すのが正解。
- 24p→60i変換された素材 (対象外): 元は24枚/秒のプログレッシブ。放送用に 2:3プルダウン (テレシネ) で 60i に変換されている。例: 映画、TVアニメ、ドラマ。フィールドを単純に60p化すると、本来24pだった動きが不自然に補間され、カクつきや画質劣化を招く。
アニメや映画の場合は、デインターレースではなく 逆テレシネ (Inverse Telecine, IVTC) を用いて 60i → 24p に戻すのが正解です。FFmpegでは以下のフィルタを使用します。
# 逆テレシネの例 (24pに戻す)
ffmpeg -i input_60i.mxf -vf "fieldmatch=order=tff:combmatch=full,decimate" -r 24000/1001 output_24p.mp4
# または pullup
ffmpeg -i input_60i.mxf -vf "pullup,softskip" -r 24000/1001 output_24p.mp4
-
fieldmatch+decimate: 2:3プルダウンのパターンを検出し、重複フィールドを削除して24pに戻す。最も高精度。 -
pullup: 古くからの定番。アニメのテレシネ解除で実績多数。
本記事で使用している
SRC2 big_buck_bunny/SRC3 sintel_trailerは、元は24p作品ですが、評価用に敢えてsetpts=24/60*PTSで60p化した上で30i化しているため、純粋な60i素材として扱っています。実際の24p作品を60i放送から復元する場合は、上記の逆テレシネを使用してください。
まとめ:
- ビデオ由来の60i → bwdif等で60p化 (本記事)
- フィルム/アニメ由来の24p→60i → fieldmatch/decimateで24pに戻す (本記事対象外)
本記事の評価結果を24p素材に適用すると、逆に画質が低下しますのでご注意ください。
インターレースとは
1. 元画像 (Progressive)
実写系は 60(59.94)fps、アニメ/映画系は 24(23.98)fps を想定します。
プログレッシブでは1フレームに全ラインが存在します。
プログレッシブ原画のイメージ
2. インターレース化
交互に表示される奇数フィールド(赤)と偶数フィールド(青)を時間差で記録する方式です。本来は交互に表示されるものを、静止画として同時表示すると櫛状のギザギザ(コーミング)が見えます。
インターレース化イメージ: 奇数ラインと偶数ラインで時刻が異なる
| フレーム | 奇数ライン(赤) | 偶数ライン(青) |
|---|---|---|
| 奇数フィールド | 表示 | 非表示 |
| 偶数フィールド | 非表示 | 表示 |
奇数(偶数)フィールドでは偶数(奇数)ラインが欠損するため、原理的に非可逆です。インターレース解除はこの欠損ラインをどう補完するかの競争になります。
インターレース解除とは
欠損したラインを周辺情報から推定し、60i -> 60p に戻す処理です。
FFmpegでは大きく分けて2つの動作があります。
-
bob (60p倍速): 1フィールドから1フレームを生成。30i -> 60p。
bwdif=mode=1やyadif=mode=1が該当。動きが滑らか -
weave / 30p固定: 2フィールドを合成して1フレーム。30i -> 30p。
w3fdif,kerndeintが該当。フレームレート半分
本検証では is_doubled=True (60p出力可能) をメインランキングとしています。
FFmpegがサポートするインターレース解除(deinterlace)フィルタ一覧
ffmpeg -hide_banner -filters | findstr deinterlace と ffmpeg -h filter=xxx で検出できる full-build版の全フィルタです。
ffmpeg -hide_banner -filters と ffmpeg -h filter=xxx で検出できる full-build版の全フィルタです。PC-1(Desktop)で10種、PC-2(Laptop)で9種が利用可能でした。
CPUフィルタ群 (6種)
| フィルタ名 | 概要・アルゴリズム | 60p倍速 | 長所 | 短所 | 推奨用途 | 代表的オプション |
|---|---|---|---|---|---|---|
| bwdif |
Bob Weave Deinterlacing Filter。FFmpeg 3.x以降のデファクト。3フィールド(前/現/次)を使い、動き検出 + エッジ方向補間 (ED) + 時間的チェックを組み合わせる。mode=1で1フィールド→1フレームのbob、 mode=0で2フィールド合成。 |
○ mode=1
|
全素材で最も安定。SSIM/VMAFバランスが最高。エッジが綺麗。 | CPU負荷は中。4K60pでは重い。 | 迷ったらこれ。品質重視のCPU処理。 | bwdif=mode=1:parity=tff:deint=all |
| yadif | Yet Another Deinterlacing Filter。MPlayer由来の定番。空間チェック (周辺ラインの差分) + 時間チェック (前後フィールド) + エッジ方向補間の3段階。bwdifより古いが高速。 | ○ mode=1
|
非常に高速、実績豊富。アニメのちらつきに強い。 | bwdifよりエッジがやや甘い。高速移動でジャギー残り。 | 大量バッチ処理、リアルタイム性重視。 | yadif=mode=1:parity=0:deint=0 |
| w3fdif |
Weston 3 Field Deinterlacing Filter。BBC Westonスーパーが開発。時間方向に3フィールドの周波数分離 (filter=simple/complex) で動き検出。 |
× 30p固定 (仕様) | 静止画部分の解像感保持が優秀。CPU最速クラス (Laptopで972fps)。 | 60p化できない。動きの激しい部分でボケ。 | 監視カメラ等、動きが少ない30p素材。 | w3fdif=filter=complex:deint=all |
| kerndeint | Donald Graft作の適応的カーネルデインターレーサ。threshで動き閾値、sharpでシャープ、twowayで両方向補間。 |
× 30p固定 | 閾値調整でアニメの線を綺麗に残せる。昔のDVDリッピング定番。 | 30p固定、パラメータが職人芸。実写では破綻しやすい。 | レトロ素材、アニメDVDの30p化。 | kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0 |
| nnedi |
Neural Network Edge Directed Interpolation。2009年発表の浅いMLP (多層パーセプトロン) によるエッジ方向予測。nsize=s8x6〜s32x4の近傍ピクセルから16〜64個のニューロンで補間方向を推定。nnedi3_weights.bin (約2MB) が必要。 |
○ だが重い | 静止画の斜めエッジ補間は理論上最強。 | 浅いNNで時代遅れ、時間情報なし、学習データがアニメ寄り、60p bobで時間的破綻。最遅 (Laptop SRC2で11fps, 1248秒)。 | 静止画超解像の前処理、研究用。実用非推奨。 | nnedi=weights=...:field=tff:deint=all:nsize=s32x4:nns=64:qual=fast |
| estdif |
Edge Slope Tracing Deinterlacing Filter。エッジの傾きを追跡して補間方向を決める。rsで探索範囲。 |
○ mode=field
|
エッジ追跡が得意、対角線のギザギザ抑制。 | 計算量が多い割にVMAFが低い。rs=2で激遅。 |
斜め線が多いCG素材の実験。 | estdif=mode=field:parity=tff:deint=all:rs=1 |
ハードウェアフィルタ群 (8種)
| カテゴリ | フィルタ名 | 概要・アルゴリズム | 60p倍速 | 長所 | 短所 | 要件 |
|---|---|---|---|---|---|---|
| NVIDIA CUDA | bwdif_cuda | bwdifのCUDA移植。scale_cudaと連携。アルゴリズムはCPU版と同一だがGPUで並列化。 |
○ | CPU版と同画質でGPU%13%と省電力。602fps。 | VRAMコピー overhead、NVIDIA必須。 | CUDA, -hwaccel cuda
|
| yadif_cuda | yadifのCUDA移植。 | ○ | 最速クラス、CPU負荷激減。 | 同上、yadif画質。 | CUDA | |
| Vulkan | bwdif_vulkan | bwdifのVulkan移植。NVIDIA/AMD/Intelで動作。今回総合No.1 (VMAF 86.15)。 | ○ | ベンダー非依存、今回最高VMAF。 | ドライバ依存、Winで稀にVK_ERROR_DEVICE_LOST。 | Vulkan |
| Intel QSV | deinterlace_qsv | Intel Media SDK固定機能。エッジを平均化するスムージング系。mode=1: bob, mode=2: advanced
|
△ mode=2で倍速試行 |
SSIM最強 (0.996174)。CPU%24%と低消費電力。 | VMAFが低い (70.9) スムージングでディテール消失。Desktopでは不可 (iGPU ID mismatch)。 | QSVランタイム |
| vpp_qsv | Video Post Processing QSV。QSVの後継API。deinterlace=2:rate=fieldでbob。deinterlace_qsvと同エンジンだがドライバ経路が異なる。 |
○ | deinterlace_qsvと同SSIM、若干高速。 | 同上、VMAF低。旧deint/field_rateはffmpeg 9.0.1で廃止。 |
QSV | |
| D3D12VA | deinterlace_d3d12va | Windows D3D12 Video Acceleration。GPUベンダーのドライバ実装に依存。 | ○ | GPU効率最高、CPU%14%と最低。 | 実装差異が大きい: RTX(d3d12va)でVMAF 72.1 vs iGPUで79.6と4pt差。 | Windows + D3D12 |
| VAAPI | deinterlace_vaapi | Linux VAAPI。Intel/AMDのオープンソースHWデインターレーサ。 | ○ rate=field
|
Linuxで省電力。 | Windowsでは利用不可。今回未計測。 | Linux |
| OpenCL | yadif_opencl | yadifのOpenCL移植。 | ○ | 汎用GPUで動作。 | ドライバ不安定、今回環境では未検出。 | OpenCL |
参考: https://ffmpeg.org/ffmpeg-filters.html#bwdif / https://ffmpeg.org/ffmpeg-filters.html#yadif / https://github.com/dubhater/vapoursynth-nnedi3
評価方法
素材動画(60p) ⇔ インタレース解除(60p or 30p) の動画間で VMAF/SSIM/PSNRで実測
計測コマンド設計
ffmpeg -hide_banner -benchmark -i interlaced.mkv -i original.y4m -filter_complex ^
"[0:v]set_params=field_mode=tff,bwdif=mode=1:parity=0:deint=all[deint]; ^
[deint]split=3[for_ssim][for_psnr][for_vmaf]; ^
[for_ssim][1:v]ssim=stats_file=SRC1_bwdif_ssim.log:stats_version=2[e1]; ^
[for_psnr][1:v]psnr=stats_file=SRC1_bwdif_psnr.log[e2]; ^
[for_vmaf][1:v]libvmaf=log_fmt=json:log_path=SRC1_bwdif_vmaf.json:model=version=vmaf_v0.6.1:feature=name=psnr|name=float_ssim[e3]" ^
-map "[e1]" -f null - -map "[e2]" -f null - -map "[e3]" -f null -
-
set_params=field_mode=tffでフィールド順を強制 - 出力は
-f null -で捨てるためディスク枯渇しない -
psutilでCPU、pynvmlでGPU使用率を500msサンプリング
評価指標:
| 指標 | 意味 |
|---|---|
| SSIM All | 構造的類似度。エッジが綺麗だと上がる |
| PSNR All | 画素単位の誤差。純粋なピクセル忠実度 |
| VMAF | Netflix開発の知覚的品質モデル。人間の目に近い |
| fps / rtime | 処理速度 |
| CPU% / GPU% | 負荷 |
評価結果
1. Desktop (RTX 5060 Ti) 総合ランキング - 3素材平均
VMAFを最重要視した総合ランキングです。
| Rank | Filter | Avg SSIM | Avg VMAF | SRC2 fps | HW | 備考 |
|---|---|---|---|---|---|---|
| 1 | bwdif_vulkan | 0.984016 | 86.15 | 604 | vulkan | 総合No.1 |
| 2 | bwdif | 0.983989 | 76.88 | 562 | cpu | CPU最強・最速クラス |
| 3 | bwdif_cuda | 0.983680 | 85.22 | 602 | cuda | PSNR高め |
| 4 | yadif | 0.983644 | 75.04 | 554 | cpu | バランス |
| 5 | yadif_cuda | 0.983468 | 83.64 | 604 | cuda | コスパ良 |
| 6 | nnedi | 0.982972 | 75.21 | 70 | cpu | 最遅、画質利得微小 |
| 7 | w3fdif | 0.982428 | 75.65 | 600 | cpu | 最速クラスだが30p参考 |
| 8 | estdif | 0.981789 | 74.22 | 84 | cpu | 遅い |
| 9 | deinterlace_d3d12va | 0.981149 | 72.19 | 607 | d3d12va | GPU効率最高 |
| 10 | kerndeint | 0.949556 | 80.67 | 255 | cpu | 30p参考値のみ |
Desktopの最高速度は bwdif@SRC1 2932fps。HWフィルタは全て 600fps前後で頭打ちですが、CPU負荷が 90%→13%に激減します。
2. Laptop (i7-1280P iGPU) QSV結果 - SSIMの罠
| Source | Filter | SSIM All | PSNR All | VMAF | FPS | CPU% |
|---|---|---|---|---|---|---|
| SRC1 | deinterlace_qsv | 0.998978 | 28.81 | 61.96 | 108 | 24% |
| SRC1 | vpp_qsv | 0.998978 | 28.81 | 61.96 | 220 | 20% |
| SRC1 | bwdif | 0.993529 | 29.40 | 73.31 | 550 | 51% |
| SRC2 | deinterlace_qsv | 0.995037 | 44.61 | 77.83 | 69 | 34% |
| SRC2 | vpp_qsv | 0.992818 | 57.60 | 70.50 | 106 | 46% |
| SRC2 | bwdif | 0.972575 | 38.38 | 73.91 | 124 | 46% |
QSVはSSIM観点で最強 (avg 0.996) ですが、VMAFではCPU系(bwdif, w3fdif)に負けます。
これはQSVのスムージング特性によるものです。
- SSIMはエッジ構造が整うと上がる → QSVの平滑化で上昇
- PSNRは画素MSE → 平滑化で微小誤差が累積し低下
- VMAFはディテール損失を減点 → 人間は「滑らか」だがVMAFは「ぼやけ」と判断
つまり 「QSV=高精細」ではなく「QSV=滑らか」。用途で使い分けが必要です。
3. 速度 vs 画質 トレードオフ
SRC2 (big_buck_bunny 14315frames) での実測:
| Filter | Desktop FPS | Laptop FPS | 倍率 | is_doubled |
|---|---|---|---|---|
| bwdif | 562 | 124 | 4.5x | True |
| yadif | 554 | 102 | 5.4x | True |
| nnedi | 70 | 11 | 6.4x | True |
| estdif | 84 | 27 | 3.1x | True |
| deinterlace_d3d12va | 607 | 82 | 7.4x | True |
nnediはDesktopで204秒、Laptopで約660秒かかり、画質利得は0.001以下。コスパは最悪でした。
4. VMAF vs SSIM 相関分析 - 2次元散布図
SSIM All (x軸) と VMAF (y軸) の相関を可視化しました。
4.1 全フィルタ×全ソース統合 (Laptop 27点)
- Pearson r = 0.017 (ほぼ無相関)
- 青: SRC1 (幾何学)、橙: SRC2 (Bunny)、緑: SRC3 (Sintel) で色分け
- 3つのクラスタが明確に分離: SRC1は低VMAF (61-74) / 高SSIM (0.978-0.999)、SRC3は高VMAF (80-92) / 高SSIM (0.95-0.996)、SRC2は中間 (62-80)
- 重要: 同一SSIMでもVMAFが20ポイント以上ばらつく。SSIMだけで品質を語れない証拠
4.2 素材別散布図
SRC1 (generative_triangle) - Pearson r = -0.698 逆相関

幾何学模様では deinterlace_qsv / vpp_qsv が SSIM 0.9989で最右端だが VMAFは61.9で最下端。逆に kerndeint (30p参考値) が SSIM最低 0.978だがVMAF 74で最高。SSIMが上がるほどVMAFが下がる逆相関 が発生。これはQSVのスムージングがSSIMを押し上げるがVMAFはディテール損失として減点するため。
SRC2 (big_buck_bunny) - Pearson r = 0.607 正相関

高速パンが多いBunnyでは w3fdif が VMAF 80.18でトップ、SSIMは0.97と中位。bwdif は SSIM 0.972だがVMAF 73.9と低め。kerndeint が左下に外れ値 (SSIM 0.915, VMAF 62.2)。動きの激しい実写ではSSIMとVMAFがやや正相関。
SRC3 (sintel_trailer) - Pearson r = -0.370 弱い逆相関

映画的で粒子感があるSintelでは bwdif が VMAF 92.0で最高、SSIM 0.985と中位。deinterlace_qsv が SSIM 0.9967で最右端だがVMAF 91.28と2位。vpp_qsv が SSIM 0.9967で同等だがVMAF 80.25と最下位に沈む。同じSSIMでもQSV系のドライバ差でVMAFが11pt違う。
4.3 相関関係の考察
| 観点 | 結果 | 解釈 |
|---|---|---|
| 全体相関 | r=0.017 無相関 | SSIMとVMAFは別物。片方だけでの評価は危険 |
| SRC1幾何学 | r=-0.698 強い逆相関 | エッジが単純な素材では、スムージングでSSIMは上がるがVMAFは「ボケ」と判定して下がる |
| SRC2実写高速 | r=0.607 正相関 | 複雑な実写では、構造保持 (SSIM) が知覚品質 (VMAF) にも寄与 |
| SRC3映画 | r=-0.370 弱逆相関 | 粒子・フィルムグレインがある素材では、SSIMの微細な差がVMAFでは大きく増幅 |
運用への示唆: VMAF 90以上を狙うなら bwdif 系、SSIM 0.996以上をカタログスペックで見せたいなら deinterlace_qsv。どちらを優先するかで推奨フィルタが180度変わる。
Desktop側の散布図も同様傾向 (全ソース r=-0.356, SRC2 r=-0.921) で、HWフィルタ
bwdif_cuda/vulkanはDesktop SRC3でSSIMは測定不可だがVMAF 85-86と高得点を記録。CPU版と同等以上の知覚品質をGPUで実現している。
参考: Desktop側散布図
Desktop全ソース: SRC1青 70-74, SRC2橙 69-83, SRC3緑 76-84 に分離。Pearson r=-0.356
5. Desktop vs Laptop 詳細比較 - 処理時間とCPU使用率
summary_Desktop.csv と summary_Laptop.csv から、同一フィルタのPC間比較を抽出しました。
| Source | Filter | Desktop FPS | Laptop FPS | Desktop rtime(s) | Laptop rtime(s) | Desktop CPU% | Laptop CPU% | FPS倍率 |
|---|---|---|---|---|---|---|---|---|
| SRC1 | bwdif | 126 | 550 | 28.6 | 6.5 | 12.0% | 51.3% | 0.2x |
| SRC1 | yadif | 120 | 659 | 30.0 | 5.5 | 15.8% | 44.1% | 0.2x |
| SRC1 | w3fdif | 123 | 972 | 29.2 | 3.7 | 14.3% | 37.5% | 0.1x |
| SRC1 | nnedi | 103 | 85 | 34.9 | 42.2 | 19.1% | 38.7% | 1.2x |
| SRC2 | bwdif | 51 | 124 | 283.3 | 115.4 | 16.1% | 46.0% | 0.4x |
| SRC2 | nnedi | 32 | 11 | 453.9 | 1248.2 | 32.2% | 37.7% | 2.9x |
| SRC3 | bwdif | 54 | 161 | 23.4 | 7.8 | 14.6% | 57.5% | 0.3x |
| SRC3 | yadif | 53 | 210 | 23.7 | 6.0 | 14.8% | 56.7% | 0.3x |
-
Desktop (Ryzen 7 9800X3D) はデスクトップ向けにベンチマークが低く出る:
benchmarkのrtimeはCPU時間ではなく実時間を測るため、Desktopのfps表示は低いが実際のelapsedは短い。LaptopはCPU%が40-60%と高く、Desktopは12-19%と低い。これはDesktopが16コアで余力があり、Laptopが14コア(6P+8E)でフルロードに近いため - 最速はLaptop w3fdif SRC1で972fps: 720pの幾何学模様は軽い。最遅はLaptop nnedi SRC2で11fps / 1248秒 (20分48秒)
- CPU%最低はDesktop deinterlace_d3d12va SRC1で9.9%: D3D12VAはGPUにオフロードできている証拠。Laptop同フィルタは14.4%
6. 色成分別 SSIM 分析 - ssim_y が最も高いフィルタは?
summary_NOTE-Laptop.csv の ssim_y / ssim_u / ssim_v を比較しました。
全体平均 (9フィルタ平均)
| Filter | Avg ssim_y | Avg ssim_u | Avg ssim_v | 特徴 |
|---|---|---|---|---|
| deinterlace_qsv | 0.9956 | 0.9970 | 0.9978 | Y/U/V全て最強。特にV成分が0.9978で色保持完璧。スムージングで色ずれなし。 |
| vpp_qsv | 0.9956 | 0.9970 | 0.9978 | 同上 |
| bwdif | 0.9797 | 0.9914 | 0.9938 | Yが0.9797でCPU勢トップ。U/Vは0.991以上と色保持良好。 |
| yadif | 0.9792 | 0.9914 | 0.9938 | bwdifと同等。Yが僅かに低い。 |
| nnedi | 0.9787 | 0.9903 | 0.9927 | Yが0.9787とbwdifに0.001負け。Uが0.9903と色で劣る。 |
| w3fdif | 0.9777 | 0.9904 | 0.9932 | Yが低め、U/Vは健闘。 |
| kerndeint | 0.9354 | 0.9739 | 0.9819 | Yが0.935と大きく劣る。輝度エッジ保持が苦手。 |
解釈
-
ssim_yが最も高い=輝度エッジ保持が得意: QSVを除けば
bwdif (0.9797)がトップ。黄三角のエッジがギザギザにならない -
ssim_u/vが高い=色の滲みが少ない: QSVが0.997と圧倒的。CPU勢では
yadifがUで0.9914と僅差でトップ。青黄の色境界が綺麗 - SRC2でYが落ちる: Bunnyの高速パンでは全フィルタでYが0.96-0.97まで低下。U/Vは0.98-0.99と高い。つまり 輝度の高周波がインターレース解除で失われやすい。人間の目はYに敏感なので、VMAFが下がる主因
- kerndeintはYが弱い: SRC2でssim_y 0.889と他が0.96なのに0.88と大きく劣る。閾値ベースのカーネルでは高速動きの輝度を追従できない
考察と運用提言
品質面
-
VMAF基準なら
bwdif系が最強:bwdif_vulkan(86.15),bwdif_cuda(85.22),yadif_cuda(83.64) がSRC3で頂点 - CPUオンリーなら
bwdif>w3fdif>yadifの順。従来の信仰通りbwdifが安定 -
nnedi,estdifは遅い割にVMAFが低いため非推奨 -
deinterlace_d3d12vaは実装差異が大きい。同じフィルタ名でも RTXとiGPUでVMAFが4ポイント違う
なぜ「ニューラルネットワーク活用の最先端フィルタ nnedi」が bwdif / yadif に負けるのか?
nnediは2009年に発表された当時は画期的でしたが、2026年の視点では以下の理由で実用的なインターレース解除では劣勢です。今回の計測でも Laptop平均 SSIM 0.982972 (5位) / VMAF 80.69 (5位) / FPS 11-85と、品質・速度ともに中位以下でした。
1. アーキテクチャが浅すぎる - 現代の深層学習ではない
- nnedi3は 入力近傍 8x6〜32x4ピクセル、隠れ層 16〜64ニューロン、出力 2値 (エッジ方向) の多層パーセプトロン (MLP)。パラメータ数は数千〜数万
- 現代の ESRGAN / Real-ESRGAN (数百万〜数千万パラメータ) と比較すると2桁小さい。2009年当時は「ニューラルネットワーク」と呼ばれたが、今で言う「小さなMLP」
- 活性化関数はシグモイド系、学習は当時のCPUで数日。表現力が不足し、複雑な実写テクスチャを学習できない
2. 学習データがアニメ・静止画に偏っている
- nnedi3の重み
nnedi3_weights.binは、主にアニメの線画や静止画のエッジを学習。BunnyやSintelのような実写・3DCGのモーションブラー、被写界深度、フィルムグレインは学習データにほぼ含まれない - 結果として 幾何学模様 SRC1では ssim_y 0.9936とbwdifを上回る が、実写SRC2では ssim_y 0.9616とbwdif 0.9643に負ける。アニメでは強いが実写では弱い
3. 時間情報を全く使わない - イントラのみ
- bwdif / yadif は 前後フィールドの時間情報 を使って動き検出と補間を行う。nnediは 現在のフィールド内の空間情報のみ で補間方向を推定する「イントラ」フィルタ
- 60p bob動作では、偶数ラインを補間する際に前後の時間的整合性が取れず、高速移動物体でちらつきが発生。VMAFが時間的なちらつきを減点するため、VMAFが伸びない
- 仕様書の
is_doubled=Trueでも、実際は各フィールドを独立に拡大しているだけで、時間方向の補間ではない
4. FFmpeg実装の制限 - qual=fast と固定重み
- FFmpegの nnedi は
qual=fast固定の簡易版。VapourSynth本家の nnedi3はqual=slowで高精度モードがあるが、FFmpegでは実装されていない -
nsize=s32x4:nns=64が最大だが、これは 32x4=128ピクセルの近傍から64ニューロン。現代の8x8〜16x16カーネルと比較すると異方的で、縦方向の情報が不足 - 重みファイルが2009年から更新なし。シーン適応的な重み切り替えもない
5. 計算量が膨大で実用性が低い
- 1ピクセル補間するたびにMLPの順伝播を実行。SIMD最適化も限定的
- Laptop SRC2で 1248秒 (20分48秒)、SRC3で42秒。bwdifは115秒と42秒の差が10倍。GPU版も存在しない
- 品質差は SSIMで0.003 (0.9725 vs 0.9697) と僅か。コスパが最悪
結論: nnediは「ニューラルネットワーク」という看板は最先端に見えるが、実態は2009年の浅いMLPで、学習データも古く、時間情報も使わず、FFmpeg実装も簡易版。現代の動き適応型フィルタ bwdif / yadif の方が、時間・空間・エッジの3軸でバランスが良く、実写では品質・速度ともに勝る。静止画の超解像前処理など、時間情報が不要な用途にのみ有用。
運用推奨マトリクス
| ケース | Desktop (dGPUあり) 推奨 | Laptop (iGPUのみ) 推奨 |
|---|---|---|
| A: 最高品質 (VMAF優先) | bwdif_vulkan | w3fdif / bwdif (VMAF 81/80) |
| B: コスパ重視 | yadif_cuda | deinterlace_d3d12va |
| C: 大量バッチ | w3fdif (最速) | yadif |
| D: QSV必須 (MDフィルタ連携等) | - | deinterlace_qsv (SSIMは最高) |
| 避けるべき | nnedi, estdif | kerndeint (30p非倍速) |
結論: 迷ったら bwdif=mode=1:parity=tff:deint=all を使っておけば間違いない。GPUがあるなら bwdif_vulkan or bwdif_cuda に置き換えるとCPU負荷が1/7になる。
コマンド例:
# CPU推奨 (60p)
ffmpeg -i input_1080i.mxf -vf "bwdif=mode=1:parity=tff:deint=all" -c:v libx264 -crf 18 -preset slow output_1080p60.mp4
# GPU推奨 (Vulkan)
ffmpeg -hwaccel vulkan -i input_1080i.mxf -vf "bwdif_vulkan=mode=1:parity=0:deint=all" -c:v libx264 output.mp4
# QSV環境 (SSIM重視)
ffmpeg -hwaccel qsv -i input_1080i.mxf -vf "vpp_qsv=deinterlace=2:rate=field" -c:v h264_qsv output.mp4
まとめ
- 本記事は60i→60pの純粋なデインターレースのみを対象。24pアニメ/映画は
fieldmatch+decimateによる逆テレシネが正解であり対象外 - 全17フィルタ中、実用的な60p倍速対応は
bwdif,yadif,bwdif_cuda,yadif_cuda,bwdif_vulkan,estdif,deinterlace_d3d12va,deinterlace_qsv,vpp_qsvの9種 - 客観品質 (VMAF) と主観 (SSIM) は一致しない。QSVはSSIMフェチ向け、VMAFはbwdif系が強い
- 速度は
w3fdifとd3d12vaが最速、品質はbwdif_vulkanが最高。総合バランスもbwdif系が優勝 - 中間ファイルなしの
filter_complex + -f null -方式で、1TBのy4mを保存せずに評価可能
参考・引用
- FFmpeg Filters Documentation - bwdif / yadif: https://ffmpeg.org/ffmpeg-filters.html
- Gyan.dev FFmpeg Builds: https://github.com/GyanD/codexffmpeg
- VMAF: https://github.com/Netflix/vmaf
- Big Buck Bunny (CC BY 3.0): https://peach.blender.org/
- Sintel Trailer (CC BY 3.0): https://durian.blender.org/




