视频转码后有色差要如何处理

2023-11-18

目录

视频转码后有色差要如何处理

KEY_COLOR_STANDARD 

KEY_COLOR_RANGE


视频转码后有色差要如何处理

以下是回答,欢迎大家留言讨论补充:

1、色差是如何产生的?

1)有损压缩产生的质量损失。

  • 解决方法为尽可能的提高码率。
  • 可以使用 FFmpeg 指令查看原码率与输出码率对比,如果使用硬件编码码率要高于原码率一些,因为原文件可能使用了更高级的编码方式(软件编码)或编码参数(HEVC)。

2)颜色空间转换产生的损失。

  • 解决方法为尽量避免颜色空间的转换,如果必须转换需要找到正确的颜色转换矩阵。
  • 可以使用 FFmpeg 指令对比色差文件与原文件 color_rangecolor_space
$ ffprobe -show_streams -I test.mp4

2、如何做颜色空间转换?

颜色空间转换每个模块都会有所涉及,播放器、转码、获取缩略图等,但按照底层模块划分如下:

1)解码模块:需要获取出正确的 ColorSpaceColorRange,然后传递给后面的模块。

  • iOS 模块直接存在于 CVPixelBuffer,ColorSpace 为 CVImageBufferYCbCrMatrix,ColorRange 在 iOS15 后包含了 FullRange 参数,之前需要根据 CVPixelBufferGetPixelFormatType(buffer) == kCVPixelFormatType_420YpCbCr8BiPlanarFullRange 判断。
  • Android 模块需要根据解码后 MediaFormat 获取,ColorSpace 为 KEY_COLOR_STANDARD,ColorRange 为 KEY_COLOR_RANGE
  • FFmpeg 模块需要根据解码后数据 AVFrame 获取,ColorSpace 为 colorspace,ColorRange 为 color_range

2)编码模块:根据外层输入的 ColorSpaceColorRange,设置给编码器即可。

  • iOS VideoToolBox 编码设置与解码相对应 kVTCompressionPropertyKey_YCbCrMatrix
  • Android 编码设置与解码相对应 KEY_COLOR_STANDARDKEY_COLOR_RANGE
  • FFmpeg X264 编码设置 x264_param_t 内 vui.b_fullrangevui.i_colmatrix

3)YUV 数据转换 RGBA 纹理模块。

  • 数据转纹理主要涉及 GL 矩阵操作,根据解码后的 ColorSpace 与 ColorRange 生成合适的矩阵。
  • GPUImage 矩阵生成,参考:GPUImage[1]。
  • libyuv 矩阵生成(搜索 『bt.』),参考:libyuv[2]。

4)RGBA 纹理转换 YUV 数据模块。

  • 纹理转数据与数据转纹理相反的流程,但具体转换为哪种 ColorSpace 与 ColorRange 都可以的。
  • 参考 RGBA 转 YUV 即可:RGB2YUV[3]。

5)RGB 数据与 YUV 数据转换模块。

  • 通常数据间转换使用 libyuv,例如 I420 转换 RGBA,方法为 I420ToARGBMatrix,参数支持设置矩阵 YuvConstants

3、其他建议

1)尽量减少自定义处理颜色空间转换。

Android 平台尽量使用 Surface 解码与编码,好处就是不需要手动处理。

2)ByteBuffer 编码必须设置 ColorSpaceColorRange

如果不设置底层不清楚输入进来的数据颜色格式,只能根据默认值随意发挥了。

3)ColorSpaceColorRange 默认值。

  • 本地文件 ColorSpace 为空,则直接默认为 601 即可。
  • 本地文件 ColorRange 为空,则直接默认为非 FullRange

如果你也对音视频技术感兴趣,比如,符合下面的情况:

  • 在校大学生 → 学习音视频开发
  • iOS/Android 客户端开发 → 转入音视频领域
  • 直播/短视频业务开发 → 深入音视频底层 SDK 开发
  • 音视频 SDK 开发 → 提升技能,解决优化瓶颈

不妨看看《是的,我建了一个进阶百万年薪的社群》了解一下这个社群,根据自己的需要,按需加入。

KEY_COLOR_STANDARD 

在Android中,KEY_COLOR_STANDARD 是用于设置视频编码颜色标准的关键字。这个参数是在设置 MediaFormat 对象时使用的,该对象用于配置媒体编解码器(MediaCodec)。以下是一个例子:

MediaFormat format = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, width, height);
format.setInteger(MediaFormat.KEY_COLOR_STANDARD, MediaFormat.COLOR_STANDARD_BT709);
...
MediaCodec encoder = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_VIDEO_AVC);
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

KEY_COLOR_RANGE

