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

h.264 - 如何将来自相机的输入图像编码为 H.264 流?

我正在尝试使用 Mac OS X 10.9.5 上的 libx264 将来自 MacBook Pro 内置 FaceTime 高清摄像头的输入图像实时编码为 H.264 视频流。

以下是我采取的步骤:

  1. 使用 AVFoundation API(AVCaptureDevice 类等)以 15fps 从相机获取 1280x720 32BGRA 图像
  2. 使用 libswscale 将图像转换为 320x180 YUV420P 格式。
  3. 使用 libx264 将图像编码为 H.264 视频流(基线配置文件)。

每次从相机获取图像时,我都会应用上述步骤,相信编码器会跟踪编码状态并在可用时生成 NAL 单元。

由于我想在向编码器提供输入图像的同时获取编码帧,因此我决定每 30 帧(2 秒)刷新一次编码器(调用 x264_encoder_delayed_frames())。

但是,当我重新开始编码时,编码器会在一段时间后停止(x264_encoder_encode() 永远不会返回。)我尝试在刷新之前更改帧数,但情况没有改变。

下面是相关代码(我省略了图像捕获代码,因为它看起来没有问题。)

你能指出我可能做错了什么吗?

0 投票
0 回答
8350 浏览

ffmpeg - swscaler@0dd9e620:使用了不推荐使用的像素格式,请确保您正确设置了范围”

我正在用 FFMpeg 解码 RTSP 视频流。在显示时(调用cv::imshow(...)),我得到以下异常:

[swscaler @ 0d55e5c0] 使用了不推荐使用的像素格式,请确保您正确设置了范围

我正在将像素格式从“AV_PIX_FMT_YUVJ420P”转换为“AV_PIX_FMT_YUV420P”。仍然得到上述异常。任何帮助表示赞赏;

0 投票
2 回答
4078 浏览

video - 像素格式转换问题 [FFMPEG]

我使用 ffmpeg 的库编写了一个小程序。执行以下操作-

1)解码一帧。2)将帧转换为 rgb24 。3)将rgb24帧转换回yuv420p。4)编码yuv420p帧并打包成视频文件。

但结束视频与输入视频不同。最终视频中有一些伪影(水平线)。当调用 rgbToYuv 方法时,我也会收到警告 - 警告:数据未对齐!这可能会导致速度损失

我怀疑我的格式转换方法有问题,因为当我从我的程序中评论覆盖步骤时,输出视频与输入视频相同。

以下是我的方法 -

输入视频的尺寸是424 X 200。我的转换功能有什么问题吗?

0 投票
0 回答
613 浏览

ffmpeg - FFMPEG swscale 1920x1080 UYVY422 下降到奇数宽度会产生不正确的颜色

我正在使用 libswscale(来自 FFMPEG)将 1920x1080 UYVY422 图像缩放到以编程方式确定的大小,具体取决于我们要渲染到的大小窗口。

在调整“画布”的大小时,我注意到图像的颜色会在正常和无效(不正确的颜色)之间来回变化。

在分析了颜色无效的尺寸后,我注意到当宽度为偶数像素时,图像总是看起来是正确的。

从那以后,我更新了我的代码以始终缩放到均匀的宽度。

它适用于此代码。但是,我仍然不明白它为什么这样做。如果我缩放原始宽度为奇数的图像,我是否必须确保我的宽度也是奇数?我想明白这一点。

0 投票
1 回答
1218 浏览

c++ - 使用 SWScale 的 FFMpeg RGB32 到 NV12

我正在尝试将 RGB32 帧转换为 NV12 帧以输入编码器。

如果我制作 m_outputPixelFormat AV_PIX_FMT_RGB32 并使用 DMO 颜色空间转换器,视频会正确输出。但是,如果我将其更改为 NV12,我最终会得到一个倾斜的视频,底部缺少数据。我知道这是由于我错误地将数据从缓冲区中复制出来造成的,但我不确定我做错了什么。

0 投票
0 回答
993 浏览

ffmpeg - ffmpeg 记录改变颜色

