问题标签 [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.
ffmpeg - sws_scale() 不会简单地将图像从源复制到目标
尝试将任意视频读取为纯 RGB24 像素,因此使用sws_scale()
以下方式转换帧:
一切都没有任何错误,但pic_out
最终具有与pic_src
. 可能是什么问题呢?
完整的最小示例在这里(假设是RGB24图像作为2.bmp存在,看起来实际上是YUV -something)
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
c++ - 在 GLFW 窗口中显示 FFMPEG 解码帧
我正在实现游戏的客户端程序,其中服务器将游戏的编码帧发送到客户端(通过 UDP),而客户端将它们解码(通过 FFMPEG)并将它们显示在GLFW窗口中。我的程序有两个线程:
- 线程 1:渲染 uint8_t* 变量的内容
dataToRender
- 线程2:不断从服务器获取帧,解码并
dataToRender
相应更新
线程 1 在 while 循环中执行 GLFW 窗口的典型渲染。我已经尝试显示一些虚拟帧数据(一个完全红色的帧)并且它有效:
线程 2 是我遇到麻烦的地方。我无法将解码的帧正确存储到我的dataToRender
变量中。最重要的是,帧数据原本是 YUV 格式,需要转成 RGB。我为此使用 FFMPEG sws_scale
,这也给了我bad dst image pointers
控制台中的错误输出。这是负责该部分的代码片段:
我已经尝试过另一个 sws_scale 将内容复制到dataToRender
,但我无法摆脱bad dst image pointers
错误。任何关于该问题的建议或解决方案都将不胜感激,因为我已经为此困扰了好几天。
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,不记得确切(
其他注意事项:
- libav .so 文件是从 mobile-ffmpeg 项目编译的。
- 我也可以 sws_scale 也可以在 x86_64 linux 上使用 SDL 来投影 YV12
- 测试视频在这里:https ://github.com/markkimsal/video-thumbnailer/tree/master/fixtures
block
是一个简单的 C 结构,带有指向相关 AV 内存结构的指针。- 使用 FFMPEG 4.3.2
我很确定它与像素对齐有关。但是关于这个主题的文档实际上是不存在的。它也可能是像素格式 RGBA 和 RGB32 之间的差异,或者可能是小端与大端之间的差异。
go - libswscale bad dst 图像指针 cgo
我正在尝试使用 libswscale 在使用 cgo 编码为 h264 之前缩放图像。这里我写了一个简单的demo(抱歉代码风格不好,我只是想快速验证一下):
每次我运行代码片段时,我都会收到一条错误消息bad dst image pointers
,说我的代码有什么问题。我是cgo的新手,所以代码对你来说可能很愚蠢,我为此道歉。如果您有更优雅的方式来实现功能,我会全力以赴。任何建议将不胜感激。
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 参数:
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。
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 图像被正确复制:
所以看起来我的缓冲区功能有问题,但我可以弄清楚它有什么问题:
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 存在一些舍入错误(代码未显示):
ffmpeg - ffmpeg、swscale、ARGB -> NV12、错误的 NV12 图像
我正在获取ARGB
帧,我需要将它们转换为NV12
格式。我正在使用下面的代码,但结果似乎是错误的图片,因为我无法使用 ImageMagick 的display
工具查看它,并且由于错误而无法转换为png
using 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:
转换:
输出如下所示:
我究竟做错了什么?
最好的!