RGB 帧编码 - FFmpeg/libav

2024-01-20

我正在学习 FFmpeg 中的视频编码和解码。我尝试了这个代码示例page http://www.ffmpeg.org/doxygen/0.6/api-example_8c-source.html(仅视频编码和解码部分)。这里创建的虚拟图像是 YCbCr 格式。如何通过创建 RGB 帧来实现类似的编码?我被困在:

Firstly,如何创建这个 RGB 虚拟框架?

第二,如何对其进行编码?使用哪个编解码器?其中大多数仅适用于 YUV420p...

EDIT:我有一个 YCbCr 编码器和解码器,如上所示page http://www.ffmpeg.org/doxygen/0.6/api-example_8c-source.html。问题是,我的数据库中有 RGB 帧序列,我需要对其进行编码。但编码器适用于 YCbCr。所以,我想知道以某种方式将 RGB 帧转换为 YCbCr (或 YUV420P),然后对它们进行编码。 在解码结束时,我得到解码后的 YCbCr 帧,并将它们转换回 RGB。如何继续进行呢?

我确实尝试了 swscontext 的东西,但是转换后的帧丢失了颜色信息并且缩放错误。我想使用两个 for 循环手动完成它色彩空间转换公式 https://github.com/camilleg/unblock/blob/master/main.cpp但我无法使用 FFmpeg/libav 库访问帧的单个像素!就像在 OpenCV 中一样,我们可以使用以下命令轻松访问它:Mat img(x,y) 但这里没有这样的东西!我完全是这个领域的新手......

有人可以帮助我吗?

非常感谢!


最好的转换方法是使用 swscale。您可以手动执行此操作,但您的版本会较慢。 ffmpeg 中没有访问像素数据的 API。您必须直接访问缓冲区 YUV420P 是平面格式,因此第一个缓冲区是 Y 平面,每个像素 1 个字节。 U/V 平面为 1 个字节,对应 4 个像素。这是因为在亮度 (Y) 通道包含最多信息的假设下,U 和 V 平面缩放为 Y 平面的 1/4 大小。

00250     picture->data[0] = picture_buf;
00251     picture->data[1] = picture->data[0] + size;
00252     picture->data[2] = picture->data[1] + size / 4;

其次,让我们看看色彩空间转换。

void YUVfromRGB(double& Y, double& U, double& V, const double R, const double G, const double B)
{
  Y =  0.257 * R + 0.504 * G + 0.098 * B +  16;
  U = -0.148 * R - 0.291 * G + 0.439 * B + 128;
  V =  0.439 * R - 0.368 * G - 0.071 * B + 128;
}

并插入一些虚拟值:

R = 255, G = 255, B = 255
Y =  235

R = 0, G = 0, B = 0
Y = 16

正如您所看到的,范围 0 -> 255 被压缩为 16 -> 235。因此,我们表明 RGB 颜色空间中的某些颜色在(数字)YUV 颜色空间中不存在。那么为什么我们要使用YUV呢?这就是电视使用的色彩空间,可以追溯到 1950 年,当时彩色通道 (U/V) 被添加到现有的黑白通道 (Y) 中。

在这里阅读更多内容:http://en.wikipedia.org/wiki/YCbCr http://en.wikipedia.org/wiki/YCbCr

缩放错误是您没有正确使用 swscale。您很可能不理解线步幅:http://msdn.microsoft.com/en-us/library/windows/desktop/aa473780(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/aa473780(v=vs.85).aspx.

我不知道有任何视频编解码器可以在 RGB 色彩空间中运行。您可以使用 libswscale 在 RGB 和 YUV 之间进行转换(略有损耗)。

该视频将解释:https://xiph.org/video/vid2.shtml https://xiph.org/video/vid2.shtml

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