我尝试从屏幕录制视频,用于写入视频文件我使用 ffmpeg(libavcodec)。但在结果上我看到了其他颜色,我的例子:

分辨率 1920x1080。在原始显示上看这个http://joxi.ru/p27bbn6u093elm

保存视频颜色时调光器http://joxi.ru/YmE99W1fZvbdWm

看起来,白色背景颜色变为灰色。或者可能是亮度。我做错了什么?我怎样才能保存到颜色?

UDP

我尝试使用

但这永远不会改变

0 投票
1 回答
916 浏览

c++ - AVFrame 有一个负的 linesize

我正在使用 libav(为 MSVC 构建的 2.7)使用 dshow 打开相机:

当我打开视频流时,它是格式的“原始视频”(根据其long_nameAV_PIX_FMT_BGR24。我需要有框架,AV_PIX_FMT_RGB24所以我制作了一个 SwsContext,如下所示:

然后我有一个循环计时器来读取帧并解码为 AVFrame,然后将其传递给 sws_scale。

在此之后,我将av_picture在我的应用程序中使用,但是sws_scale挂起和崩溃。看着我要处理的所有数据sws_scale,除了linesize之外,我觉得没什么奇怪的av_frameav_frame->linesize[0] == -1920(linesize[1]并且linesize[2]是 0 的预期BGR24)。由于我的框架宽度是 640,我预计是 1920,但负号似乎很奇怪。我试过翻转标志,但没有帮助。我应该注意,它不会每次都崩溃(有些运行它首先会通过几帧)。

为什么 linesize 是负数?这是否意味着什么,或者只是以某种方式搞砸了?

0 投票
0 回答
300 浏览

c - FFMpeg libswscale XBGR32 到 NV12 几乎可以工作,但颜色错误

我从 XBGR32 格式的 GPU 获得 Linx DMA-BUF,我需要使用 FFMpeg 的 libswscale 将其在 ARM 上转换为 NV12。

根据各种 SO 帖子和文档,我几乎可以让它工作。

这是 GPU 实际输出的 LCD 屏幕: 在此处输入图像描述

这是 libswscale 创建的 NV12 帧的编码数据 - 它应该显示与屏幕相同的颜色: 在此处输入图像描述

请注意,这些照片并非在同一时间拍摄。

我究竟做错了什么?

这是我的代码的相关部分:

0 投票
1 回答
1054 浏览

c++ - FFMPEG 缩放错误-无效维度

我正在开发 FFMPEG 中的一个项目,现在我遇到了一个问题。

我想要做的是,将 png pic 转换为 mpeg 视频文件。我已经设法从图片中获取信息,但不知何故我无法将图片转换为 YUV 格式。它返回“0x0->0x0 是无效的缩放尺寸”。

这是我的代码:

编辑:

转换后,我尝试将帧编码为 oa 数据包,但数据包的大小为 0。代码

0 投票
1 回答
4835 浏览

c++ - 如何使用 DXVA2 和 ffmpeg 解码和获取帧

我已经搜索了一个关于如何在 Windows 中使用 ffmpeg 使用硬件加速解码 H264 流的简单示例,但我找不到任何内容。我知道我应该使用 dxva2 和 ffmpeg 来进行硬件加速。

我可以在 CPU 上使用 ffmpeg 解码 H264,然后将 NV12 格式转换为 RGBA 并将帧保存为 bmp 文件,这要归功于post中提供的示例项目。

我已按照以下帖子中提供的内容获取有关 dxva2 的帮助:发布

我相信我可以用 dxva2 成功解码;但是,当我想获取解码帧并将其转换为 RGBA 格式并将其保存为 bmp 文件时,我收到有关源指针的错误。

我解码和检索帧如下:

并将输出帧馈送到:

我收到此错误:

[swscaler @ 030c5c20] 错误的 src 图像指针

显然有些问题,pFrameYuv->data但我不知道是什么。

我们如何将使用 DXVA2 解码的 NV12 帧转换为使用 sws_scale 的 RGBA?