我需要使用C ++库将所有帧从MPEG4或H.264视频保存到YUV帧。例如,.yuv,.y4m或.y格式。然后,我需要像读取数字文件一样读取这些帧并更改一些样本(Y值)。不转换为RGB怎么办?

以及如何存储AVFrame-> data的值? Y,U和V值存储在哪里?

谢谢,抱歉我的英语=)

最佳答案

如果使用libav *进行解码,您将在其本机色彩空间(通常为YUV 420)中接收帧,但这是在编码时选择的。假设您使用YUV420或转换为YUV420 y: AVFrame->data[0]u: AVFrame->data[1]v: AVFrame->data[2]

对于Y,每个像素1个字节AVFrame->data[0][(x*AVFrame->linesize[0]) + y]
对于U和V,其每字节4像素(Y平面的四分之一分辨率)。所以
AVFrame->data[1][(x/2*AVFrame->linesize[1]) + y/2]AVFrame->data[2][(x/2*AVFrame->linesize[2]) + y/2]

关于c++ - FFMPEG API:将MPEG解码为YUV帧并更改这些帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28995569/

10-10 13:35