【发布时间】:2014-05-20 13:54:05
【问题描述】:
我想在使用 ffmpeg 解码的每一帧中提取像素的 rgb 值。我查看了ffplay源代码
get_video_frame
video_refresh
queue_picture
我尝试了以上三种方法来挂钩框架,但我不明白如何获取像素的 rgb 值。有人可以指点一下吗
【问题讨论】:
-
视频不对 RGB 进行操作,它使用 YCbCr(通常是 4:2:0 二次采样,如果你不明白,请使用维基百科)然后只需执行
ffmpeg -i file.264 out.yuv即可获得重建的缓冲区。在那里,您将所有像素值直接作为 uint8。 -
我希望将像素值提供给外部进程,这样我就无法将它们转储到文件中并从外部读取它们。所以这个想法是当我播放视频时,我想打开一个套接字并发送像素值
-
如我所说。 ffmpeg 提供 YCbCr 4:2:0 数据。如果您需要 RGB,则需要使用 Rec.601 或 Rec.709 中定义的变换矩阵将数据转换为 RGB。函数
avcodec_decode_video2返回一个 YCbCr 解码缓冲区。 ffmpeg 可能也可以进行转换,但我从不使用 RGB 数据,所以我不知道如何 -
不一定正确。 avcodec_decode_video2 以编解码器对其进行编码的任何格式为您提供像素数据。 YCbCr 4:2:0 可能是最常见的格式,但它可能是 RGB、YUV444 等。你需要检查 AVCodec 中的 pix_fmt。从那里您可以从 AVFrame 结构中提取像素数据。