当前位置: 首页 > news >正文

B站画质补完计划(3):智能修复让宝藏视频重焕新生

1 老片存在什么画质问题?

B站作为一个拥有浓厚人文属性的平台社区,聚集了诸如《雍正王朝》、《三国演义》等经典影视剧集,同时也吸引了大量用户欣赏、品鉴这些人文经典 。但美中不足的是,由于拍摄年代久远、拍摄设备落后、数据多次压缩传输等原因,大量剧集存在各种各样的画质问题,严重影响了用户的观看体验。

在观看了站内大量经典剧集后,我们总结了三点观看时的主观感受,并将解释这些主观感受背后蕴藏的画质问题及成因。

1.1. 模糊感

造成模糊感的原因有以下两点:受拍摄设备和显示条件的限制,老片片源的分辨率规格大多为 720p、540p 甚至更低,像素少导致清晰度低;数字化扫描、压缩存储等过程都会带来一定的精度损失,进而导致画面模糊。

图1为电影《女儿国》唐僧进城门的场景,画面整体观感比较模糊,唐僧袈裟的轮廓、城墙和城墙上的人物轮廓都不够锐利。对于人物面部特写,如图2《雍正王朝》中张廷玉的面部特写,皮肤表面的细纹理丢失,眼睛、鼻子、胡须等五官的轮廓细节不够清晰。

图片

图1. 电影《女儿国》原始视频画面

图片

图2. 电视剧《雍正王朝》原始视频画面

1.2. 卡顿感

视频出现卡顿感的原因主要是,部分老片的帧率较低,即每秒画面的帧数较少,导致在视频连续播放过程中,画面出现“一顿一顿”的感觉,特别是在运镜过程中,这种感觉尤其明显。受限于拍摄时代及技术,以前的电视剧或电影的拍摄帧率通常被限定为24或25。尽管这个帧率设置在新时代仍在使用,但都已很难满足观众对流畅画质的渴求,更不能发挥视频播放设备的性能。如图3以及图4中人物在运动时有明显卡顿。

图片

图3. 电视剧《雍正王朝》原始视频片段

图片

图4. 电视剧《三国演义》原始视频片段

1.3. 毛刺感

毛刺感主要是由视频的压缩编码造成,老片生产的年代压缩和存储技术不够发达,严重破坏了画面中连续的线条、边缘等结构信息,进而产生毛刺感。如图5《三国演义》中关羽的衣物边缘,有层次不齐的突起和小块,以及图6海绵宝宝五官轮廓附近经常出现突起和小颗粒,这些小毛刺带来的脏感十分影响观感。

图片

图5. 电视剧《三国演义》原始视频画面

图片

图6. 动画《海绵宝宝》原始视频画面

2 我们做了什么?

针对老片中存在的模糊感、卡顿感、毛刺感等画质问题,多媒体实验室的画质团队研发了一套智能修复系统,有效修复了上述画质问题,大幅提升老片观感。

2.1. 从模糊变清晰

通过图7《女儿国》片段、图8《雍正王朝》片段修复前后的对比图可以明显感受到智能修复算法带来的观感提升。在《女儿国》唐僧进城门的场景中,城门上的石块纹路、牌匾文字、屋檐线条以及士兵身体轮廓经过算法处理后都变得清晰可见;唐僧身着袈裟、手持禅杖的轮廓细节在算法处理后也变得更加锐利。而《雍正王朝》中张廷玉的面部皮肤纹理、眉毛胡须的毛发细节、五官轮廓的清晰度经过修复算法处理都得到了恢复。

图片

图7. 电影《女儿国》修复前后视频画面对比

图片

图8. 电视剧《雍正王朝》修复前后视频画面对比

2.2. 从卡顿变流畅

让卡顿的视频变流畅,最直接的方法是提高视频帧率,缩短视频帧之间的时间间隔,例如将每秒25帧的视频变成每秒50帧。我们借助自研的视频插帧算法(可参考 B站画质补完计划(1):插帧提升《雍正王朝》等视频流畅度),实现视频帧的“无中生有”,通过这种生成插入帧的方式完成视频帧率由低到高的转变。图9、10中的视频在经过插帧处理后,人物运动及镜头移动更加丝滑流畅,卡顿感基本消除。

图片

图9. 电视剧《雍正王朝》修复前后视频片段对比 (左为修复前,右为修复后)

图片

图10. 电视剧《三国演义》修复前后视频片段对比 (左为修复前,右为修复后)

2.3. 消除毛刺感

图11《三国演义》中关羽衣服边缘的毛刺、突起在算法处理后得到有效消除,衣服轮廓变得连续、锐利。

