新闻| 文章| 资讯| 行情| 企业| wap手机版| article文章| 首页|会员中心|保存桌面|手机浏览
普通会员

贵州微笑叁陆伍营销管理有限公司

贵州微笑叁陆伍营销管理有限公司,女装,男装,运动服装,服装加工,皮革加工

企业列表
新闻列表
  • 暂无新闻
推荐企业新闻
联系方式
  • 联系人:吴霞
  • 电话:86 020 18688390468
首页 > 新闻中心 > 视频插帧软件SVP:视频播放大折腾总结之二
新闻中心
视频插帧软件SVP:视频播放大折腾总结之二
发布时间:2024-11-10        浏览次数:0        返回列表

视频插帧软件SVP:视频播放大折腾总结之二

感觉这技术还在成长中啊,好多算法还只停留在原始的源码的阶段

这个:

DAIN—APP,博士大神写的

嗯,基于光流法

先将视频导出为帧序列,在根据图片算出中间帧,也是深度学习算法

实际使用我的GTX1060满载,但是2min只能算1帧,这速度太仙儿了吧。。

还发现某些场景还是有很严重的崩坏,有可能是光流的通病

还有NV很早就吹出来的算法:Super Slo Mo 

官方的pdf文档:

背景:挖坑官方却没人填,但是github上有一个项目:https://github.com/avinashpaliwal/Super-SloMo

还是很原始的源码状态,自己训练数据,也能下载现成的(显卡:燃烧我的卡路里)

这个github上开源的项目,用了两个CNN(卷积神经网络)给视频计算中间帧,似乎基于光流法

还得自己跑数据,训练模型(也能下载现成训练好的的)

对Python狗屁不通所以目前未使用过

之后NV在NGX里面发布了这个东西

NVIDIA NGX: DL FOR CREATIVE APPLICATIONS提供了包含该工具的三件套

这个NGX应该是面向开发者的

只有Turing架构(RTX)显卡能使用

真要是用的话也不方便,主要是为了插帧的算法,所以没有转场检测等一些实用的算法

所以没办法测试,但是Lee的2070就能用了

效果对比Lee已放出()

amazing!

