问题标签 [swscale]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
987 浏览

c++ - ffmpeg YUV420 转 RGB24 只转换一行

我正在尝试将我的 YUV420p 图像转换为 c++ 中的 RGB24,并从 c# 中的字节数组创建位图。

我的图像大小为 1920 w * 1020 h,ffmpeg 解码器为我提供了 3 个平面数据,线大小 = {1920、960、960}。但是在 sws_scale 之后,我得到的 RGB 图片只有一个线大小 = 5760 的平面。它看起来不正确:我应该得到 (5760 * h),而不仅仅是一行数据。我做错了什么?

0 投票
1 回答
537 浏览

ffmpeg - 更改区域上的 FFmpeg sws_scale

sws_scale用来将一组 RGB32 图像转换为 YUV420 格式。每个图像都与前一个图像非常相似,它们仅在矩形区域 Q 上有所不同。

我的问题是如何利用 Q 来加快转换过程?应为sws_scale函数添加一个附加参数。

0 投票
1 回答
1616 浏览

c++ - 错误:未找到 swscale 标头!安装 FFmpeg 或 Libav

我想在我的 Ubuntu 机器上编译 OpenMCU.ru,当我运行./configure命令时,出现以下错误:

有什么解决办法吗?

0 投票
1 回答
996 浏览

ffmpeg - FFMPEG - AVFrame 到每个通道数组的转换

我希望将一个复制AVFrame到一个数组中,其中像素以行优先顺序一次存储一个通道。

细节:

我正在使用 FFMPEG 的 api 从视频中读取帧。我曾经按如下avcodec_decode_video2方式获取每一帧:AVFrame

目标数组如下所示:

我需要将所有内容复制vid_frameframe_arr中,其中像素值的范围应为 [0, 255]。问题是数组需要按行主要顺序存储帧,一次一个通道,即R11,R12,... R21,R22,... G11,G12,... G21,G22,.. . B11, B12, ... B21, B22, ... (我使用了符号[颜色通道][行索引][列索引],即G21是第2行第1列像素的绿色通道值) . 我看过sws_scale,但我对它的理解还不够,无法弄清楚该函数是否能够进行这样的转换。有人可以帮忙吗!!:)

0 投票
1 回答
240 浏览

x264 - x264 流颜色偏移

我使用 swscale + x264 将 RGB 图像序列编码为 h264 流。当输入图像(红色)中的 RGB 值全部(255, 0, 0)为 时,swscale + x264 输出的 YUV 为(81, 90, 240). 通过使用 swscale,可以将此 YUV 值转换回原始 RGB 值。但是,当我使用 PotPlayer 播放流时,会出现颜色偏移。

我捕获了第一帧并将其保存为 bmp 文件。bmp 文件中的 RGB 值为(255, 24, 0),其中绿色通道不为零。

如何解决这个色偏问题?

我通过使用 sws_setColorspaceDetails.

0 投票
0 回答
258 浏览

c++ - FFMPEG (swscale) - 是否可以设置转换系数?

我在我的 c++ 程序中使用sws_scale函数将 YUVA420P 转换为 RGBA。似乎 alpha 通过“直接”并且不影响 RGB 通道,但我确实想预乘 alpha。

是否可以使用 swscale 设置转换矩阵,以便我能够实现预乘?

0 投票
2 回答
486 浏览

c++ - 使用 swscale 进行图像合成

我有一个输入图像 A 和一个以 YUV420 格式存储的大小为 800x600 的结果图像 B,我需要将图像 A 缩放为 100x100 大小并在某个点(x = 100,y = 100)将其放入结果图像 B 中。为了减少内存和 CPU 使用率,我将 swscale 结果直接放入最终的 B 图像中。

这是一个代码片段(非常简单):

接下来我们创建相应的切片和步幅来描述图像 A

现在对目标 B 图像执行相同操作

毕竟 - 调用 swscale

使用测试序列后,我遇到了一些无效结果,并出现以下问题:

  1. Y 组件有一些填充线
  2. UV 组件放错了位置 - 它们比原始 Y 组件低一点。

人工制品

有人对 swscale 函数有同样的问题吗?我对这个 FFmpeg 库集合非常陌生,所以我愿意接受任何关于如何正确执行此任务的意见。

FFmpeg 版本使用 3.3

0 投票
0 回答
424 浏览

c++ - 使用 FFmpeg 库处理 GIF - 在 av_parser_init 中找不到解析器

我正在玩 ffmpeg 库,即libswscale现在libavcodec。我的目标是调整 GIF 文件的大小。根据我荒谬的理解,我认为我需要

  • 解码 GIF 并获得一个 AVFrame
  • 使用 libswscale 处理帧
  • 再次编码成GIF

但我被困在第 1 步。根据https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decode_video.c上的官方示例,我需要一个解析器:

但是没有找到解析器。我在配置调用中没有触及解析器,所以我全部接受:

我究竟做错了什么?如果这是错误的方法,那么正确的方法是什么?

0 投票
1 回答
693 浏览

c - Swscale - 图像补丁 (NV12) 颜色转换 - 无效边框

目标是将 NV12 转换为 BGR24 图像,更准确地说是图像块(x:0, y:0, w:220, h:220)。
问题是转换后的补丁右侧未定义的像素列,如下所示: 在此处输入图像描述

问题是为什么会发生这种情况(即使补丁的坐标和尺寸具有偶数值)(有趣的是,对于奇数宽度值,该问题不存在)


该补丁具有以下边界框:(x:0, y:0, w:220, h:220)。
该行为应该可以用任何图像重现。可以使用ppm 转换页面进行转换。

以下代码从 bgr24 图像创建 nv12 图像,然后将 nv12 补丁转换回 bgr24 补丁。如果一切正常,输出应该与源图像相同。

0 投票
1 回答
1098 浏览

c++ - FFMPEG:sws_scale 返回错误:切片参数 0、2160 无效

我正在尝试按照教程在 SDL 中显示 ffmpeg AVFrame 输出。本教程(以及我在网上看到的所有示例)仍在使用“sws_getContext”,它已被弃用并从最新版本的 ffmpeg 中删除。尝试将当前像素格式从当前的任何格式更改为 PIX_FMT_YUV420P,以便我可以显示它。我相信我需要 sws_scale 函数来完成这个。

但是,sws_scale是导致命令行错误的函数: 切片参数0、2160无效

这是我与 swsContext 相关的所有代码:

更复杂的是,SwsContext 仅在 ffmpeg 内部定义,在外部我无法设置/获取任何变量,甚至无法在调试器中查看它们。

int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[])

其他参数的值,除了 av_sws_ctx:

如果我深入研究 sws_scale 源代码,我发现这个错误是由这段代码引发的:

因此,我认为问题在于我的视频的高度大于 sws_context(4k 视频)。但无法弄清楚如何使用 sws_alloc_context 或 sws_init_context 或任何其他函数告诉 sws_context 它的高度。

看到我缺少的东西了吗?谢谢你。