ffmpeg 中的去隔行
我已按照此处的教程将视频文件加载到 C 程序中。但帧不是去隔行的。
据我所知,ffmpeg 可执行文件支持 -deinterlace 开关。我如何在代码中执行此操作?我应该阅读哪些库/函数?
I've followed the tutorial here to load video files into a C program. But the frames aren't deinterlaced.
From what I've seen, the ffmpeg executable supports a -deinterlace switch. How to I do this in code? What library/functions should I read about?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您必须手动调用
avpicture_deinterlace
来对每个解码帧进行去隔行处理。函数定义可以在此处找到。它基本上看起来像这样(使用教程第一页中的变量):请记住,您必须初始化
pDiFrame
,类似于它们在通过创建自己的缓冲区并调用avcodec_alloc_frame
和avpicture_fill
的教程,只有这次像素格式将是解码帧的格式(pCodecCtx->pix_fmt
pCodecCtx->pix_fmt代码>),不是 24 位 RGB。去隔行后,您可以执行从去隔行帧到 RGB 的转换,如教程中所示。
You have to manually call
avpicture_deinterlace
to deinterlace each decoded frame. The function definition can be found here. It will basically look like this (using the variables from the first page of the tutorial):Keep in mind that you have to initialize
pDiFrame
similarly to how they initializepFrameRGB
in the tutorial by creating your own buffer and callingavcodec_alloc_frame
andavpicture_fill
, only this time the pixel format will be that of the decoded frame(pCodecCtx->pix_fmt
), not 24-bit RGB.After deinterlacing, you can then perform the conversion from the deinterlaced frame to RGB as it shows in the tutorial.