其他的算法也是有很多(摘自知乎专栏https://zhuanlan.zhihu.com/p/73599727)

海油好多发表了的论文~

计算机视觉肯定会借助AI这波火起来的233

然后。。。。

本文主角:SVP

官网:

知名度应该挺大的,因为调用方便,能实时插帧(相对于其他插帧方法)

基本原理是通过avisynth调用svpflow1,2这两个插件来运算的

但是也是因为它实时插帧的特性,质量也不得不如一些深度神经网络算法的效果好

但是功能算是挺成熟了,能通过各种滤镜调用,在线插帧

也能自己调用avisynth离线插帧

插出来的效果和原来25帧比要流畅的多

但是在复杂,运动快的地方单帧看的话,发现崩的不成样子。。。

自己也插了一份Show Yourself放B站了()

Lee也有对比视频:

有Pr自带的光流法插帧

SVP基于光流的插帧

NGX的NVIDIA Super Slo Mo算法

目前来说,svp有很多方法可以使用:

(1)安装

清单:poplayer avi svp ffdshow (madvr lav filters)

avi传到蓝奏了:自取 https://cyk2020.lanzous.com/iioh

注:前四个必须得都是32位或者64位,不同版本互不兼容(玄学问题)

avisynth要在svp之前安装,否则SVP会提示引擎未安装

(2)使用

打开pot,先关闭内置处理滤镜,以防和我们的滤镜抢资源

之后打开全局滤镜优先权,按下面顺序添加滤镜

pot滤镜的视频流的方向在全局滤镜里是从上到下,所以按图下配置(lav splitter source和lav splitter任一都行)(只需要注意你需要插件的顺序)(madvr滤镜可加可不加你也可以在pot的视频渲染器中随时切换,目前只是知道如果在全局滤镜加上的话mad自己的截图功能会覆盖pot,这样截图便可以调用mad的算法)

设置ffd用不到的滤镜为不使用,以防抢资源

需要的滤镜raw必须在lav的下面,然后全部设置为强制使用

若要使用的话,先打开视频,托盘会显示ffdshow raw滤镜,视频流是从lav—>ffdshow raw

ffd的输入只能是YV12,avisynth处理视频也要先转成YV12格式

这时打开SVP,就能看见左下角的LOGO和明显的流畅

注:SVP设置教程:https://tieba.baidu.com/p/3022110017?pid=49940778215&see_lz=1&red_tag=1296417724

不过某些场景的崩坏确实很严重

貌似1.5m的帧插补模式貌似崩坏的场景较少

以上

SVP软件就是用这种方法运行的

这是svp最官方(广泛)的食用方法了

优点是简单易用,能使用svp软件的GUI和硬件加速,后面把svp的核心dll拉出来,自己调用avisynth来插帧就仅仅使用的是CPU了...

缺点是ffdshow在处理hdr数据时会把hdr信息丢掉,输出是带着SDR信息,渲染器认不出来hdr信息就自动按sdr处理了,这样色调映射和色域转换也无法进行

but

emm

所以

2.可以抛弃ffdshowsource()源滤镜,直接通过pot的源滤镜potplayer_source()调用svp

安装和之前一样,这次ffdshow不用安装了

svp程序是先生成一个avs文件在通过avisynth调用svpflow.dll这两个文件插帧的

介绍一下svpflow:

这两个就是svp的核心文件,用来完成帧插补的功能

一个获取运动信息(光流)

一个做运动补偿

使用:

在使用svp时,软件会生成一个avs文件,可通过下面方式找到(播放完了之后svp会删除这个文件)

这便是avs配置文件内容

loadplugin:加载avi插件:两个dll,还有提供解码后视频数据的源滤镜ffdshow,(这也就是为什么要用ffdshow的原因,不过改成别的就能用别的原滤镜了,我这里用的是LSMASH)

剩下的代码就是这几个插件的配置了,根据自己的需要去改

大部分配置都是和SVP的设置一一对应的:

flow1

SVAnalyseSVSmoothFps

默认参数:

1.

global super_params = "{pel:1,scale:{up:0},gpu:1,full:false,rc:true}"

super=SVSuper(last, super_params)

在1中可以看出有两个参数:

1.source

gpu

scale像素插值算法?

up:Subpixel interpolation method for pel=2,4.

down

rc:

2.

global super_params = "{pel:1,scale:{up:0},gpu:1,full:false,rc:true}"

global analyse_params   = "{block:{w:8},main:{search:{coarse:{distance:-12,bad:{sad:2000}},type:2}},refine:[{thsad:250}]}"

super=SVSuper(last, super_params)

SVAnalyse(super, analyse_params, src=https://www.bilibili.com/read/last)

1.superMSuperMVTools 2.5

 block:

块重叠值。 0-无,每个方向上的块大小为1-1/8,块大小的2-1/4,块方向的3-1/2。重叠越大,块数越多,处理速度越慢。

最终的像素重叠值应与CPU渲染均匀。(生成的文件中无此参数)

main运动搜索设置

(1)levels:正值是在搜索运动矢量时进行层次分析时使用的级别数。负值或零是在搜索运动矢量时进行的层次分析中未使用的粗略级数。

(2)search

2-六边形搜索,类似于x264,

3-不均匀的多边六边形(UMH)搜索,类似于x264,

4-详尽搜索,最慢,但结果最佳。

最佳搜索范围:

0-根本不进行最高级的搜索,可以大大提高搜索速度,但在GPU渲染下仍然看起来不错。此选项与“ super.pel”相反。

> 0-经典固定范围(以像素为单位)。

<0-基于块局部对比度的“自适应”范围。对于低对比度的块(例如黑色/灰色),范围较小或为零,但对于具有许多可见细节的块,范围较大。常见场景中的有效平均范围约为该值的1/3。

3) sort

(3 distance同上 (

Main search penalties for motion coherence.

Set the coherence of the field of vectors. The higher, the more coherent. However, if set too high, some best motion vectors can be missed.

This value is different from MVTools, see remark for explanations.

penalty.lambda scaling mode between levels. 1.0 means no scaling, 2.0 - linear, 4.0 - quadratic dependence from hierarchical level number.

This value is different from MVTools, see remark for explanations.

SAD limit for lambda using. Local lambda is smoothly decreased if SAD value of vector predictor is greater than the limit. It prevents bad predictors using but decreases the motion coherence. Value is scaled to block size 8x8.

Relative penalty (scaled to 256) to SAD cost for new candidate vector. New candidate vector must be better will be accepted as new vector only if its SAD with penalty (SAD + SAD*pnew/256) is lower then predictor cost (old SAD). It prevent replacing of quite good predictors by new vector with a little better SAD but different length and direction.

Relative penalty (scaled to 256) to SAD cost for global predictor vector (lambda is not used for global vector).

Relative penalty (scaled to 256) to SAD cost for zero vector. It prevent replacing of quite good predictor by zero vector with a little better SAD (lambda is not used for zero vector).

Relative penalty (scaled to 256) to SAD cost for up to 8 neighbours vectors.

Relative penalty (scaled to 256) to SAD cost for "reverse" vector (already found vector from reverse search direction), works only with "analyse.vectors: 3".

refine

Interpolated vectors of old blocks are used as predictors for new vectors, with recalculation of SAD.

(1)thsad 搜索只会重新估计SAD高于此阈值的劣质新向量。好的向量不会更改,但是其SAD将被更新(重新计算)。值缩放为块大小8x8。

(2)search

1)type

2)distance

3)satd