图12中海绵宝宝面部线条附近的颗粒、小块经过算法处理也完全消失了,海绵宝宝的面部变得光滑、干净。智能修复算法有效地消除了老片中常见的由压缩引起的毛刺感,使老片画面在变清晰的同时也变得更干净,观感大幅提升。

图片

图11. 电视剧《三国演义》修复前后视频画面对比

图片

图12. 动画《海绵宝宝》修复前后视频画面对比

3 我们是怎么做的?

在这一部分,我们将对智能修复系统的总体框架以及其中的子模块进行介绍。

3.1. 智能修复系统

智能修复系统是一套完整的、端到端的画质修复流水线,输入为原始待修复视频流,输出为修复后视频流,系统逻辑如图13所示。

智能修复系统由画质评估模块以及策略决策模块组成。在画质评估模块,我们会对原始视频流的分辨率、帧率、以及视频画质分数 VQA (Video Quality Analysis) 等画质信息进行提取,并将该信息流传递给画质修复模块来选择合适的修复策略以对原始视频流进行画质修复。

具体而言,当某一路画质条件不及预期时,只会触发相对应的修复流程,如帧率修复或画面修复;当视频帧率、视频画面质量都低于我们设定的期望下限时,就会同时触发帧率修复、画面修复流程来对原始视频流进行修复。

图片

图13. 智能修复系统流程图

当帧率修复和画面修复流程被同时触发时,画质修复算法流程如图14所示。首先,原始视频流会被解码为N帧图像序列,并经过画面修复模块和插帧模块,得到 [R*(N-1)+1] 帧修复后图像序列,最终图像序列会被编码为修复后视频流。插帧模块根据帧率上采样倍数R来确定生成中间帧的数量。画面修复模块对插帧后的所有图像帧进行自适应画面修复。

图片

图14. 画质修复算法流程

3.2. 画面修复模块

画面修复模块包含两个子模块,即背景修复模块和人脸修复模块。背景修复模块的作用为对除人脸区域外的场景进行去噪、线条修复、细节增强。人脸修复模块的作用为对人脸区域进行纹理恢复,五官清晰化。

对于背景修复和人脸修复模块,算法设计思路是一致的,首先要根据高清图片和某种降质策略构造出接近老片画质的低清图片,并让修复模型学习从低清到高清的反向映射。当学习过程收敛后,在推理阶段就可以直接将模型用于对老片画质的端到端修复。下面我们将介绍低清图像的构造方法以及两个子模块的算法细节。

3.2.1. 低清图像构造

在低清图像构造部分,如图15所示,我们设计了一套能准确模拟老片画质的降质策略。

关于该降质策略的具体实施可参考B站画质补完计划(2):视频超分让像素细腻生动 中对自研降质策略的描述。

图片

图15. 低清图像构造流程

3.2.2. 背景修复模块

对于背景修复模块,其重心在于去噪、线条修复、细节增强。低清图片经过卷积层和四层 REPB (Residual Efficient re-Parameterization Block, 对于该组件的描述可以参考B站画质补完计划(2):视频超分让像素细腻生动 ) 后输出伪高清背景图像,并评估伪高清背景图像和高清背景图像真值间的像素损失 (Charbonnier Loss)、结构信息损失 (SSIM)。 

图片

图16. 背景修复模块

3.2.3. 人脸修复模块

对于人脸修复模块,我们更关注其恢复细节的能力,故引入生成对抗的训练策略。模型采用 U 形结构的设计,在 Encoder 部分提取输入图像的 Low-level 面部细节特征和 High-level 面部风格特征。隐向量 w、Low-level 特征、初始化向量 const 经 Decoder 处理后输出伪高清人脸图像。其中,隐向量 w 是由面部风格特征 z 经过 Mapping 网络处理后得到,其目的是对向量 z 进行一定程度的特征解耦,使 w 更有针对性地控制面部姿态、轮廓和风格。Low-level 特征负责为解码器提供人脸局部细节的生成方向。最后,通过在伪高清人脸图像和高清人脸图像真值间建立像素损失和生成对抗损失,使模型在可控的基础上有更强的恢复面部细节的能力。

图片

图17. 人脸修复模块

3.3. 插帧模块

我们充分借鉴了目前主流的基于光流估计的插帧算法,开发了一套主要服务于点播场景的云端视频插帧算法(可参考 B站画质补完计划(1):插帧提升《雍正王朝》等视频流畅度)。模型主要通过对前后两帧的运动关系进行建模生成光流,并根据光流中的映射关系从前后帧加权采样得到预测的中间帧,来实现视频帧率及流畅度的提升。在实际的算法落地实践中,我们主要关注视频插帧的常见问题,并逐一优化解决,分别改善了“大运动缺陷”、“重复/周期性纹理缺陷”及“文字扭曲缺陷”这些影响主观体验的缺陷,确保更加完善的插帧效果。

