首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在libavformat中设置"re“标志

在libavformat中设置"re“标志
EN

Stack Overflow用户
提问于 2015-01-14 11:43:45
回答 1查看 1.1K关注 0票数 1

如何在使用libavformat和libavcodec库的代码中设置标志。我需要在我的c++应用程序中实现如下命令

代码语言:javascript
复制
ffmpeg -re -f m4v -i video.264 -vcodec copy out.mp4

我已经实现并测试了上面的命令,但是没有re标志。我需要我的应用程序在编码时以相同的速率读取帧。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-08 10:14:56

"re“标志设置InputFile->rate_emu标志。它的发生可在ffmpeg_opt.c中看到。

InputFile是ffmpeg.h的本地结构,它表示"re“标志在libavcodec或libavformat中都没有用处。

根据如何使用该功能,如果您查看ffmpeg_opt.c

代码语言:javascript
复制
 { "re",             OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
                    OPT_INPUT,                                   { .off = OFFSET(rate_emu) },
    "read input at native frame rate", "" },

然后再调查

ffmpeg.c

代码语言:javascript
复制
static int get_input_packet(InputFile *f, AVPacket *pkt)
{
    if (f->rate_emu) {
        int i;
        for (i = 0; i < f->nb_streams; i++) {
            InputStream *ist = input_streams[f->ist_index + i];
            int64_t pts = av_rescale(ist->dts, 1000000, AV_TIME_BASE);
            int64_t now = av_gettime_relative() - ist->start;
            if (pts > now)
                return AVERROR(EAGAIN);
        }
    }

#if HAVE_PTHREADS
    if (nb_input_files > 1)
        return get_input_packet_mt(f, pkt);
#endif
    return av_read_frame(f->ctx, pkt);
}

如果设置了"rate_emu“标志,则get_input_packet将重新标号,并检查其读取帧的时间。如果时机合适,它会读取其他帧,它会空着手返回。所以这感觉就像我们是在本地的框架中得到的。如果没有设置rate_emu,则代码直接跳转到"av_read_frame“

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27942168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档