dragonballz_e276-1 这个文件名你多半也见过类似的:一段从 DVD 里抓出来、按集数和分段号命名、看起来毫无感情色彩的视频素材。这是我自己归档项目里的一个片段——把手上那套《龙珠Z》的 DVD 原盘抓轨成 MKV,按“内容名_集数_分段”的规则切出若干小文件,e276 是第276集,-1 是这一集被切出来的第一段。这篇文章不是剧情回顾,而是一个完整实操复盘:我拿这个片段做了素材体检、预处理、超分、编码,然后把链路扩到了整季。如果你也在做老番修复、AI 超分、视频归档,这篇从头到尾的记录应该能帮你省掉不少试探成本。
1. 从文件名到项目蓝图:dragonballz_e276-1 怎么读
1.1 命名规则背后的批量处理思路
一眼看过去,dragonballz_e276-1 就是非常典型的“内容_集数_分段”命名:全小写、下划线分隔、没有空格。这套命名我在脚本里处理得格外顺手,因为不用关心转义问题,文件系统里的排序也天然稳定。
为什么要在文件名里保留“-1”这种分段编号?因为一集原盘压出来动不动好几 GB,如果整集丢进超分流程,显存和内存很容易被顶满,跑到 80% 再出问题,又得从头开始。我按 3 到 5 分钟一截,每段独立处理、独立输出,最后用封装工具拼回完整一集。这样即使某个分片崩了,只需要重跑那一个分片,之前的活儿不会白干。
这套命名还有另一个好处:写批处理脚本时,完全可以通过正则把集数和分段号拆出来,自动生成对应的输出路径和对比文件名。我在项目里从第1集到第291集全部延续了这套规则,后面做整季检查时,定位到具体帧只要看路径就清楚在哪一段。
1.2 这个片段在项目里的定位
龙珠Z第276集属于魔人布欧篇后段,画面特点很鲜明:大量能量波、爆炸特效、高速位移镜头。这类画面对手绘赛璐璐扫描成数码信号后的老素材来说并不友好,伪影种类特别杂——既有隔行扫描带来的梳状条纹,也有赛璐璐叠片产生的高光边缘色差,还有胶片颗粒和压缩噪点在暗部乱跳。
按理说应该选一集画面安静的先练手,但我反而觉得拿这段来建流程更合理。如果一套链路能处理 276 集这种高动态、多特效的片段不出问题,那前面那些以静态对话为主的集数基本就是降维打击。整个项目的目标也不是把它做成 4K 重制版,而是基于原始素材的信息量,把它处理到适合大屏观看、同时画面不至于被算法脑补得太假的程度。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动手前的素材体检:底子决定修复上限
2.1 用 ffprobe 摸清容器的底细
拿到任何素材,第一件事不是开特效,而是先摸清它到底是个什么底子。对 dragonballz_e276-1 我第一轮直接上 ffprobe 扫描:
bash复制ffprobe -v error -show_entries stream=index,codec_name,codec_type,width,height,pix_fmt,r_frame_rate,bit_rate -of default=noprint_wrappers=1 dragonballz_e276-1.mkv
输出大概是这样的:
code复制stream 0: codec_type=video, codec_name=h264, width=720, height=480, pix_fmt=yuv420p, r_frame_rate=30000/1001, bit_rate=2800 kb/s
stream 1: codec_type=audio, codec_name=aac, sample_rate=48000, channels=2
r_frame_rate=30000/1001 即 29.97fps,720×480 是 NTSC DVD 的标准尺寸。比较坑的是 pix_fmt 显示 yuv420p,会让不少人误以为它已经是逐行编码。实际上很多老 DVD 转出来的 H.264 都是这种“伪逐行”状态,内部依然是隔行结构,只是包装层把它标成了逐行。判断是不是隔行,不能光看容器信息,必须走到逐帧观察这一步。
2.2 逐帧观察:隔行、噪点、色偏都在这里现形
我用最笨但最可靠的办法:用 FFmpeg 从片段里导出连续 PNG 帧,在图像查看器里快速翻页。不翻不知道,dragonballz_e276-1 第 100 帧和第 101 帧一对比,背景线条上出现了明显的梳状伪影,这是典型的隔行扫描痕迹。角色轮廓边缘能看见轻微的彩色“彩虹边”,常见于赛璐璐扫描层,高光区域还带一层细颗粒的噪点。
更麻烦的是色偏。从第 1600 帧看起来,字幕下方的黑色区域并不是纯黑,反而偏青。原因基本可以判断为原 DVD 编码时色域受限,加上当年母带本身就有些偏冷。这种色偏没法靠后期拉一条曲线解决,必须在预处理阶段做一次针对性的白平衡修正,否则后面 AI 超分模型会把这种偏色当成画面特征放大——处理完的结果反而是“高质量”地偏色。
2.3 这个素材能不能直接超分?先别急
很多人会想:源头才 480p,直接扔给 Real-ESRGAN 不就完了?但结果多半不如预期。隔行结构的帧如果直接喂给超分模型,模型会把梳状纹理误认为是真实细节去恢复,输出画面看起来就会更硬更假,边缘像锯齿一样生硬。
我的原则是:先做预处理,再做超分。顺序反了,后面的所有调校都是在给错误结果打补丁。预处理链路里最核心的三件事,就是反交错、降噪和色偏修正,也就是下一章要展开的内容。
3. 预处理链路:为超分铺路的每一道闸门
3.1 反交错与帧率统一
反交错我用了 QTGMC,跑在 VapourSynth 里。QTGMC 效果确实顶,但速度非常慢,所以针对这个 480p 素材我把 Preset 设为 Medium,并把 TR2 设成 1。反交错之后,帧率保持在 29.97fps,没有做任何帧率转换。有朋友劝我把 29.97 转成 23.976 再靠补帧造出电影感,但我没这么干。龙珠Z日常镜头本来就是 30fps 制式,强行改成 24fps,动作节奏会变得一顿一顿,反而画蛇添足。
反交错之后要重点检查一种情况——“橡皮筋效应”。因为部分镜头本来是逐行拍摄,只是被错误标记成了隔行,QTGMC 对这类帧会多做一次插值,结果画面边缘出现轻微抖动。处理这种局部问题不能一刀切,我在脚本里加了一层条件判断,遇到这种帧直接跳过反交错,只做简单的场匹配。单集里这种帧数量很少,但处理不好会让观感瞬间掉档。
3.2 动漫专用的降噪和去光环处理
降噪环节我优先用 BM3D。它在压住高斯噪声的同时,对边缘保留的能力明显强于普通均值降噪。参数大约在 sigma=1.2,这个数值是反复试出来的:太低压不住颗粒,太高又会把线条“洗”成一团糊。动画画面大量是扁平的大色块,一旦降噪过度,角色皮肤和衣服会呈现塑料感,比不降噪还难看。
另外一道关键步骤是去光环。手绘动画在高对比边缘附近总会出现一圈白边或者彩色边,术语里叫 haloing 或 chromatic aberration。处理它用的是 DeHalo_alpha。这个滤镜必须谨慎,参数开大了容易把线条磨平。我在实测中把 rx、ry 控制在 2.5 左右,可以去掉大部分边缘光晕,同时不会让角色发丝细节变得模糊。
3.3 色偏修复与裁切边界
这一步把偏青的阴影校了回来。我通过 VapourSynth 里的 ColorBalance 针对阴影通道的蓝色和绿色做增益补偿。改完参数后,习惯性地把同一帧和原片左右摆在一起对比,确认背景里的灰色恢复了中性,而不是单纯加了一层暖色滤镜。
裁切也是预处理里的重要一关。DVD 画面四周通常有一圈黑边和几条同步信号的噪线,裁切必须精确到像素级。我不是随手裁个 10 像素就完事,而是先把画面裁到 704×480 的有效区,再根据每帧边缘的噪声分布决定是否额外切掉几个像素。这里最容易犯的错是“切多了”,把原本拍摄时的完整画框切掉,后期想回到原始构图就难了。经过裁切,最终进入超分的是 704×480 的有效画面。
4. 超分与输出:参数不是越高越好看
4.1 模型选型:Real-ESRGAN 和备选方案
超分环节我用的是 Real-ESRGAN 的动漫专用模型 realesr-animevideov3。为什么选它?因为它针对动画做了优化,对线条和色块的还原比较友好,不容易把赛璐璐上色的硬边缘搞成噪点。命令行大概是:
bash复制realesrgan-ncnn-vulkan -i preprocessed_276_01.mkv -o sr_276_01.mkv -n realesr-animevideov3 -s 2 -f mkv
有人坚持用 4 倍,我这里只用 2 倍,原因下一节细说。也顺便提一下 Anime4K,它在实时播放场景里很轻量,做补帧滤镜也够用,但作为批量离线修复工具,稳定性不如 Real-ESRGAN。Topaz Video AI 同样效果不错,图形界面友好,但闭源模型在手绘动画上偶尔会脑补出奇怪的细节——那些“幻觉细节”在自动流程里很难控制,所以我最终没有选它做主链路。
4.2 分辨率决策:为什么我最终输出 1440×1080
这里有一个很容易被忽略的逻辑:4:3 的 480p 内容最终应该输出成什么分辨率,取决于有效画面的像素壕。这组素材裁切后是 704×480,做 2 倍超分得到 1408×960,再经过一次 Lanczos 缩放匹配 1080p 标准的 4:3 比例,正好是 1440×1080。
有的教程会让你直接干到 1920×1080,但那样要么把画面横向拉伸,要么左右加黑边变成信箱模式,人脸比例都会不对。改为 4 倍超分呢?704×480 会变成 2816×1920,文件体积成倍增长,可显示器只有 1080p 的物理像素,信息量完全溢出。综合画质、体积、兼容性,1440×1080 是这套流程里相对平衡的答案。如果你打算做二次剪辑,保留 1408×960 或 2816×1920 也可以,但实际观看效果提升非常有限。
4.3 编码参数与封装细节
输出编码我用 x265,压制参数为 crf 18、preset slow。对于动画内容,crf 18 已经能保住大块色域里的细腻渐变,再低就是浪费码率。如果你对编码速度更敏感,换成 preset medium 也可以,在最终成片里画质差异很难肉眼看出来,但编码时间能省下不少。
音频方面,原始 AAC 音轨我直接保留,没有重新转码。只有发现音量偏低时,才加一次 loudnorm 归一化。最后用 mkvmerge 封装,把外挂的 ASS 字幕一起合进去,输出文件名统一改为 dragonballz_e276_processed.mkv,方便跟原素材区分。
5. 从单集到整季:批处理中踩过的坑
5.1 集间色彩不一致的问题
单集流程跑通后,我把脚本铺到整季,结果第一个崩溃的发现是:相邻几集在色彩上就明显不一样。有的偏暖,有的偏绿,个别集数暗部直接发红。主要原因来自不同批次的压盘参数差异,也可能和当年母带采集设备有关。如果所有集数都套用第276集那套色偏校正参数,大概率把第275集的肤色整成一片蜡黄。
解决办法是给每一集单独做一次抽帧检查。我定了一个基准:找画面里的白墙、灰色地面这类中性灰区域作为参照,然后手动微调色偏参数。参考基准可以统一,但每集的调整值不能省。这样虽然每集多花十来分钟,但避免了批量流程里“成功地把所有画面颜色带偏”的风险。
| 集数范围 | 主要偏色方向 | 调整策略 |
|---|---|---|
| 第 276 集附近 | 暗部偏青 | 补偿蓝绿通道增益 |
| 第 275 集附近 | 整体偏暖 | 降低红通道高光 |
| 第 278 集附近 | 暗部偏红 | 增加绿通道阴影补偿 |
5.2 局部崩坏的帧:自动流程怎么兜底
第二个坑是局部崩坏帧。超分模型偶尔会在能量波这类高亮特效上失控,把原本是一团光晕的画面渲染成噪点马赛克。单集测试时不容易遇到,但批量处理时平均每集都能找到一两处。
我给流程加了一道后检步骤:每个分片处理完后,自动抽几帧关键画面做人工抽检。如果发现某个分片大量出现马赛克状或塑料感崩坏,就把它标记为失败,只单独重跑这个分片。重跑时改用更低倍率,比如 1.5 倍,或者换用通用模型,再对比效果决定保留哪版。这种兜底机制在自动流程里非常重要,因为模型输出质量并不总是稳定的。
5.3 验证批次结果的对比工具
为了不靠肉眼刷到瞎,我自己做了一个简单有效的对比方法:从原片和处理完的片子里各抽同一帧,左右拼接成一张 PNG,再生成一个左右快速切换的 GIF。拿这个 GIF 在显示器上反复看,颜色、清晰度、边缘伪影的变化一目了然。
另一个辅助手段是不变量检查:计算处理前后帧的平均亮度和色度直方图。如果处理前后的亮度分布差异超过 20%,说明预处理链可能引入了不自然的对比度变化,需要回头调整参数。这个指标不是绝对标准,但能帮我快速筛出哪些片段需要重点人工检查。
6. 批处理阶段容易忽略的几个工程细节
6.1 中间帧别删,省得后面重头再算
超分之后的中间帧我全部保留在独立临时目录里,不直接覆盖原始素材。这么做的理由很实际:一旦出现了更好的超分模型,可以直接替换超分环节,而不用重新走一遍预处理。另一方面,如果你后续想拿这些画面做模型训练数据或风格分析,中间帧是现成的高质量输入,省掉大把重算时间。
6.2 脚本必须能断点续跑
批处理脚本一定要支持断点续跑。因为整季流程要跑好几个晚上,中途停个电、显存溢出都很常见。我在文件名里保留分段编号的意义就在这里:脚本每次执行前会检查输出文件是否已经存在,存在就直接跳过。前一个晚上跑到一半崩了,第二天直接把同一个命令再跑一遍,它只会接着处理没完成的部分,不会从头开始。
6.3 一个常被问到的“越修越糊”问题
总有人来问我:为什么跑出来的画面比原片还糊?大多数情况确实不是超分模型的锅,而是预处理阶段降噪下手太重。AI 超分不是魔法,它在颗粒和细节被完全抹掉的情况下,真的补不回来什么。我自己早期也这么翻过车:为了把噪点压得干干净净,把 sigma 提到了 2.5,结果人脸全部变成塑料质感,后来降回 1.2 才恢复自然。所以每次跑完新参数的批量任务,我都会先随机抽几帧,把原片和处理结果来回切着看,确认没有过度平滑,再铺到整季。
