首页 > 解决方案 > 在 C++ 中使用 FFmpeg 覆盖视频帧

问题描述

我正在尝试在 C++ 中使用 FFmpeg 覆盖两个视频。所以我关注了 FFmpeg 页面并在终端中遵循了这个命令。

$ ffmpeg -i Right.mov -i Left.mov -filter_complex "[0:v][1:v] overlay=0:0"  -c:a copy output.mov

我可以通过终端实现这个功能,但我试图通过编码来实现这个功能。

typedef struct {
    AVFormatContext *fmt_ctx;
    int stream_idx;
    AVRational time_base;
    AVStream *video_stream;
    AVCodecContext *codec_ctx;
    AVCodecContext *pCodecCtxOrig;
    AVCodec *decoder;
    AVPacket *packet;
    AVFrame *av_frame;
    AVFrame *gl_frame;
    AVFrame *out_frame;
    AVStream *pStream;
    struct SwsContext *conv_ctx;

另外,我展示了一些示例代码,但我不确定

https://ffmpeg.org/doxygen/2.1/doc_2examples_2filtering_video_8c-example.html

https://code5.cn/so/c%2B%2B/2601062

AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;

如何在我的代码中实现此功能?

标签: c++openglffmpegvideo-processing

解决方案


很久以前,我写了一个程序,使用 ffmpeg 来解码视频并将它们显示为 OpenGL 纹理。您可以从 我的主页下载代码 请注意,此代码已有十多年的历史且尚未维护,因此我不能说它仍然有效。但是似乎没有人为您提供更好的答案,所以我希望这至少可以帮助您入门。


推荐阅读