基本介绍

https://github.com/TianZerL/Anime4KCPP

关于Anime4KCPP

Anime4KCPP提供一个改进后的bloc97的Anime4K算法0.9版本,同时也提供自己的CNN算法ACNet。Anime4KCPP提供多种使用方式,包括预处理与实时播放,其致力于成为高性能的视频或图像处理工具。【注意该算法版本可能不如最新的Anime4K,毕竟那玩意都4.0了,但是在WIN通过Anime4K直接导出的工具貌似就没怎么找到】

关于Anime4K09算法

Anime4K算法是一种简单且高质量的动漫类图像超分辨率算法,它并不使用机器学习,因此速度非常快,可用于实时处理和预处理。【因此内存、显存等占用较低,且支持CPU、GPU编解码】

关于ACNet

ACNet是一个基于卷积神经网络的超分辨率算法,旨在同时提供高质量和高性能。HDN模式能更好的降噪,HDN等级从1到3,越高降噪效果越好,但可能导致模糊和缺少细节。

为什么选择Anime4KCPP

跨平台支持,已在Windows,Linux和macOS (感谢NightMachinary)上通过编译测试。支持GPU加速,只需一块实现了OpenCL1.2或更高版本的GPU。CUDA加速同样支持。高性能,低内存占用。支持多种使用方式。

类似产品

比如 Real-CUGAN、Waifu2x、Topaz Video AI等

使用演示

直接在 https://github.com/TianZerL/Anime4KCPP/releases 下载发行的版本即可。比如win就直接运行 Anime4KCPP_GUI.exe

实验测试

原视频,107MB,分辨率960x540,码率0.5M,24FPS,h264.avc编码
Test1,Anime4KCPP模式,处理次数2、细化最大次数3、细化强度0.6、处理强度1、放大倍率2、线程99、avc1、24fps、GPU加速-CUDA,耗时408s,1.46G,1080P,码率8.7M
Test2,Anime4KCPP模式,处理次数2、细化最大次数3、细化强度0.6、处理强度1、放大倍率2、线程99、avc1、24fps、GPU加速-OpenCL,耗时408s,1.48G,1080P,码率8.8M
通过Test1和Test2发现,CUDA和OpenCL加速模式没有发现明显区别,速度几乎一致,文件大小和码率中OpenCL要略大一点,画质上看不出差距。
Test3,Anime4KCPP模式,处理次数2、细化最大次数3、细化强度0.6、处理强度1、放大倍率2、线程99、hevc、24fps、GPU加速-CUDA,耗时192s,看不见导出文件,显然该模式有问题不可用。

根据文档,https://github.com/TianZerL/Anime4KCPP/wiki/Codec 中提到 【注意原视频建议H264.AVC编码】
mp4v(fastest, default and recommended)
dxva(only for Windows, Hardware acceleration)
avc1(H264)
vp09(very slow)
hevc(not support in Windows)
av01(not support in Windows)

1,在Windows环境下,hevc和av01目前并没有被支持
2,至于mp4v和avc1什么区别,可参考 https://blog.csdn.net/godvmxi/article/details/52875058 。其实都是H264,只不过封装格式有区别
AVC1 描述:H.264 bitstream without start codes.一般通过ffmpeg转码生成的视频,是不带起始码0×00000001的。
H264 描述:H.264 bitstream with start codes.一般对于一下HDVD等电影的压制格式,是带有起始码0×00000001的。
3,vp09标注很慢,相比是不支持硬件编码,而软件编码的问题
4,dxva标着只支持windows但是支持硬件加速

Test4,Anime4KCPP模式,处理次数2、细化最大次数3、细化强度0.6、处理强度1、放大倍率2、线程99、dxva、24fps、GPU加速-CUDA,耗时197s-255s,大小3.52G、码率21M
GPU和CPU使用率变得稳定,不像AVC1那样上蹿下跳,同时编码有12%左右的占用,3D性能大概80%,CPU大概50%,但是编码完之后有大量的硬盘写入,受到硬盘性能限制,最后时间跑到了255s,该模式实际导出的也确实是H264.AVC编码格式

ffmpeg -y -hide_banner -hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid -i "F:\FFOutput\Test3_AGE.mp4" -c:a copy -c:v hevc_nvenc -qp 22 "F:\FFOutput\Test4_AGE-qp22.mp4"

ffmpeg -y -hide_banner -hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid -i "F:\FFOutput\Test3_AGE.mp4" -c:a copy -c:v hevc_nvenc -qp 25 "F:\FFOutput\Test4_AGE-qp25.mp4"

用qp22和25压制为hevc编码之后,qp22的码率1.3M大小251M,qp25的码率0.9M大小177M,估计用dxva后压到qp22是不错的选择。

Test5,Anime4KCPP模式,处理次数2、细化最大次数3、细化强度0.6、处理强度1、放大倍率2、线程99、mp4v、24fps、GPU加速-CUDA,耗时328s,大小847M、码率4.8M

Test6,Anime4KCPP模式,处理次数2、细化最大次数3、细化强度0.8、处理强度1、放大倍率2、线程99、dxva、24fps、快速模式、GPU加速-CUDA,耗时191s-245s,大小3.55G、码率21M
速度提升很小,并不是特别明显,不知道会不会影响质量,如果影响质量的话最好还是别开。

Test7,Anime4KCPP模式,处理次数2、细化最大次数3、细化强度0.8、处理强度1、放大倍率2、线程99、dxva、24fps、透明通道、GPU加速-CUDA,耗时193s-251s,大小3.55G、码率21M
看上去透明通道对时间没什么影响,码率大小什么的也没感觉区别,没区别就不用开了。

Test8,Anime4KCPP模式,处理次数2、细化最大次数3、细化强度0.8、处理强度1、放大倍率2、线程10、dxva、24fps、GPU加速-CUDA,耗时235s,大小3.55G、码率21M
线程10和99没有看出来什么区别,可能线程多的也没啥用,甚至线程99更弱。

Test9,Anime4KCPP模式,处理次数3、细化最大次数4、细化强度0.8、处理强度1、放大倍率2、线程5、dxva、24fps、GPU加速-CUDA,耗时222s,大小3.67G、码率22M

Test10,Anime4KCPP模式,处理次数3、细化最大次数4、细化强度0.2、处理强度1、放大倍率2、线程10、dxva、24fps、GPU加速-CUDA,耗时251s,大小3.58G、码率21M

Test11,Anime4KCPP模式,处理次数3、细化最大次数4、细化强度0.8、处理强度1、放大倍率2、线程24、dxva、24fps、GPU加速-CUDA,预处理CAS,后处理弱高斯+双边滤波,耗时1112s,大小3.46G、码率20M

Test12,ACNET模式,放大倍率2、线程24、dxva、24fps、GPU加速-CUDA,耗时225s,大小3.05G、码率18M
CPU直接满载起飞,不过有时会调到55%,GPU 75%左右,注意这玩意会把内存弄起飞

一番体验下来,ACNET的效果个人体感优于Anime4K(当然也有可能是配置和算法模型问题)

注意,通过测试发现,同时大幅度提升处理次数和细化次数反而影响画面(失真)