【问题标题】:How to rotate AVFrame?如何旋转 AVFrame?
【发布时间】:2021-02-04 08:43:32
【问题描述】:

我正在编写一个使用 FFMPEG 的应用程序,并且我需要一种将 AVFrames 旋转 90、180 和 270 度的方法,因为相机的位置可能不同。我听说有过滤器可以做类似的事情。我在示例目录中阅读了filtering_video.c 文件,但很难理解该示例中发生了什么。我看到了"transpose=cclock" 部分代码,我的意思是这就是我需要的,但是关于它是如何工作的真的没有太多解释。

const AVFilter *buffersrc = avfilter_get_by_name("buffer");const AVFilter *buffersink = avfilter_get_by_name("buffersink"); 是什么,如果我只是想进行轮换,为什么还需要它们?当我不想更改像素格式时,为什么需要enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE };

谁能解释我如何让FFMPEG旋转解码AVFrame

【问题讨论】:

    标签: c++ qt ffmpeg libav


    【解决方案1】:

    |什么是 const AVFilter *buffersrc = avfilter_get_by_name("buffer");

    Ffmpeg 过滤器 API 专为更复杂的用途而设计。过滤器可以链接在一起形成一个“图形”,一些过滤器有多个输入,一些过滤器有多个输出。创建一个可以支持任何过滤器类型的 API 并在图表中创建到任何其他可能的过滤器的链接意味着 API 需要很复杂。

    “缓冲区”是一种进入图表的方式,用户可以将外部数据(帧)输入图表

    和 const AVFilter *buffersink = avfilter_get_by_name("buffersink"); 为什么我什至需要那些

    “buffersink”是一种从图表中读取帧的方法。没有这些,就无法使用过滤器图。

    为什么我需要枚举 AVPixelFormat pix_fmts[] = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE};

    有些过滤器只能对特定的像素格式进行操作,有些过滤器可以改变像素格式。所以格式输入可能不等于格式输出。设置像素格式可以在必要时提示图形转换格式。

    【讨论】:

    • 那么为什么会有两种像素格式呢?每个过滤器的格式是否以尊重的顺序排列?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2013-02-21
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多