RGB 帧编码 - FFmpeg/libav 的相关文章

  • 将数字字符引用符号转换为 unicode 字符串

    是否有一个标准的 最好是 Pythonic 的方法来转换 xxxx 正确的 unicode 字符串的表示法 例如 1502 1508 1490 1513 1497 应转换为 使用字符串操作可以很容易地完成它 但我想知道是否有一个标准库可以实
  • 自动旋转、UIWebView 和 UITabBarController

    我有以下视图层次结构 UITabBarController UINavigationController UIViewController only supports Portrait rotation UINavigationContro
  • 使用 ffmpeg 在纯色背景上叠加延时视频

    我有很多名为的主页屏幕截图homescreen000001 png homescreen000002 png等 我正在尝试使用 ffmpeg 创建这些图像的延时视频 当我运行以下命令时 它通常可以正常工作 ffmpeg f image2 i
  • 如何将阿拉伯语、希伯来语写入 CSV 文件? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我无法向
  • 如何在 readr/tidyverse 中设置编码/文件编码选项? [复制]

    这个问题在这里已经有答案了 我有一个旧光谱仪的文本文件 它以 UTF 16LE 编码 我用readr guess encoding 功能 我设法在 base r 中读取它 spectra gr2 lt read csv some path
  • VideoView SeekTo 在不同设备上工作异常 - Android

    我在视频视图上使用此代码来寻求自定义位置 但它在三星设备上工作正常 但在索尼设备上 视频寻求开始位置 开始 我想让视频回到上次暂停的位置 创建视频视图 VideoView mVideoPlayer setVideoPath ViDpath
  • ffmpeg通过添加框或边框来扩展(而不是调整大小)视频大小

    假设我有一个特殊分辨率的视频 例如 1280x718 我想将其更改为 1280x720 但我宁愿只在顶部和底部添加一行 而不是将 718 像素垂直插值到 720 所以基本上 我正在寻找一种方法告诉 ffmpeg 创建 1280x720 的输
  • Facebook Messenger Bot:视频附件的大小?能有多大?

    至少在此处的文档中没有说明通过 Facebook Messenger 发送视频附件时所需的大小和格式 https developers facebook com docs messenger platform send api refere
  • 如何使用 AVFoundation 组合不同方向的视频剪辑

    我正在尝试使用 AVFoundation 将多个视频剪辑合并为一个 我可以使用下面的代码使用 AVMutableComposition 创建单个视频 AVMutableComposition composition AVMutableCom
  • 如何在 PHP 中运行 ffmpeg 命令

    我需要在 PHP 中运行 ffmpeg 命令 但是 php ffmpeg 不再支持最新版本并且已经过时 我可以知道在网络文件中运行 ffmpeg 命令的替代方法吗 PHP Javascript jQuery 我尝试exec and shel
  • 为什么我在模拟器中看不到视频?

    我见过几个与此类似的问题 但我想确定一下 我无法在模拟器上运行视频 是否一致 有人在模拟器上成功运行视频吗 以下是我使用的代码 import android app Activity import android net Uri impor
  • Phonegap html5视频无法播放

    我正在尝试在 iPad 上的phonegap 应用程序中播放视频 该视频给了我错误 MEDIA ERR SRC NOT SUPPORTED 我尝试播放的视频不是本地的 当我在该视频上使用curl I 时 这是它带来的信息 HTTP 1 1
  • Android 上的 GStreamer

    谁能给我一些关于让 GStreamer 在 Android 上工作的提示 我以前从未使用过它 我想将它与 FFmpeg 一起使用 我已经编译了 FFmpeg 并且在 Android 上运行良好 我只是想使用 GStreamer 来帮助完成一
  • 使用 ffmpeg 将 h.264 avi 容器转换为 mp4

    我想使用 ffmpeg 将 h 264 avi 容器转换为 mp4 容器 我发现这个有效 ffmpeg i myfile avi vcodec copy myfile mp4 ffmpeg version N 51169 gcedf276
  • 仅使用 url 嵌入视频

    给定一个 youtube url 我如何使用 net c 将视频嵌入到页面中 只需添加如下一行 将 autoplay 设置为 0 或 1 取决于您是否希望人们真正留在您的页面上
  • 如何在PHP中设置文本文件编码?

    如何在 PHP 中设置文本文件编码 例如 UTF 8 让我告诉你我的问题 这是我的代码 Output fwrite 具有类似的输出 但是当我创建test txt通过记事本并设置字符集UTF 8输出就是我想要的 我想在 PHP 文件中设置字符
  • Windows Phone 7 中的 ASCII 编码

    有没有办法在 Windows Phone 7 中使用 ASCIIEncoding 除非我做错了什么Encoding ASCII不存在 我需要它来进行 C gt PHP 加密 因为 PHP 在 SHA1 加密中仅使用 ASCII 有什么建议么
  • Google Cloud Platform:将上传的 MP4 文件转换为 HLS 文件

    我正在构建一个平台 允许用户将一些视频文件 20 40 秒 从手机上传到服务器 所有这些上传目前都运行良好 文件通过nodejs云功能存储在谷歌存储桶中 现在我想创建一个 gcp 转码器作业 它将上传的 mp4 视频文件转换为 hls 视频
  • 带 % 的 Flask URL 参数未正确处理

    EDIT2 对于缺乏清晰度 我深表歉意 我将提供几个值 第一个是我使用前端应用程序调用的 URL 第二个是调用前的值urllib unquote 第三个是调用后的值urlib unquote 前端 console log http loca
  • 访问 AVFrame 的每个像素

    我需要访问 FFMPEG 的 AVFrame 对象的每个像素信息 如果是 RGB 则每个像素的每种颜色 R G 和 B 我怎样才能做到这一点 如果您已经前进到正确的框架 类似于 img convert ctx ffmpeg sws getC