KEY_COLOR_RANGE 是在Android中用于设置视频编码颜色范围的关键字。这个参数也是在设置 MediaFormat 对象时使用的,该对象用于配置媒体编解码器(MediaCodec)。以下是一个例子:

MediaFormat format = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, width, height);
format.setInteger(MediaFormat.KEY_COLOR_RANGE, MediaFormat.COLOR_RANGE_FULL);
...
MediaCodec encoder = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_VIDEO_AVC);
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

在这个例子中,我们创建了一个新的 MediaFormat 对象,用于配置一个 MediaCodec 对象。我们使用 KEY_COLOR_RANGE 来设置颜色范围为 COLOR_RANGE_FULL

就像 KEY_COLOR_STANDARD 一样,不是所有的设备或编码器都支持所有的颜色范围。在设置颜色范围之前,你应该检查设备或编码器是否支持你想要设置的颜色范围。

参考2:

https://stackoverflow.com/questions/68629271/opencv-read-write-video-color-difference

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

视频转码后有色差要如何处理 的相关文章

  • 如何在线剪辑视频?手机视频怎样剪辑?

    在这个短视频当道的时代 大家都开始随手录制视频记录生活 一个视频从录制到发布 中间不可缺少的环节就是对视频的剪辑 想要做出高质量的视频 就少不了要在视频剪辑这一方面下功夫 有视频剪辑经验的小伙伴自然会选择使用PR等富有技术含量的软件 但是对
  • 【ElementUI组件】视频上传+计算视频时长

    效果如下 实现步骤 1 首先先安装官网的操作步骤安装elementui 或者 不安装直接引入 安装指令 npm i element ui S 引入方式 2 以下是参考代码 HTML代码 div div
  • JSWebrtc.js +对应视频实例化

    HTML div class context div
  • 视频稳像(Video Stabilization)

    原文 https blog csdn net hjl240 article details 52683738 开源 关键词 Video Stabilization 不错 https github com yaochih awesome vi
  • 【操作教程】EasyNVR平台如何接入硬盘录像机?

    EasyNVR是基于RTSP Onvif协议接入的视频平台 可支持将前端设备的音视频进行采集 传输 处理并分发 实现视频监控直播 云端录像 云存储 检索回看 国标级联 告警等视频能力 平台兼容性高 可拓展性强 性能稳定 可应用在智慧工地 智
  • QT中使用 QProcess接口 执行 fmmpeg命令,实现简单的音视频处理

    QProcess 介绍 QProcess 是 Qt 框架中用于启动外部进程和与之进行交互的类 它提供了一个方便的接口 允许你执行外部命令并捕获其输出 错误信息以及监控其运行状态 通过使用 QProcess 类 你可以在你的 Qt 应用程序中
  • 浏览器播放rtsp视频流:3、rtsp转webrtc播放

    浏览器播放rtsp视频流 3 rtsp转webrtc播放 文章目录 浏览器播放rtsp视频流 3 rtsp转webrtc播放 1 前言 2 rtsp转webRTC 3 初步测试结果 4 结合我们之前的onvif gSoap cgo的方案做修
  • uniapp使用uni.createInnerAudioContext()播放指定音频并且切换

    uniapp使用uni createInnerAudioContext播放指定音频并且切换 注意 效果图 主要代码 放上所有的代码 注意 uniapp API 中 uni createInnerAudioContext 是无法多音频播放的
  • 音视频开发开发核心知识+新手入门必看基础知识

    音视频开发是一个广泛的领域 它涉及到多个技术领域 包括音频编解码 视频编解码 媒体容器格式 流媒体传输 音视频处理等 以下是音视频开发的一些基础知识 音频编解码器 音频编解码器是将数字音频信号编码成一种压缩格式 并且能够解码压缩的音频数据以
  • H.265/HEVC编码结构

    H 265 HEVC编码结构 为了增强各种应用下操作的灵活性以及数据损失的鲁棒性 H 265 HEVC在编解码的设计上添加了多种新的语法结构 相较于以往的视频编码标准 如H 264 AVC 这种新的语法架构使得H 265 HEVC在压缩效率
  • 浅谈音视频开发入门基础及进阶资源分享

    导言 音视频开发涉及的知识面比较广 知识点又相对独立琐碎 入门门槛相对较高 想要对音视频开发具有深入全面的了解 需要在行业深耕多年 本文将简单介绍音视频的采集 编解码 传输 渲染四个技术点并对涉及到的知识点和原理进行解释 希望你可以对音视频
  • uniapp 上传音频(H5可以App不行),并播放后端返回的音频

    1 上传 record let this this uni chooseFile count 1 默认100 extension m4a mp3 根据文件拓展名过滤 每一项都不能是空字符串 默认不过滤 success function re
  • nodejs基于vue的视频分享投稿商城播放系统617bx

    本视频播放系统的设计目标是为用户提供一个便利的视频播放平台 同时系统融入投稿 商城以及论坛等功能模块 更全面的为用户提供服务 本文重点阐述了视频播放系统的开发过程 以实际运用为开发背景 基于vue框架 B S结构 运用了nodejs技术和M
  • 嵌入式开发、C++后端开发、C++音视频开发怎么选择?

    嵌入式开发 C 后端开发和C 音视频开发的选择问题 近年来 随着互联网和物联网的快速发展 嵌入式开发 C 后端开发和C 音视频开发等职业领域也逐渐受到广泛关注 对于有志于从事这些领域的人来说 如何做出选择呢 下面将从前景 薪酬和职业稳定性等
  • 音频转换mp3格式软件哪个好?下面推荐几款好用的软件给你

    你是否曾经遇到过这样的情况 下载了大量音频文件 却因为文件格式受到限制 而无法直接在设备上播放 不用担心 今天我将向大家介绍几款能把音频转换mp3的软件 它们可以帮助我们有效地解决音频格式不兼容的问题 一 专业的音频处理软件 优点1 简单易
  • 【音视频 | AAC】AAC音频编码详解

    博客主页 https blog csdn net wkd 007 博客内容 嵌入式开发 Linux C语言 C 数据结构 音视频 本文内容 介绍AAC音频编码 金句分享 你不能选择最好的 但最好的会来选择你 泰戈尔 本文未经允许 不得转发
  • macbook录屏快捷键大全,教你快速录制视频

    有人知道macbook电脑有录屏快捷键吗 现在录屏的速度太慢了 每次打开都要浪费不少时间 要是有录屏快捷键 应该会快很多 有哪位大佬知道吗 教教我 无论是在工作还是生活中 电脑已成为不可或缺的工具 而macbook作为苹果公司推出的一款笔记
  • 教育场景数字化中音视频小程序的发展

    教育场景数字化逐步成为刚需 2018年以来 国家对在线教育行业的监管收紧 以及受益于 5G 技术的发展 教育科技逐步走向成熟化和规范化 教育行业的本质是人与人 老师与学生 老师与家长 以及更多角色直接的沟通与互动 而仅仅是古早式的在线文字已
  • 光端机技术综述:从理论到实践的全面探索

    在当今数据驱动的时代 光端机技术 已成为通信领域的核心组成部分 从理论的深度研究到实践的广泛应用 光端机技术不断推动着信息社会的发展 成为连接不同设备和网络的关键技术 技术特点 高速数据传输 光端机 利用光纤传输数据 具有极高的传输速率 相
  • 实用软件分享,打工人必备~

    在这个数字化时代 各种实用软件已经成为我们生活中不可或缺的工具 它们可以帮助我们更高效地完成工作 提高生活质量 节省时间和精力 本文将为您介绍几款实用的软件 让您的工作和生活更加便捷 一 视频下载工具 犀牛下载器 一款免安装的在线视频下载工

