前两天整理移动硬盘,在一堆下载文件里翻出来一个叫dragonballz_e233-2的视频文件。这个命名我太眼熟了——以整理动漫资源多年的习惯,这基本就是《龙珠Z》某一集的压制源,e233指第 233 集,-2表示这一集被拆成了两个部分,多半是当年从DVD原盘抓取时按章节切开的。老实说,老版《龙珠Z》的画面放到今天的大屏上,已经是肉眼可见的粗糙:480i 的隔行信号,锯齿、色块、噪点一样不少。这篇文章就围绕这个文件,聊聊我做老番高清修复的完整思路和实操流程,包括片源检查、去隔行、AI超分、编码输出这些环节,以及我踩过的一些坑。如果你手里也有类似的旧资源,想自己动手把它们修得能看,这篇应该能帮你省不少时间。
1. 拆解这个文件名:老番资源的独有信息
1.1 e233 与 -2 背后是什么
先说这个文件名的门道。dragonballz_e233-2这种命名在老番资源里很常见,它实际上传递了三个信息:作品名、集数、分段。龙珠Z从 1989 年播到 1996 年,全 291 集,第 233 集正好落在沙鲁游戏前后的剧情位置,属于中后段的内容。
-2这个后缀有两种常见来源。第一种是 DVD 原盘按章节分割,一张碟放不下两集或者一集过长,就会按章节拆成 Part 1 和 Part 2;第二种是早期的电视录制源,因为当时的录像带容量限制,需要分两段保存。无论哪种情况,-2都意味着这只是某集的第二部分,前一半通常在同目录下以e233-1命名。
这种命名习惯对修复工作是有价值的。它提醒我先检查这个"第二部分"是否完整,是否和第一部分存在重复或缺失的帧。我遇到过不少情况:所谓 Part 2 其实从上一集结尾开始多录了十几秒,如果直接修复再拼接,就会出现剧情重复。所以在动手之前,先用播放器跳着看几个位置,确认内容范围,比一上来就跑工具重要得多。
1.2 龙珠Z原盘画质的"四大病根"
不解决这些病根,直接超分就是灾难。老版龙珠Z的画面问题可以归纳成四类:
第一是隔行扫描。DVD 时代的动画多是 480i,也就是每帧画面由奇数场和偶数场交错构成,在电脑上逐行播放时会出现明显的横纹和梳齿。第二是压缩痕迹。当年DVD 用的 MPEG-2 编码码率有限,在高速动作场景下会产生大量色块和振铃效应,悟空瞬移的镜头几乎是重灾区。第三是噪点与胶片颗粒。那个年代的原片是胶片拍摄的,胶片本身有颗粒,加上存放几十年后的老化,噪点非常多。第四是分辨率不足。480p 的画面拉到 1080p 甚至 4K 屏幕上,全靠算法脑补,脑补得不好就会糊成一片。
这四个问题不是独立的。隔行扫描会干扰超分算法对画面细节的判断;噪点会被超分算法放大成不自然的纹理;压缩痕迹会让线条边缘出现白边。所以修复管线必须按顺序解决问题:先去隔行,再降噪,再超分,最后才编码输出。
1.3 修复目标怎么定
动手之前先要明确一个问题:你修复出来是给自己看的,还是要分享出去的?这个目标决定了参数选择。
如果只是为了在大屏幕上重温剧情,那追求"干净清爽"就够了,可以大胆降噪、磨平瑕疵。但如果你想尽量保留老动画的手绘质感和胶片味,就不能下手太重:过度的降噪会让线条变软,背景的水彩质感也会被抹掉,反而失去老番的味道。
我自己做龙珠Z这集,定位是"中间路线":把明显的隔行、色块、锯齿处理干净,保留适度的颗粒感,超分到 1080p 就行,不上 4K——因为 4K 对 480i 片源来说脑补成分太高,细节都是猜出来的,意义不大。这个目标直接决定了我后面的参数选择。
2. 整体流程设计与工具选型
2.1 一条清晰的处理管线
老番修复不是单个工具能搞定的,它是一条流水线。我自己跑下来的完整流程是六个步骤:
- 片源信息检查(ffprobe + 人工抽帧)
- 去隔行(bwdif 滤镜)
- 剪黑边 + 缩放(crop + scale)
- 降噪(hqdn3d 轻量处理 + 可选 nlmeans)
- AI 超分(Real-ESRGAN anime 模型)
- 编码封装(libx265 + AAC)
这六步可以拆成两段:第 1 到第 4 步用 FFmpeg 一把梭,把视频处理成一个干净的中间文件;第 5 步用专门的 AI 超分工具处理;第 6 步再回到 FFmpeg 做最终编码。这么拆的好处是每个环节可以独立调参,不用每次超分失败都重新跑前面的流程。
2.2 为什么我用 FFmpeg + Real-ESRGAN 这套组合
市面上的老番修复方案很多,我试过三类,简单对比一下:
| 方案 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| FFmpeg 纯滤镜处理 | 免费、命令行可控、批量方便 | 无 AI 补细节,放大后仍然模糊 | 快速处理、低分辨率目标 |
| Topaz Video AI | 一体化、效果好、操作简单 | 收费、对老动画线条容易产生塑料感 | 商业用途、不想折腾的人 |
| VapourSynth + Real-ESRGAN | 开源、可控性高、细节还原最好 | 学习曲线陡、需要写脚本 | 追求画质、愿意折腾的人 |
我自己最后选了 FFmpeg + Real-ESRGAN 的组合,核心原因是性价比。FFmpeg 负责所有"视频外科手术",裁剪、去隔行、降噪、编码都是它的强项;Real-ESRGAN 只需要它干一件事——放大画面并补充细节。两者分工明确,而且都是开源的,跑批处理不用担心授权问题。
Real-ESRGAN 我选择的是内置realesr-animevideov3模型的那套版本,这个模型专门针对动漫视频优化过,对线条和色块的处理比通用模型自然很多。如果直接用通用的 Real-ESRGAN x4plus 模型跑动画,出来的画面边缘会很硬,像矢量图,丢失手绘感。
2.3 环境准备与片源预处理
动手之前先把工具装好。以我常用的 Ubuntu 环境为例,需要准备三样东西:FFmpeg、Real-ESRGAN 的 ncnn 版本、以及足够大的临时磁盘空间。
FFmpeg 直接装就行,但要注意版本不要太老。bwdif 滤镜、zscale 滤镜这些都是较新版本才有的,老版本会报错。装完以后先跑一行命令确认:
ffmpeg -version ffmpeg -filters | grep -E "bwdif|hqdn3d|zscale"如果输出里能看到这几个滤镜,说明版本没问题。
Real-ESRGAN 我推荐用 ncnn Vulkan 版本,因为它在普通显卡上就能跑,不需要配置 CUDA 环境。安装很简单,到 GitHub 下载对应系统的压缩包解压就能用,里面自带的realesrgan-ncnn-vulkan可执行文件就是主力工具。
预处理方面,切记不要把原始文件放在磁盘剩余空间不足的分区上。一集 480p 的老番,解出来抽成 PNG 帧序列可能要占 5 到 10 GB,超分后的中间文件还会翻几倍,再加上最终成品,建议准备至少 30 GB 的剩余空间。
3. 核心环节实操与参数解析
3.1 用 ffprobe 确认片源情况
拿到文件以后,第一步不是我说的抽帧,而是先用 ffprobe 看元数据。这步五秒钟就能做,能帮你确认很多信息:
ffprobe -v error -show_entries stream=index,codec_name,width,height,pix_fmt,r_frame_rate,field_order -show_entries format=duration -of default=noprint_wrappers=1 dragonballz_e233-2.mkv看几个关键值:分辨率和帧率确认是不是 480p/29.97fps 的NTSC制式;field_order如果显示tt或bb,说明是隔行源;编码器如果是mpeg2video,基本就是 DVD 原盘抓取的。
这一步还有一个重要作用:确认时长。龙珠Z一集 TV 版大约 23 分钟左右,如果 ffprobe 显示的时长明显不对,比如只有 12 分钟,那这个-2可能不只是分段,还可能是残缺的资源,就得回去找 Part 1 确认。
我在实跑这集的时候,ffprobe 结果显示是 720x480、29.97fps、MPEG-2、隔行源,时长约 11 分 40 秒,和"第 233 集第二部分"的预期吻合。接下来就可以放心进入处理流程。
3.2 去隔行、剪黑边、降噪:FFmpeg 一次搞定
这一节是核心中的核心。我先说结论:老番修复里,80% 的画面质感问题在这一步就已经决定了,AI 超分只是锦上添花。
先解决隔行。我试过yadif、bwdif和fieldmatch几种滤镜,最终稳定用bwdif。它的去隔行效果好于 yadif,又不像 fieldmatch 那么依赖参数调优。对动画这种大色块画面,bwdif 基本不会产生残影。
再解决黑边和多余画面。DVD 原盘在转电视信号的时候会在四周加上黑边,甚至左右会有一点不对称。为了不让超分模型把黑边也当画面放大,我习惯先crop掉。判断黑边范围的方法是抽一帧出来,用播放器放大看,或者直接用cropdetect滤镜让软件自动判断:
ffmpeg -i dragonballz_e233-2.mkv -vf "cropdetect=24:16:0" -frames:v 100 -f null -输出的日志里会有一行行crop=...建议值,选出现次数最多的那个就行。这集最终建议的裁切参数是crop=704:480:8:0,意思是左右各裁掉 8 像素,保留有效画面 704 像素宽。
接下来是降噪。降噪力度要先轻后重,不能一次降太狠。过度降噪的后果是线条发虚、色块发糊,比原来的噪点还难受。我用的是轻量级的hqdn3d滤镜,参数 1.5:1.5:3:3,具体含义是亮度空间域 1.5、色度空间域 1.5、亮度时间域 3、色度时间域 3。时间域参数比空间域高一点,是因为动画噪点多来自胶片颗粒,时间上连续降噪更有效。
把这四步串成一条命令是这样的:
ffmpeg -i dragonballz_e233-2.mkv \ -vf "bwdif=1:0:0,crop=704:480:8:0,hqdn3d=1.5:1.5:3:3,scale=960:720:flags=lanczos" \ -c:v ffv1 -c:a copy dragonballz_e233-2_clean.mkv这里有几个参数要解释一下。bwdif=1:0:0三个参数分别对应模式、去隔行后是否输出半帧率、是否有 deinterlaced 标志,默认值就行。scale到 960x720 是做个中间放大,让后续的 AI 超分有更多参考信息,不至于连原来就有的像素都要靠猜。编码到 FFV1 无损格式保存中间文件,是为了避免中间的多次转码产生画质损失——这是我踩过坑之后才养成的习惯。
注意:中间文件千万别用 H.264 或 H.265 这类有损编码保存。你后面还要超分,有损压缩会引入新的伪影,超分算法会把它们当成真实边缘重新放大,结果就是成品画面出现一圈圈波浪纹。
3.3 AI 超分:Real-ESRGAN 的安装与调用
中间文件做好之后,进入超分环节。Real-ESRGAN 的 ncnn 版本用法很简单:
./realesrgan-ncnn-vulkan -i dragonballz_e233-2_clean.mkv -o dragonballz_e233-2_sr.mkv -n realesr-animevideov3 -s 2 -f mkv这里-s 2表示放大两倍。我前面提到 960x720 放大两倍正好是 1920x1080,匹配最终目标。为什么不直接用-s 4一步到位?因为 720p 的中间文件直接放大 4 倍到 2880 像素,模型要脑补的细节太多,容易出现线条断裂和色块渗色。分两段放大的效果比一步到位要干净得多。
跑的过程中有两点很关键。第一,realesr-ncnn-vulkan会把视频拆成帧来处理,速度取决于你的显卡显存。我自己的机器是一张 8GB 显存的显卡,处理 11 分 40 秒的视频大概花了 40 分钟,属于正常范围。如果你发现显存不足,可以加-tile 256参数,它会把画面切成小块分别处理,速度会慢一些但更稳定。
第二,务必开启-f mkv输出 MKV 封装。因为 Real-ESRGAN 对 MKV 的支持更稳,不会像某些封装格式那样出现音画不同步。
跑完以后先别急着编码,用播放器抽几帧看看效果。重点看线条:人物轮廓是不是干净?背景的色块边界有没有渗色?如果发现问题,直接重新跑超分,不用动前面的中间文件。
3.4 帧稳定与色彩还原:容易被忽略的一步
超分出来的画面,往往有一个隐蔽问题:相邻帧之间的亮度、饱和度会轻微抖动。因为 AI 超分是逐帧独立的,同一幅画面在这一帧稍微暗一点,下一帧稍微亮一点,连续播放时就会产生一种"呼吸感",特别在天空、地板这类大面积纯色区域最明显。
解决思路是加一个轻量的时间域稳定处理。我用的方法是把超分结果再经过一次hqdn3d的时间域降噪,只做时间域、不做空间域,这样不会抹掉细节:
ffmpeg -i dragonballz_e233-2_sr.mkv \ -vf "hqdn3d=0:0:2:2" \ -c:v ffv1 dragonballz_e233-2_stable.mkv这一步对动画尤其重要,因为动画大片平涂色块,亮度抖动会被眼睛明显捕捉到。实测从 40 分钟的成片里随机抽了 5 段对比,加过稳定处理的段落播放流畅度明显更好。
色彩还原就看片源了。我这集片源的颜色有点偏黄,是当年DVD 批次常见的暖色调。如果你不是做收藏级修复,不建议大动干戈调色,因为动画的色彩风格是制作方有意为之的。老番修复的原则是"还原",不是"美化"。真要调,我建议用 FFmpeg 的eq滤镜做整体色温修正,比如:
ffmpeg -i input.mkv -vf "eq=gamma=0.95:saturation=1.05" -c:v libx265 output.mkv但记住:改得越少,越安全。
3.5 编码输出:H.265 参数怎么选
修复流程走到这一步,终于到了输出的环节。我的目标平台是本地硬盘收藏,所以用 H.265(libx265)编码,文件体积比 H.264 小 30% 到 40%,画质损失还更小。
关键参数是 CRF。CRF 是恒定质量编码,数值越小质量越高,文件越大。对动画素材,18 和 20 之间是比较舒适的区间。我最终用的是 18,视觉上已经分不出和原文件的区别,体积也在可接受范围内。
编码命令供参考:
ffmpeg -i dragonballz_e233-2_stable.mkv \ -map 0:v:0 -map 0:a:0 \ -c:v libx265 -crf 18 -preset slow -tune animation \ -c:a aac -b:a 192k \ -movflags +faststart \ -y dragonballz_e233-2_final.mp4这里有几个容易踩的坑。第一,-preset slow不是越快越好,preset 越慢压缩率越高,但耗时会成倍增长。我实测 presetslow和medium的体积差异只有 5% 左右,而耗时差了快一倍,所以实际用medium也可以,我保留slow是为了保证画面在高速运动场景下不出现块效应。第二,-tune animation这个参数值很适合动画编码,它能优化色块区域的码率分配,避免浪费在细节较少的大面积平涂上。第三,音频码率 192k 对 AAC 来说已经足够,动画的对白和配乐动态范围不大,不需要更高。
4. 常见问题与排查技巧实录
4.1 问题速查表
老番修复的坑说多不多,说少不少,我整理了一个速查表,基本覆盖了最常见的情况。
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 画面有横纹/梳齿 | 隔行扫描未去干净 | 确认bwdif是否在滤镜链最前面 |
| 人物边缘出现白边 | 压缩伪影被超分放大 | 降噪环节增加unsharp或者用cas锐化补偿 |
| 天空色块出现一圈圈波纹 | 中间编码用了有损压缩 | 中间文件改用 FFV1 无损编码重跑 |
| 画面整体糊、没细节 | 降噪力度过大 | 降低hqdn3d参数,保留更多原始细节 |
| 播放时亮度一明一暗 | 超分后时间域抖动 | 加hqdn3d=0:0:2:2做时间域稳定 |
| 音频轨道丢失或不同步 | 滤镜链改变了时间轴 | 用-map 0:a:0显式映射音轨 |
| 超分速度特别慢 | 显存不足触发分块 | 加-tile 256并用小图块重试 |
这张表我贴了不少时间才总结出来,前四行基本都是老番修复的新手必踩。你如果遇到类似问题,按表排查,十有八九能解决。
4.2 三个印象深刻的坑
挑三个印象最深的坑细说一下,它们都有点反直觉。
第一个坑是我最早跑的时候,把bwdif放在了crop后面。结果裁完的画面出现了明显的横向纹理。原因是裁切先改变了图像尺寸,后面的去隔行算法基于错误的参考区域做插值,导致行错位。所以滤镜顺序必须是:先bwdif去隔行,再crop剪裁。这个顺序问题排查了我接近一个小时,最后把滤镜链顺序调换就解决了。
第二个坑是超分完以后,人物头发和轮廓边缘出现了一圈亮边。一开始我以为是超分模型的问题,换了模型还是有。后来才意识到是降噪环节用了太强的空间域滤镜,把边缘附近的暗色像素抹掉了,超分时模型把这种边缘当成了高光轮廓去强化。解决办法是把hqdn3d的空间域参数调低,让边缘保留更多原始过渡。
第三个坑和时间有关:处理到一半停电后,重新跑的时候发现生成的文件时间戳变了,导致手动拼接 Part 1 和 Part 2 的时候出现重复帧。后来我才意识到不对劲——真正问题是输入文件的帧率标注不规范。老番有的源是 29.97fps,但元数据里标成了 30fps,FFmpeg 按 30fps 处理后,实际时长和原片会对不上,拼接时就会多出或丢失几帧。所以处理前用ffprobe确认r_frame_rate字段,必要时用fps=30000/1001强制校正帧率。这个细节我加在了预处理流程里,之后再没出过拼接问题。
5. 效果评估与个人心得
5.1 怎么客观对比修复前后
修复做完,不能光靠肉眼"感觉变好了",得有可对比的依据。我自己的做法是抽帧对比。在修复前后各抽同一时间点附近的画面,放在一起逐像素看。
具体方法是先用 FFmpeg 抽几张关键帧:
ffmpeg -i dragonballz_e233-2.mkv -ss 00:03:25 -frames:v 1 before.png ffmpeg -i dragonballz_e233-2_final.mp4 -ss 00:03:25 -frames:v 1 after.png然后看图时重点看这几个位置:人物脸部轮廓、背景中的文字、大面积纯色区域、快速运动场景的边缘。
以这集为例,修复前主人公脸上的线条边缘有明显的锯齿,背景地板有 MPEG-2 的块状伪影;修复后锯齿消失,线条平滑,块状伪影也基本看不到了。但细看之下,超分后的线条会略微偏软,不如原版那种手绘的锐利感——这是 AI 超分的固有特征,能接受,毕竟 480p 的老源,能到这个程度已经超出我预期了。
另外建议截一段 10 秒的视频片段,在播放器里循环对比,重点观察动态场景。静态帧看起来没问题,不代表动态播放没问题。时间域抖动、闪烁这类问题,只有在播放时才能发现。
5.2 我的调参心得和后续方向
做完整条流程,我最大的体会是:老番修复的技术含量大部分不在 AI 超分,而在前面的预处理。去隔行、裁剪、降噪、稳定,这些看起来不起眼的步骤,决定了最终成品的天花板。Real-ESRGAN 确实能把画面放得更大、补得更细,但如果源画面本身脏兮兮的,超分模型也只会把脏东西放大得更清楚。
参数方面,我认为最有价值的一个经验是"分步调试,一次只动一个参数"。我习惯先跑一条最低配置的快速管线,输出一个低质量但流程完整的视频,确认每个环节都通。之后再逐个环节增大参数、观察效果变化,直到找到平衡点。这样不会出现"跑完一整晚,早上发现滤镜顺序错了"的惨剧。
这个项目目前我只做了单集,后续想把 233 集的 Part 1 找回来,再把前后几集都跑通,做成一个完整的剧集修复批次。如果你也想从一两个文件入手练手,我建议别一上来就追求完美参数,先用默认参数跑完一集,感受一下流程,再回来调整。老番修复是个熟能生巧的活,多跑几集,你自然会找到适合自己片源的那套参数组合。