在ffmpeg中反交错

时间:2010-11-12 14:17:57

标签: video ffmpeg video-processing

我已按照教程here将视频文件加载到C程序中。但框架不是去隔行扫描。

从我看到的情况来看,ffmpeg可执行文件支持-deinterlace开关。我怎么在代码中这样做?我应该阅读哪些库/函数?

1 个答案:

答案 0 :(得分:5)

您必须手动调用avpicture_deinterlace以对每个解码帧进行解交织。可以找到函数定义here。它基本上看起来像这样(使用教程第一页中的变量):

avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
                     packet.data, packet.size);

if(frameFinished) {
    avpicture_deinterlace((AVPicture*)pDiFrame, 
                          (const AVPicture*)pFrame, 
                          pCodecCtx->pix_fmt, 
                          width, 
                          height);
     . 
     . 
     .
 }

请注意,您必须通过创建自己的缓冲区并调用pDiFramepFrameRGB来初始化avcodec_alloc_frame,类似于他们在教程中初始化avpicture_fill的方式,只有这一点时间像素格式将是解码帧(pCodecCtx->pix_fmt)的时间,而不是24位RGB。

在逐行扫描之后,您可以执行从逐行扫描帧到RGB的转换,如教程中所示。