2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

一种基于视频帧差异视频卡顿检测方案

  • 2021-03-02
  • 本文字数:1331 字

    阅读完需:约 4 分钟

一种基于视频帧差异视频卡顿检测方案

奇技 · 指南

在视频质量检测中,检测视频是否卡顿也属于视频质量检测的标准之一,在构建视频检测平台中,这一步至关重要。


本文要说明的是把视频转换为帧序列,根据计算帧之间的差值,寻找帧序列中是否有断层,来判断当前视频是否存在卡顿的现象。


结果为一个数据, 0 代表无卡顿现象, 1 代表存在卡顿现象

技术与架构

用户上传视频文件后,使用 ffmpeg 转换为图片序列,抽取图片信息,计算所有序列帧的图片运动像素,计算所有序列图片的平均运动水平,动态计算动态因子,输出判断结果, 0 表示当前不存在卡顿点, 1 表示当前存在卡顿点。



整体方案主要分为六个部分

1. 图片处理

2. 图像相邻帧像素计算

3. 计算所有图片运动量,组合为运动集合

4. 消除视频图片场景剪辑比例,计算平均运动量

5. 计算动态因子

6. 返回结果

技术优势

  • 不需要准备大量的数据集来训练模型,只针对当前要处理的视频进行计算;

  • 不会因为大量的动态场景和静态场景影响卡顿检测的结果;

  • 精准高效,计算量相对较低

技术实现

图片处理

这里采用灰度图片来作为视频卡顿检测的输入序列图片数据,重新设置当前图片的大小为 360*640,当前区域为我们后面计算的兴趣区域.设定兴趣区域,可以有效的避免一些像素点计算的噪声影响。

图像相邻帧计算

A.遍历当前图像集,使用 t+1(下一时刻帧) 的像素减去 t(当前时刻帧)的像素值,计算出两帧之间的差异信息。

B.设定阈值,这里的阈值是一个常量值 = 30,当两帧之间的差异值> 30 的时候,就任务图片存在运动像素,否则,没有存在运动,值为 0,此步骤消除了低运动噪声,或感知能力下的运动像素。

计算所有图片的运动量

将步骤 2 中的值进行平方,将幅度转换为能量,并计算每个视频帧的平均值.该平均值就是当前帧的能量值,所有帧的动量值记为 TI2。

消除视频图片场景切换比例,计算平均运动水量

A.在计算平均值之前要消除场景剪辑比例,这里使用的常量值为 0.02,就是说我们有 100 个帧要消除 2 个场景的剪辑。


B.对 TI2 从小到大排序,在这个序列中,根据 B 中的比例值,消除最高和最低的两个噪声值,循环遍历 TI2,计算 t 时刻帧之前所有帧的平均值,并把这个平均值进行累加.当场景切换的时候,TI2 序列的低点和高点均被消除,平均 TI2 值(TI2_AVG)不会收到影响。

计算动态因子

在近乎静态的场景和动态的场景中,由于像素的变动很小,或者像素变动很大,卡顿的帧/丢失帧会存在少量/大量的运动信息,在确定运动水平的时候需要涉及主观直觉的要素,所以需要利用动态阈值来确定卡顿的视频帧。


在视频中,存在的动态场景较多,该阈值增加,静态场景,阈值减少。


Dfact = a + b * log(TI2_AVG)  a ,b, c 都为常量,分别为 2.5, 1.25, 0.1,c 为限制 Dfact 较小的一个值。

当 Dfact < c = Dfact else 等于 c, Dfact 取值范围是[0, 0.1]之前的一个值。

帧的丢弃和运动量是线性依赖于平均运动能量的对数。

返回结果

循环遍历视频帧,获取每一帧的 TI2 值,如果当前的 TI2 值<= Dfact * Mdrop,认为当前的帧是卡顿的,也就是值为 1,如果当前的 TI2 值> Dfact * Mdrop, 任务当前帧不存在卡顿,把视频所有的帧按找时间顺序排序后,就是我们当前视频卡顿检测的列表值。