随机推荐

  • 搭建MariaDB Gelera Cluster数据库集群

    基础准备 node1 node2 node3 yum源 三节点 安装并初始化数据库 三节点 配置数据库文件 三节点 node2 3 登录数据库 并赋予root用户远程权限后关闭数据库 三节点 启动数据库集群 验证集群功能 查看到wsrep
  • 适合男生的6个副业项目

    现在社会越来越激烈 大家都想在工作之余挣点外快 甚至实现财务自由 本文就为你们介绍几种适合男生从事的副业项目 1 成为自媒体达人 自媒体运营就是你在社交网络 博客 视频平台等自由发挥创作才华 发布内容 并从中赚钱的副业方式 随着智能手机和网
  • 以太坊geth客户端安装经历,也是艰难的一笔。

    现在开始通过看B站的视频学习以太坊 作为入门你看完基本理论肯定是要自己安装geth客户端的 可我缺出现了一些问题 首先我是liunx系统 通过putty软件连接的阿里云 在上面经行一些基本操作 对liunx指令一窍不通的我也是开始liunx
  • Spark项目实战-集群SSH免密码登录

    首先我们会根据之前的CentOS安装教程再搭建sparkproject2和sparkproject3两台虚拟机机器 然后在这基础上配置三台机器之间的ssh免密码登录 1 在三台机器的 etc hosts文件中 都配置对三台机器的ip hos
  • .NET 页面间传值的几种方法

    1 QueryString 这是最简单的传值方式 但缺点是传的值会显示在浏览器的地址栏中且不能传递对象 只适用于传递简单的且安全性要求不高的数值 传递 location href WebForm2 aspx name yourName 接收
  • 刷脸支付就是个破局的大杀器

    科技推动创新 改变产业链格局 从二维码支付爆发取代刷银行卡支付后 传统银行一直担忧的金融脱媒挑战实际上已是即成现实 尽管从监管层面上 一系列如 断直联 二维码互通 等监管要求 对金融机构有较大利好 但在二维码支付时代 大局已定 缺乏C端运营
  • 腾讯文件和微云服务器,网盘Web客户端对比:腾讯微云支持32GB单文件上传

    网盘Web客户端对比 腾讯微云支持32GB单文件上传 网盘最基本的客户端就是Web客户端 为了让这个最基本的客户端更好用 除了网易网盘以及新浪微盘外 其余几款网盘都有提供浏览器插件的下载 这些插件主要提供三个重要的功能 分别是大文件上传 断
  • matlab GUI窗口最大化,以及控件大小和字体自适应

    1 GUI 窗口最大化 双击除控件外的空白处 视图 属性检查器 resize on即可 设置完这个 当放大的时候 会发现我们控件的位置没有变化 此时我们需要设置一个 工具 GUI选项 调整大小的方式 成比例 2 控件大小和字体自适应 当我们
  • pytorch学习:loss为什么要加item()

    作者 陈诚 链接 https www zhihu com question 67209417 answer 344752405 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 PyTorch 0 4 0版本去
  • C#各种结束进程的方法详细介绍

    转自http www cnblogs com zjoch p 3654940 html Process类的CloseMainWindow Kill Close Process CloseMainWindow是GUI程序的最友好结束方式 从名
  • Activity的IntentFilter匹配规则

    读书笔记 我们知道 启动Activity分为两种方式 显示调用和隐式调用 显示调用需要明确的指定被启动对象的组件信息 包括包名和类名 而隐式调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息 如果不匹配将无法启
  • 算法--将数组分成和相等的多个子数组,求子数组的最大个数

    作者 陈太汉 一个整数数组 长度为n 将其分为m份 使各份的和相等 求m的最大值 比如 3 2 4 3 6 可以分成 3 2 4 3 6 m 1 3 6 2 4 3 m 2 3 3 2 4 6 m 3 所以m的最大值为3 算法 原理的思想是
  • CheckNetisolation加速microsoft store访问(需使用代理)

    CheckNetisolation命令行工具 1 通过注册表获取 Microsoft Store 应用的 SID 通过 Win R 快捷键打开 运行 窗口 输入 Regedit 打开注册表编辑器 然后逐级定位到HKEY CURRENT US
  • 51单片机数码管循环显示0 9c语言,如何采用单片机实现数码管循环显示0-9

    描述 8个数码管滚动显示同一个数字 8个数码管显示多个不同的字符 8个数码管闪烁显示 8个数码管滚动显示数字串 include CONFIG 0x3B31 unsigned char tab 0x3f 0x06 0x5b 0x4f 0x66
  • Linux线程控制

    本篇我将学习如何使用多线程 要使用多线程 因为Linux没有给一般用户直接提供操作线程的接口 我们使用的接口 都是系统工程师封装打包成原生线程库中的 那么就需要用到原生线程库 因此 需要引入 lpthread 即连接原生线程库 原生线程库
  • [1181]linux两台服务器之间传输文件和文件夹

    文章目录 scp 1 从服务器复制文件到本地 2 复制文件到本地并重命名 3 从服务器复制文件夹到本地 4 从本地复制文件到服务器 不包括文件夹本身 5 从本地复制文件夹到服务器 包括文件夹本身 rcp 命令使用 wget rsync 在日
  • Vue3父子组件通信,父子传参

    Vue3父子组件通信 父子传参 前言 Vue2的小伙伴应该该经历过转战Vue3过程的中的抓狂 好多地方使用都不太一样 这期就给大家讲一下近期我也在用vue3开发中遇到到的问题父子组件通信 父传子 在父组件中引入son vue子组件 为子组件
  • sql 2008 R2 修改数据库表编辑行200小技巧

    在使用sql server 2008 R2时 有时候要打开一个表 看里面的数据 发现只能编辑前面200行 如下图 如果我的数据库表的数据 超过200 怎么办呢 其实只要修改下配置 就可以了 如下图 点击选项 进入选项界面 如下图 在sql
  • nginx配置主域名跳转www域名并支持ssl

    server listen 80 listen 443 ssl server name xxxx com return 301 https www xxx com request uri server listen 80 server na
  • 视频转码后有色差要如何处理

    目录 视频转码后有色差要如何处理 KEY COLOR STANDARD KEY COLOR RANGE 视频转码后有色差要如何处理 以下是回答 欢迎大家留言讨论补充 1 色差是如何产生的 1 有损压缩产生的质量损失 解决方法为尽可能的提高码