提示

返回博客列表

老视频满屏横纹/梳齿状?彻底搞懂去隔行(Deinterlace)与画质修复全攻略

老视频满屏横纹/梳齿状?彻底搞懂去隔行(Deinterlace)与画质修复全攻略

从电视录制的老视频、老 DV 摄像机拍的素材、或者某些监控录像,在电脑上播放时经常出现"密集横向纹理""人物边缘梳齿状抖动""一动起来就糊成一片"——这叫隔行扫描(interlaced)伪影。这篇文章讲清楚隔行是什么、为什么要转逐行、以及用 ffmpeg 的 yadif / bwdif 等滤镜怎么修,并对比不同滤镜质量与代价,附降噪组合、批量脚本和常见翻车。

一、什么是隔行扫描

老式 CRT 电视为省带宽,把一帧拆成"奇数行"和"偶数行"两场(field)交替显示。静止画面看着正常,但一旦有运动,两场捕捉的不是同一时刻,叠在一起就出现横纹/梳齿。现代显示器是逐行(progressive)的,直接显示隔行内容就会露馅——尤其运动画面最明显。

判断口诀:静止时正常、一运动就"梳齿/横纹/拉丝",八成是隔行。

二、先确认是不是隔行

用 ffprobe 看:

ffprobe -v error -select_streams v:0 -show_entries stream=field_order -of csv=p=0 input.m4v
  • tt / tb / bt / bb 表示隔行(不同扫描顺序);
  • progressive 表示已逐行;
  • 也可肉眼:放大静止帧看有无横纹理、运动时有无梳齿。

有时 field_order 字段为空(编码器没写),那就靠肉眼或试处理对比。

三、去隔行:yadif 滤镜

最常用 yadif(Yet Another DeInterlacing Filter):

# 输出逐行,每场变一帧(帧数翻倍,运动更顺)
ffmpeg -i input.m4v -vf "yadif=1" -c:a copy output.mp4
  • yadif=0:每帧输出一帧(默认,丢一半场,文件小);
  • yadif=1:每场输出一帧(帧率翻倍,运动更顺但文件更大);
  • yadif=2/3:类似但用空间插值,边缘更平滑。

四、更高质量的去隔行:bwdif

bwdif(Bob Weaver Deinterlacing Filter)通常比 yadif 质量更好、锯齿更少:

ffmpeg -i input.m4v -vf "bwdif=1" -c:a copy output.mp4

老片源修复优先试 bwdif,观感更自然。可用 bwdif=0 控制不翻倍帧率。若设备不支持 bwdif,回退 yadif。

五、配合缩放一步到位

去隔行后顺手把分辨率降一点(老片本就不清晰,降分辨率省空间且观感无差):

ffmpeg -i input.m4v -vf "yadif=1,scale=720:-2" -c:v libx264 -crf 20 -c:a copy output.mp4

scale=720:-2 把宽缩到 720、高按比例(-2 保证偶数)。老片 720p 足够。

六、与其他修复组合

老片常有噪声,可叠加降噪(详见降噪专题):

ffmpeg -i input.m4v -vf "bwdif=1,scale=720:-2,hqdn3d=4:3:6:4" -c:v libx264 -crf 20 -c:a copy output.mp4

hqdn3d 是轻量降噪滤镜,适合老片。噪点特别重的可加 removegrainnlmeans(更慢但更好)。

七、批量处理

for f in *.m4v; do
  ffmpeg -i "$f" -vf "bwdif=1" -c:v libx264 -crf 20 -c:a copy "prog_$f.mp4"
done

八、去隔行滤镜对比

滤镜 质量 速度 备注
yadif 默认首选
bwdif 较好 老片修复推荐
kerndeint 老牌滤镜
不处理 现代播放器多自动去隔行

注意:很多现代播放器(VLC、MPV)已能自动去隔行,但存档/二次编辑建议预先转好,避免每次播放都临时算、且剪辑软件未必处理。

九、常见翻车现场

现象 根因 解法
去隔行后画面抖 用了 yadif=0 丢场 试 yadif=1 或 bwdif
处理后更糊 源本就模糊+降分辨率过狠 放宽 scale 或不动分辨率
帧率翻倍太大 yadif=1 每场一帧 用 yadif=0 控制体积
没效果 源本就逐行 先 ffprobe 确认
处理极慢 逐帧滤波+重编码 接受耗时或用 GPU 滤镜

十、常见问题

Q:去隔行会损画质吗? 会略有损(插值是估计),但消除隔行伪影的获益远大于损失。

Q:能不能只在运动时去隔行? 高级滤镜支持按运动检测,但 ffmpeg 内置的整帧处理更简单通用。

Q:4K 隔行源怎么处理? 同理用 yadif/bwdif,注意性能;若设备支持可用硬件去隔行。

Q:转完能还原隔行吗? 不能,去隔行是不可逆的信息丢弃。

Q:监控录像隔行严重怎么办? 同理 bwdif,先 ffprobe 确认 field_order 再批量。

十一、端到端实战:处理一批老 DV 素材

假设目录里一堆 .m4v 是老 DV 拍的,先确认隔行,再批量转逐行并降噪:

for f in *.m4v; do
  # 确认是奇数场/偶数场(tt/tb/bt/bb)才去隔行
  if ffprobe -v error -select_streams v:0 -show_entries stream=field_order -of csv=p=0 "$f" | grep -qE "tt|tb|bt|bb"; then
    ffmpeg -i "$f" -vf "bwdif=1,scale=720:-2,hqdn3d=4:3:6:4" -c:v libx264 -crf 20 -c:a aac "prog_$f.mp4"
  else
    echo "$f 已逐行,跳过"
  fi
done

这段脚本先探测 field_order,只处理真隔行的文件,避免对逐行素材做无用功。

十二、去隔行质量参数微调

bwdif 还有 parity(场奇偶)和 deint(处理全部帧还是只交错帧)参数:

# 仅对检测到的交错帧去隔行(更省、更保真)
ffmpeg -i input.m4v -vf "bwdif=mode=1:parity=auto:deint=interlaced" -c:a copy out.mp4

parity=auto 让滤镜自动判断奇偶场顺序,多数情况比手动指定更稳。

十三、更多 FAQ

Q:去隔行后文件变大很多? 重编码 + 可能帧率翻倍导致,用 bwdif=0 不翻倍、或压低码率。

Q:能不能 GPU 去隔行? 可以,硬件滤镜(如 yadif_cuda)更快,但需对应硬件和编译支持。

Q:隔行和逐行能混在一个文件? 不会,一个流是隔行或逐行;混合是切换时的显示问题。

Q:老动画要不要去隔行? 动画常是逐行或 3:2 pulldown,先确认 field_order 再决定,盲目去隔行反而损。

十四、隔行判定速查清单

  • 静止正常、一运动就梳齿/横纹 → 隔行;
  • ffprobe field_order 为 tt/tb/bt/bb → 隔行;
  • 老 DV、老电视录制、部分监控 → 默认隔行;
  • 现代手机/相机/屏幕录制 → 一般逐行,无需处理;
  • 拿不准 → 试 bwdif=1 看观感是否改善。

小结

隔行伪影 = 老电视扫描方式与现代显示不兼容。确认 field_order 后用 yadif(快)或 bwdif(好)转逐行,老片可叠加降噪。现代播放器虽会自动去隔行,但存档和二次编辑还是预先转好最稳。

想亲手试试?用 VidDown 一键解析下载

粘贴视频链接即可解析,多平台支持、网页端即用;下载桌面客户端解锁海外平台本地解析,开通会员更享不限次下载。

顶部