图片

图18. 视频插帧算法

4 总结与展望

智能修复系统是一条高度智能化的、具有良好可扩展性的画质修复流水线,目前已经集成了B站多媒体实验室自研的画质评价算法、人脸修复算法、背景修复算法以及视频插帧算法。在实际的算法落地实践中,我们充分研究了老片的画质缺陷,并结合实验室现有的画质能力对老片中存在的画质缺陷进行有针对性地修复,最终实现了清晰自然的画质优化效果。

目前, 智能修复系统已成功投入线上点播业务,并已支持了智能修复 (独立清晰度) 视频流生产。未来,我们将持续在覆盖范围、主观效果和部署灵活度等方面进行算法的迭代更新,以在直播、点播、应用端等多个场景为视频画质提供更大的增益。

关注哔哩哔哩多媒体实验室,我们将陆续分享 HDR、色彩修复等更多画质相关技术文章,敬请期待。

哔哩哔哩多媒体实验室(bilibili mlab)是一支技术驱动的年轻队伍,具备完善的多媒体技术能力,以清晰流畅的极致视频体验为目标,通过对自研视频编码器、高效转码策略、视频图像分析与处理、画质评价等技术的持续打磨和算法创新,提出了画质可控的自适应转码算法、视频超分、视频插帧、画质评价、高性能多媒体算法推理基座、自研编码器等诸多高质量、低成本的多媒体解决方案,从系统尺度提升了整个多媒体系统的性能和效率, 助力哔哩哔哩成为体验最好的互联网视频社区。

-End-

作者丨GavinShyu、Shine晴天、qiushenjie、Mochi、天落

相关文章:

B站画质补完计划(3):智能修复让宝藏视频重焕新生

1 老片存在什么画质问题? B站作为一个拥有浓厚人文属性的平台社区,聚集了诸如《雍正王朝》、《三国演义》等经典影视剧集,同时也吸引了大量用户欣赏、品鉴这些人文经典 。但美中不足的是,由于拍摄年代久远、拍摄设备落后、数据多次…...

Spring Cloud Stream整合RocketMQ

Spring Cloud Stream整合RocketMQ 这里书接上回,默认你已经搭建好了RocketMQ主从异步集群,前面文章已经介绍过搭建方法。 1、Spring Cloud Stream介绍 Spring Cloud Stream是一个框架,用于构建与共享消息系统连接的高度可扩展的事件驱动微服…...

Web前端浪漫源码:编织梦想与爱的交织乐章

Web前端浪漫源码:编织梦想与爱的交织乐章 在数字世界的广袤宇宙中,Web前端浪漫源码犹如一段段秘密的旋律,编织着梦想与爱的交织乐章。它们不仅是技术的结晶,更是情感的载体,将浪漫与创意融入每一个像素和每一行代码之…...

【云岚到家】-day02-4-我的账户-实名认证

【云岚到家】-day02-4-我的账户-实名认证 1 我的账户设置-实战1.1 配置OSS1.2 需求分析1.2.1 服务端设置银行账户1.2.2 机构端设置银行账户1.2.3 表结构设计1.2.4 表结构相关的controller、service、mapper、entity 1.3 服务端设置银行账户接口设计1.3.1 新增或更新银行账号信息…...

MySQL复习题(期末考试)

MySQL复习题(期末考试) 1.MySQL支持的日期类型? DATE,DATETIME,TIMESTAMP,TIME,TEAR 2.为表添加列的语法? alter table 表名 add column 列名 数据类型; 3.修改表数据类型的语法是? alter table 表名 modify 列名 新…...

利用DVWA演示文件上传漏洞获取网站shell权限(二)

文件上传漏洞是网络安全中常见的一种漏洞类型,攻击者可以利用该漏洞上传恶意文件到服务器上,从而获得对网站的远程控制权限。本文将以DVWA (Damn Vulnerable Web Application) 为例,演示如何利用文件上传漏洞的Medium级别设置,绕过…...

Java---BigInteger和BigDecimal和枚举

1.简介 1.BigInteger可以支持任意长度的整数 2.BigDecimal可以支持任意精度的浮点数 3.用来做精确计算 2.创建方式 new BigInteger(); new BigInteger(参数1,进制):可以将不同进制转成10进制显示 new BigDecimal(); BigInteger.valueOf(); BigDecimal.valueOf();…...

mybatis数据批量更新

1、mybatis批量更新mapper <update id"updateBatchById"><foreach collection"list" item"s" separator";">updatetableNamesetname #{name},whereid #{id}</foreach> </update>通过在数据库连接URL中指定…...