pnew: 50Same as main.penalty.pnew by default.

(4)special

flow2.dll

1.SVSmoothFps(last, super, vectors, smoothfps_params, mt=Threads, src=https://www.bilibili.com/read/last)

用法:

Will change the framerate (fps) and number of frames of the source clip. The function can be use for framerate conversion, slow-motion effect, etc. It uses motion vectors found with SVAnalyse function to create interpolated pictures at some intermediate time moments between frames. Some internal masks (cover/uncover, vectors quality) can be used to produce the output image with minimal artifacts.

将改变帧率(fps)和帧数的来源剪辑。该功能可用于帧数转换、慢动作效果等。它使用svanalyze函数找到的运动矢量在帧与帧之间的中间时刻创建插值图像。一些内部遮罩(覆盖/揭开,矢量质量)可以用来产生输出图像与最小的工件。

  SVSmoothFps(..., sar=float(ffdshow_sar_x)/ffdshow_sar_y, ...)

  threads = 10   SetMTMode(3,threads)   #....   SVSmoothFps(..., mt=threads, ...)

2.vectors=SVAnalyse(super, analyse_params, src=https://www.bilibili.com/read/last)(在SVSmoothFps之前被定义)

3.global smoothfps_params = "{gpuid:11,rate:{num:3,den:1},algo:23,mask:{area:50,cover:80},scene:{blend:true,mode:0}}" (在SVSmoothFps之前被定义)

其中gpuid:11

rate:{num:3,den:1}

子项:

num:

den: Denominator of multiplier for frame rate change.

abs: If true then num/den define absolute frame rate value instead if multiplier for source frame rate.

algo:23

cover

Cover/uncover mask strength, more means "more strong mask". Recommended values 50-100.

area

Bad areas (identified by vector's SAD values) mask, more means "more strong mask". Recommended value is 100, but it can dramatically reduce smoothness effect.

area_sharp

Defines the exponent of relation between SAD and area mask values.

blend:

(怎么这么乱,不想排版整理了,自己看清得了