随机推荐

  • 请求标头未从拦截器角度 2/4 成功更新(401 处理)

    我正在使用 Http 拦截器并尝试重试失败的请求来处理401 error 我正在尝试设置一个新标头来更新请求 但它不起作用 我注意到我的标头没有通过请求设置 而是转到lazyUpdates内部标头 任何人都可以告诉我为什么会发生这种情况 检
  • 更改 emacs 文本模式的边距

    我发现根据自己的喜好更改 emacs 中的边距而又不会出现滑稽的情况的唯一方法是 add hook window configuration change hook lambda set window margins car get buf
  • codeigniter 中的无限滚动 jquery 插件

    我的 config 文件夹中有一个 pagination php 文件 代码如下 config num links 5 config use page numbers TRUE config query string segment pag
  • 使用批处理文件计算文件夹和子文件夹的数量

    我正在创建一个批处理文件 当给定路径时 它将计算其中的所有文件夹和子文件夹 到目前为止 我只能收集路径第一层内的文件夹数量 然后我会将其传输到一个文本文件 这是我到目前为止所拥有的 for f a in dir b ad folder fi
  • mgcv bam() 错误:无法分配大小为 99.6 Gb 的向量

    我正在尝试使用 bam mgcv 库 拟合加法混合模型 我的数据集包含来自对 300 个健康中心内 2 10 5 名儿童生长情况的纵向研究的 10 6 观察结果 我正在寻找每个中心的坡度 模型是 bam haz s month bs cc
  • 使用 uint64_t 作为键和结构体作为值的 GHashTable

    我正在学习GHashTable 虽然 Stackoverflow 中已经有一些例子 但它们只是一些常见的情况 所以我仍然不确定如何实现我的要求并决定寻求帮助 我想用一个uint64 t作为钥匙和struct作为价值 我发现没有这样的内置哈希
  • 您可以将 VectorDrawable pathData 转换为 Path 对象吗

    是否可以拉动pathData出于一个VectorDrawable并将其转换为Path目的 我想创建一个自定义ViewOutlineProvider并给它一个任意形状来剪切和投射阴影 如果有办法直接使用VectorDrawable那就更好了
  • 内联柔性容器宽度不增长

    考虑以下布局 div class div span class span1 test span span class span2 test test test test test span div 和CSS div display inli
  • 是否有一个 Excel 公式可以搜索列表并突出显示包含不同列表中的单词的文本? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在 Excel 文档中有两个表 更像是列表 两者都只是一列 我想创建一个公式来搜索第一个列表并突出显示包含第二个列表中的某个单词的任
  • Qt 翻译非源文件中的字符串

    我有一个使用 XML 文件的 Qt 项目 这些 XML 文件包含人类可读的文本 并且应使用 Qt 工具 lupdate lrelease QtLinguist 翻译该文本 问题是是否可以通过 lupdate 在 ts 文件中生成条目 而无需
  • Jetpack compose 中使用 AppCompatActivity 代替 ComponentActivity

    我想打开datePickerJetpack compose 中单击按钮上的对话框 为此 我在按钮的内部使用以下代码onClick action val context LocalContext current Button onClick
  • 清除 EB 初始化配置

    有没有办法清除以前的 eb init 配置 之前的配置包含早期 AWS 账户中不存在的资源 我正在使用新的 AWS 账户并想要初始化现有的 Beanstalk 环境 Thanks 您可以随时添加 help到命令以查看可用的选项 例如 eb
  • Angular Datepicker更改日期格式

    我使用 Angular Material 中的 DatePicker 我想将输出格式更改为yyyy mm dd 目前它以以下格式打印日期 Wed Nov 14 2018 00 00 00 GMT 0100 Central European
  • Eclipse:启用自动完成/内容辅助

    如何在 Eclipse 中启用自动完成功能 我找不到它 If you would like to use autocomplete all the time without having to worry about hitting Ctr
  • 使用 Quercus 从 Java 调用 PHP

    我有一个示例 PHP 类 我想在我的 Java 应用程序中使用它 我们决定使用 Quercus 作为进行集成的库 有人可以告诉我如何使用 Quercus 从 Java 代码调用 PHP 类吗 例如 PHP 类名称是calculator ph
  • 在 Mac OS X 上编译 ncurses 应用程序时出错

    我试图在 Mac OS X 10 6 8 上编译基于 ncurses 的应用程序 但出现此错误 Undefined symbols for architecture x86 64 initscr referenced from main i
  • 带有 SQL Server 后端和 pyodbc 的 Airflow Scheduler

    我已经将 Airflow 设置为 SQL Server 作为后端 SQL Azure 初始化数据库成功 我试图每 2 分钟运行一次简单的 dag dag 有 2 个任务 打印日期 sleep 当它启动气流调度程序时 它会为这两个任务创建任务
  • 文件/路径的 PHP 正则表达式

    匹配以下任意一项的 php 正则表达式是什么 privacy html privacy htm privacy w3c privacy html w3c privacy htm w3c privacy thanks JP Try w3c p
  • 列表的 youtube 播放器 api 始终播放初始视频

    我想切换播放列表https jsfiddle net g1xfh7rd https jsfiddle net g1xfh7rd 但它总是重新加载相同的初始播放列表 我尝试了所有建议的解决方案包含视频的 YouTube 播放器 API 列表
  • RGB 帧编码 - FFmpeg/libav

    我正在学习 FFmpeg 中的视频编码和解码 我尝试了这个代码示例page http www ffmpeg org doxygen 0 6 api example 8c source html 仅视频编码和解码部分 这里创建的虚拟图像是 Y