问题标签 [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 回答
304 浏览

ffmpeg - sws_scale() 不会简单地将图像从源复制到目标

尝试将任意视频读取为纯 RGB24 像素,因此使用sws_scale()以下方式转换帧:

一切都没有任何错误,但pic_out最终具有与pic_src. 可能是什么问题呢?

完整的最小示例在这里(假设是RGB24图像作为2.bmp存在,看起来实际上是YUV -something)

0 投票
1 回答
152 浏览

png - sws_scale PAL8 到 RGBA 返回不清晰的图像

我正在使用 sws_scale 将图像和视频从每种格式转换为 RGBA,使用由此创建的 SWSContext:

但是当使用颜色类型为 Palette (pix_fmt = AV_PIX_FMT_PAL8) 的 PNG 时,sws_scale 似乎没有考虑到透明颜色,并且生成的 RGBA 栅格不透明。这是 sws_scale 的错误,还是我对结果做了一些假设?

调色板图片: https ://drive.google.com/file/d/1CIPkYeHelNSsH2TAGMmr0kfHxOkYiZTK/view?usp=sharing

RGBA 图片: https ://drive.google.com/open?id=1GMlC7RxJGLy9lpyKLg2RWfup1nJh-JFc

0 投票
1 回答
305 浏览

c++ - 在 GLFW 窗口中显示 FFMPEG 解码帧

我正在实现游戏的客户端程序,其中服务器将游戏的编码帧发送到客户端(通过 UDP),而客户端将它们解码(通过 FFMPEG)并将它们显示在GLFW窗口中。我的程序有两个线程:

  1. 线程 1:渲染 uint8_t* 变量的内容dataToRender
  2. 线程2:不断从服务器获取帧,解码并dataToRender相应更新

线程 1 在 while 循环中执行 GLFW 窗口的典型渲染。我已经尝试显示一些虚拟帧数据(一个完全红色的帧)并且它有效:

线程 2 是我遇到麻烦的地方。我无法将解码的帧正确存储到我的dataToRender变量中。最重要的是,帧数据原本是 YUV 格式,需要转成 RGB。我为此使用 FFMPEG sws_scale,这也给了我bad dst image pointers控制台中的错误输出。这是负责该部分的代码片段:

我已经尝试过另一个 sws_scale 将内容复制到dataToRender,但我无法摆脱bad dst image pointers错误。任何关于该问题的建议或解决方案都将不胜感激,因为我已经为此困扰了好几天。

0 投票
1 回答
403 浏览

android - libav sws_scale() 在真实设备上的色彩空间转换失败,适用于模拟器

我正在用 libav 制作电影播放器​​。我正在解码视频数据包,我正在反向工作,我正在寻找工作。所有这些都无法在 x86 android 模拟器上运行,但无法在真正的 android 手机上运行(arm64-v8a)

失败在sws_scale()- 它返回 0。视频帧继续正确解码,没有错误。

libav 没有错误、警告和警报。我已经连接了一个avlog_callback

执行此操作的代码sws_scale()是:

设置 codex 和 avframes:

通配符是:

  • 我正在使用 React-Native
  • 我的模拟器是 x86 android api 28
  • 我的真实设备是 arm64-v8a AOSP(大约 api 28,不记得确切(

其他注意事项:

我很确定它与像素对齐有关。但是关于这个主题的文档实际上是不存在的。它也可能是像素格式 RGBA 和 RGB32 之间的差异,或者可能是小端与大端之间的差异。

0 投票
2 回答
335 浏览

go - libswscale bad dst 图像指针 cgo

我正在尝试使用 libswscale 在使用 cgo 编码为 h264 之前缩放图像。这里我写了一个简单的demo(抱歉代码风格不好,我只是想快速验证一下):

每次我运行代码片段时,我都会收到一条错误消息bad dst image pointers,说我的代码有什么问题。我是cgo的新手,所以代码对你来说可能很愚蠢,我为此道歉。如果您有更优雅的方式来实现功能,我会全力以赴。任何建议将不胜感激。

0 投票
1 回答
344 浏览

c++ - BGRA 到 YUV420 FFmpeg 输出不良

我的目的是录屏。我正在使用 Windows DXGI API 接收屏幕截图,并使用 libx264 将屏幕截图编码为视频。将 BGRA 图像直接馈送到 libx264 会在输出视频中产生奇怪的颜色。因此,为了获得正确的颜色,我正在尝试将 BGRA 转换为 YUV420p。为了加快编码速度,我还尝试缩小 BGRA 图像。

所以我得到一个 1920x1080 BGRA 图像,我想将它转换为 1280x720 YUV420p。为此,我使用 FFmpeg swscale 库来进行格式转换和缩小。

问题是输出视频就像同一帧中的 3 个图像一样。请看这个视频。https://imgur.com/a/EYimjrJ

我只尝试了 BGRA 到 YUV 的转换,没有任何缩减,它工作正常。但是 BGRA 到 YUV 的缩小会带来这个问题。

这个问题的原因是什么?我如何解决它?

这是我的代码片段:

这是我的 libx264 参数:

0 投票
1 回答
1165 浏览

c++ - sws_scale,YUV 到 RGB 的转换

我需要将 YUV 转换为 RGB。我还需要 RGB 值在有限范围内(16-235)。我尝试使用 sws_scale 函数来完成这项任务。

我的代码你可以在下面看到。但转换后我得到的黑色像素是 (0, 0, 0) 而不是 (16, 16, 16)。

也许有一些选项可以告诉 sws_scale 函数计算有限范围。

我也尝试使用公式手动将 YUV 像素转换为 RGB 像素,我得到了正确的结果。从 YUV (16, 128, 128) 我得到 (16, 16, 16) 的 RGB。

0 投票
1 回答
130 浏览

c - libav C++ sw_scale 返回 BGR24 缓冲区的可变字节大小

我正在尝试将我的本地 /dev/video0 cam 转换为 BGR24 格式。如果我调整图像大小(虽然不是 100% 的时间,更像是 85% 的时间),它会起作用,但我想保持与输入视频相同的大小。

我像这样初始化 BGR 图像,包括 sws 上下文:

这是我的解码循环的一部分:

THe question is how to copy the plane of AVFrame into a buffer

如果我尝试保存到文件 BGR 图像被正确复制:

所以看起来我的缓冲区功能有问题,但我可以弄清楚它有什么问题:

0 投票
0 回答
56 浏览

c - sws_scale gray->float:我做错了什么?

我正在尝试将 gray8 格式的帧转换为 grayf32 和 gbrpf32 格式。下面的代码适用于 grayf32,但不适用于 gbrpf32。我在下面的代码中做错了什么?

这是我得到的输出:

虽然我预计 RGB 浮点数的所有通道都是 0.00000、0.33333、0.66667、1.00000,但这显然不是我得到的。FWIW,如果我使用 rgb24 而不是 gray8 作为输入(所以 rgb24->gray32f 和 rgb24->gbrpf32),那么它确实对两者都正常工作,除了 grayf32 格式似乎使用了错误的颜色范围(尽管正在设置)并且 gbrpf32 存在一些舍入错误(代码未显示):

0 投票
0 回答
41 浏览

ffmpeg - ffmpeg、swscale、ARGB -> NV12、错误的 NV12 图像

我正在获取ARGB帧,我需要将它们转换为NV12格式。我正在使用下面的代码,但结果似乎是错误的图片,因为我无法使用 ImageMagick 的display工具查看它,并且由于错误而无法转换为pngusing ffmpeg( ffmpeg -s 320x240 -pix_fmt nv12 -i 12-11- 13.473.nv12 -f image2 -pix_fmt rgb24 captdump.png):12-11-13.473.nv12: Invalid data found when processing input

获取 swcontext:

转换:

输出如下所示:

我究竟做错了什么?

最好的!