我需要使用C ++库将所有帧从MPEG4或H.264视频保存到YUV帧。例如,.yuv,.y4m或.y格式。然后我需要像数字文件一样读取这些帧并更改一些样本(Y值)。如何在不转换为RGB的情况下进行操作?
AVFrame->数据的商店价值如何?存储Y,U和V值的地方?
感谢和抱歉我的英语=)
答案 0 :(得分:1)
如果使用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]