写点什么

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

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

评论

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

前端知识总结输出文章目录大全

梁龙先森

JavaScript 大前端 编程语言 28天写作

即构SDK新增焦点语音功能,可实现特定用户语音的聚焦

ZEGO即构

如何养成一个好习惯

熊斌

读书笔记 28天写作

架构师训练营知识点思维导图

晴空万里

架构师训练营第2期

HTML5中的拖放功能

我是哪吒

html html5 程序员 面试 大前端

数据中台:建立在数据网络效应之上的赛道

奇点云

大数据 数据中台 云原生 数据

IDEA 异常退出 解决方法

任广印

IDEA

机器学习应用设计阶段的 10 个陷阱和 11 个最佳实践

机器学习

前端模拟假数据(json-server光速入门篇)

德育处主任

json 大前端 Node 28天写作 json-server

你会读书吗?

xcbeyond

读书感悟 读书方式 28天写作

工程师思维是什么?能吃吗?

Justin

工程师思维 架构设计 28天写作

漫谈HTTP协议

架构精进之路

HTTP 七日更 28天写作

高阶段位机房管理:3D集装箱数据中心,触发科技“火苗”的燃烧

一只数据鲸鱼

数据可视化 3D可视化 机房管理 数据中心可视化 集装箱式数据中心

微服务容错时,这些技术你要立刻想到

华为云开发者联盟

微服务 线程 服务雪崩 断路器 服务降级

个人隐私之老话重谈

张老蔫

28天写作

区块链作用之数字货币的影响

v16629866266

美国大选期间美股迎来大涨,舆情到底有何魔力?

星环科技

人工智能 大数据

AI、IoT、区块链、自主系统、下一代计算五大技术引领未来供应链发展

京东科技开发者

区块链 AI IoT 供应链

甲方日常 91

句子

工作 随笔杂谈 日常

音视频行业不可或缺的功能-云端录制

anyRTC开发者

音视频 WebRTC 在线教育 直播 RTC

灵雀云Kube-OVN进入CNCF沙箱,成为CNCF首个容器网络项目

York

灵雀云 Kubernetes Kube-OVN

技术根儿扎得深,不怕“首都”狂风吹!

鲁米

操作系统

Soul 源码阅读 05|Http 长轮询同步数据分析

哼干嘛

开发质量提升系列:用户体验

罗小龙

最佳实践 方法论 28天写作

《论雨伞道德》- 不要和自己的良心捉迷藏

石云升

读书笔记 28天写作 雨伞道德

Vue 3自定义指令开发

葡萄城技术团队

Vue3 中 v-if 和 v-show 指令实现的原理 | 源码解读

五柳

源码分析 大前端 Vue3

面对key数量多和区间查询低效问题:Hash索引趴窝,LSM树申请出场

华为云开发者联盟

数据库 数据 存储 Hash索引 LSM树

代码 or 指令,浅析ARM架构下的函数的调用过程

华为云开发者联盟

函数 任务栈 arm架构

Volcano 监控设计解读,一看就懂

华为云开发者联盟

Kubernetes 云原生 监控 Volcano 计算

CSS实现数据统计

德育处主任

大前端 CSS小技巧 28天写作 纯CSS

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