自动驾驶#芯片-1

概述 汽车是芯片应用场景之一&#xff0c;汽车芯片需要具备车规级。  车规级芯片对加工工艺要求不高&#xff0c;但对质量要求高。需要经过的认证过程&#xff0c;包括质量管理标准ISO/TS 16949、可靠性标准 AEC-Q100、功能安全标准ISO26262等。  汽车内不同用途的芯片要求…...

【保姆级讲解下QT6.3】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

windows安装conda

1 Conda简介 Conda 是一个开源的软件包管理系统和环境管理系统&#xff0c;用于安装多个版本的软件包及其依赖关系&#xff0c;并在它们之间轻松切换。Conda 是为 Python 程序创建的&#xff0c;适用于 Linux&#xff0c;OS X 和Windows&#xff0c;也可以打包和分发其他软…...

ubuntu设置GPU功率

前言 上次发了一篇文章&#xff0c;我使用脚本自动根据GPU温度调整服务器风扇转速 但是我实测之后&#xff0c;发现这个方法还是压不住我GPU的温度&#xff0c;暂时不清楚什么原因 所以我准备把GPU功耗压低 先看看gpu的功耗限制 nvidia-smi -q -d POWER使用上面的命令会输出…...

[发布]嵌入式系统远程测控软件-基于Qt

目录 一. 引言二. 软件功能2.1 原理2.2 软件功能2.3 运行环境 三. 软件操作使用3.1 软件界面3.2 软件功能使用详解3.2.1 连接3.2.2 数据监测&#xff08;串口示波器&#xff09;3.2.3 数据修改3.2.4 数据保存 3.3 软件的硬件连接 四. 通信协议——STM32移植篇4.1 通信协议4.2 S…...

【数据结构】查找(顺序查找、二分查找、索引顺序查找、二叉排序树、平衡排序树、B树、B+树、哈希表)

目录 数据结构——查找何为查找1. 查找表2. 关键字3. 查找方法效果评价指标——平均查找长度ASL(Average Search Length) 静态查找表1.顺序查找2.二分查找二分查找判定树 3.静态查找表—索引顺序表的查找索引顺序查找表的算法原理&#xff1a; 动态查找树表1. 二叉排序树2. 二叉…...

远程连接路由器:方法大全与优缺点解析

远程连接路由器的方式主要有以下几种&#xff0c;以下是每种方式的详细说明及其优缺点&#xff1a; 使用Web浏览器登录 方法&#xff1a;通过配置路由器的远程管理功能&#xff0c;允许用户通过互联网浏览器访问路由器的管理界面。用户只需输入路由器的公网IP地址或域名&#…...

NI USB-6009 DAQ采集卡拆解

所需设备&#xff1a; 1、NI USB-6009采集卡&#xff1b; 2、逻辑分析仪&#xff1b; NI USB-6009采集卡全貌&#xff1a; 性能参数&#xff1a; 内部照片&#xff1a; ADC芯片指标&#xff1a; 接线图&#xff1a; 差分模式采样&#xff1a; 采集过程中的SPI总线数据监控&a…...

详细分析Mysql临时变量的基本知识(附Demo)

目录 前言1. 用户变量2. 会话变量 前言 临时变量主要分为用户变量和会话变量 1. 用户变量 用户变量是特定于会话的&#xff0c;在单个会话内可以在多个语句中共享 以 符号开头在 SQL 语句中使用 SET 语句或直接在查询中赋值 声明和赋值 SET var_name value; -- 或者 SE…...

JS的五种事件函数,各自应用场景又分别是什么

在JavaScript中&#xff0c;常用的五种事件函数包括&#xff1a; 1. onclick&#xff1a;当用户点击某个元素时触发&#xff0c;适用于处理按钮点击、链接点击等场景。 2. onkeydown&#xff1a;当用户按下某个键盘的按键时触发&#xff0c;适用于处理键盘输入相关的操作&#…...

电脑想加个WIFI功能,怎么选!

在快速发展的物联网和智能家居时代,Wi-Fi模块作为连接各类智能设备与互联网的桥梁,其重要性不言而喻。而为了让这些模块能够适应各式各样的应用场景,不同的接口技术应运而生。今天,我们就来深入浅出地探讨几种常见的Wi-Fi模块接口,包括它们的工作原理、特点以及适用场景,…...

机器学习——决策树

决策树 决策树可以理解为是一颗倒立的树&#xff0c;叶子在下端&#xff0c;根在最上面 一层一层连接的是交内部节点&#xff0c;内部节点主要是一些条件判断表达式&#xff0c;叶子叫叶节点&#xff0c;叶节点其实就是最终的预测结果&#xff0c;那么当输入x进去&#xff0c;…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...