0
我與MPEG-4,H264工作流如何從AVFrame獲取亮度圖片?
首先我tryed轉換爲RGB24和使用imagemagic使灰度,它亙古不變的工作
while(av_read_frame(pFormatCtx, &packet)>=0)
{
// Is this a packet from the video stream?
if(packet.stream_index==videoStream)
{
// Decode video frame
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished,
&packet);
// Did we get a video frame?
if(frameFinished)
{
f++;
//this->fram->Clear();
// if (pFrame->pict_type == AV_PICTURE_TYPE_I) wxMessageBox("I cadr");
// if (pFrame->pict_type != AV_PICTURE_TYPE_I)
// printMVMatrix(f, pFrame, pCodecCtx);
pFrameRGB->linesize[0]= pCodecCtx->width*3; // in case of rgb4 one plane
sws_scale(swsContext, pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);
Magick::Blob* m_blob = new Magick::Blob(pFrameRGB->data,pCodecCtx->width*pCodecCtx->height*3);
Magick::Image* image =new Magick::Image(*m_blob); // this doesnotwork
image->quantizeColorSpace(Magick::GRAYColorspace);
image->quantizeColors(256);
image->quantize();
但是ffmpeg的給我YUV圖片?所以只需要Y組件,如何得到它?得到Ypicture [x] [y]
謝謝!在什麼顏色空間下ffmpeg avcodec_decode_video2默認打包未編碼的視頻幀? – user3177342
無論視頻編碼的顏色空間是多少,並且可以從編解碼器到編解碼器/文件到文件有所不同。由於歷史原因,大多數編解碼器使用YUV420或YUV422。但我相信未來會有更多的人開始使用YUV444。您隨時可以查看AVCodecCtx.pix_fmt以瞭解您所得到的結果。 – szatmary
此外,如果這有助於您請upvote並添加接受答案。 – szatmary