Dfact 为上述计算的动态因子,Mdrop 为固定运动能量阈值来确定帧的卡顿.Mdrop 为常量值 0.015。

效果展示


选择 9 张连续的视频帧图片



返回检测结果

本文转载自:360 技术(ID:qihoo_tech)

原文链接:一种基于视频帧差异视频卡顿检测方案

2021-03-02 13:003125

评论

发布
暂无评论
发现更多内容

HotSpot JVM 内存管理

爱好编程进阶

Java 程序员 后端开发

华为推出OpenHarmony生态使能服务 加速OpenHarmony商用发行版落地

科技汇

3.0.0 alpha 重磅发布!九大新功能、全新 UI 解锁调度系统新能力

白鲸开源

Bigdata DolphinScheduler workflow Open Source apache 社区

有更新!鸿蒙智联生态产品《接入智慧生活App开发指导》(官方版)

HarmonyOS开发者

HarmonyOS 鸿蒙智联

Java基础06 数组基础

爱好编程进阶

Java 程序员 后端开发

RNG战队LPL春季赛夺冠!中国电竞产业未来如何实现“破与立”?

易观分析

电竞产业

离AI无处不在还有多远?从一个英特尔开源平台开始实现

科技新消息

hadoop

爱好编程进阶

Java 程序员 后端开发

Java8-Stream:2万字20个实例,玩转集合的筛选

爱好编程进阶

Java 程序员 后端开发

Java Script

爱好编程进阶

Java 程序员 后端开发

容器化|在 S3 备份恢复 RadonDB MySQL 集群数据

RadonDB

MySQL 数据库 Kubernetes 高可用 容器化

直播预告|青藤云安全 x 极狐,云原生 DevSecOps 安全左移全解析

极狐GitLab

云原生 DevSecOps 主机安全 容器安全 软件安全

it资产管理系统解决方案

低代码小观

资产管理 企业管理系统 CRM系统 IT治理 资产安全

dubbo实战之二:与SpringBoot集成

爱好编程进阶

Java 程序员 后端开发

web前端培训React调度器原理分析

@零度

前端开发 React

JavaWeb之Cookie和Session技术(四)

爱好编程进阶

Java 程序员 后端开发

netty系列之:使用Jboss Marshalling来序列化java对象

程序那些事

Java Netty 程序那些事 4月月更

FusionStorage原理及组件

爱好编程进阶

Java 程序员 后端开发

Java中的复用类

爱好编程进阶

Java 程序员 后端开发

9个国内/外行业 NPS (净推荐值)基准网站

龙国富

NPS

DRBD是什么意思?优缺点是什么?

行云管家

高可用 运维 HA高可用

Hexo 搭建:搭建与配置

爱好编程进阶

Java 程序员 后端开发

Java agent还不了解的程序员该反省一下了

爱好编程进阶

Java 程序员 后端开发

JAVA中的位运算与二进制操作

爱好编程进阶

Java 程序员 后端开发

Java代理模式,一次复习完4种动态代理实现方式

爱好编程进阶

Java 程序员 后端开发

Cube 技术解读 | Cube 渲染设计的前世今生

蚂蚁集团移动开发平台 mPaaS

mPaaS Android; cube

堡垒机是什么意思?别称是啥?

行云管家

网络安全 防火墙 数据安全 堡垒机

JavaWeb之JSP技术(三)

爱好编程进阶

Java 程序员 后端开发

JavaWeb快速入门--JSP(2)

爱好编程进阶

Java 程序员 后端开发

macOS 安装 Nebula Graph 看这篇就够了

NebulaGraph

macos 图数据库 安装部署

必示科技入围未来银行科技服务商Top100榜单

BizSeer必示科技

一种基于视频帧差异视频卡顿检测方案_架构_360技术_InfoQ精选文章