写点什么

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

  • 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:002878

评论

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

Vue + Node.js 搭建「文件上传」管理后台

蒋川

Vue Node Node Exporter

Myabtis源码分析五-Mybatis配置加载完全图解,建造者模式的使用,涵盖Java各种技术栈

爱好编程进阶

Java 面试 后端开发

Apache Flink 在蔚来汽车的应用

Apache Flink

大数据 flink 编程 流计算 实时计算

运行npm install命令的时候会发生什么?

华为云开发者联盟

node.js npm install npm install

Java BSON使用,Java研发岗必问30+道高级面试题

爱好编程进阶

Java 面试 后端开发

Java文件读写原理和虚拟内存,面试阿里

爱好编程进阶

Java 面试 后端开发

世界读书日晒出你的书单,有机会领取免费读书年卡!

InfoQ写作社区官方

书籍推荐 热门活动 2022世界读书日

系列解读 SMC-R (二):融合 TCP 与 RDMA 的 SMC-R 通信 | 龙蜥技术

OpenAnolis小助手

开源 TCP/IP 龙蜥社区 龙蜥大讲堂 SMC-R

IT人不仅要提升挣钱能力,更要拓展挣钱途径,腾讯技术官发布的“神仙文档”火爆网络

爱好编程进阶

Java 面试 后端开发

华为云媒体査勇:华为云在视频AI转码领域的技术实践

华为云开发者联盟

音视频 华为云 视频AI转码 超高清视频 云转码

Java基础12 面向对象~多态,java中级开发面试知识点

爱好编程进阶

Java 面试 后端开发

Java 方法的使用(方法重载、形参和实参调用关系,作为Java程序员都应掌握

爱好编程进阶

Java 面试 后端开发

Netty权威指南:Linux网络-I-O-模型简介,分享我在Java开发中走的一些弯路

爱好编程进阶

Java 面试 后端开发

hive学习笔记之六:HiveQL基础,redis和mongodb区别面试

爱好编程进阶

Java 面试 后端开发

interrupted()和isInterrupted()详述,百万数据分页查询的方法及其优化方式

爱好编程进阶

Java 面试 后端开发

Java经典算法题(二),这10个经典又容易被人疏忽的JVM面试题

爱好编程进阶

Java 面试 后端开发

智能手表的下半场,机遇与挑战并存

FinClip

带你了解极具弹性的Spark架构的原理

华为云开发者联盟

spark mapreduce 内存 RDD Spark架构

Java并发体系详解,聊一聊MySQL数据库中的那些锁

爱好编程进阶

Java 面试 后端开发

企业选择私有化部署的IM即时通讯软件,全力保护信息安全!

WorkPlus

浅谈IM系统中离线消息、历史消息的最佳实践

WorkPlus

OutOfMomeryError异常实例与处理,zookeeper面试题总结

爱好编程进阶

Java 面试 后端开发

java的反射用不好容易走火入魔?还可以用内省啊!,网易java面试题和答案

爱好编程进阶

Java 面试 后端开发

FutureTask的使用方法及实现原理,Java后端路线图

爱好编程进阶

Java 面试 后端开发

Java有线程安全的set吗?,跳槽薪资翻倍

爱好编程进阶

Java 面试 后端开发

博睿数据携手F5共同构建金融科技从代码到用户的全数据链DNA

博睿数据

每周问答精选:PolarDB-X完全兼容MySQL吗?

阿里云数据库开源

数据库 阿里云 开源 polarDB PolarDB-X

Java程序员如何加入自己理想的大厂呢?本人来分享亲身经历的腾讯Java技术岗的面经。

爱好编程进阶

Java 面试 后端开发

MyBatis实现一对一,一对多关联查询,HTTPS面试常问全解析

爱好编程进阶

Java 面试 后端开发

netty系列之:netty中常用的xml编码解码器

程序那些事

Java Netty 程序那些事 4月月更

HashMap 面试二十一问!,腾讯Java面试必问

爱好编程进阶

Java 面试 后端开发

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