Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“设置”;关于;libav格式的标志 如何在C++代码中使用强>标志。 我需要在C++应用程序中实现如下命令 ffmpeg -re -f m4v -i video.264 -vcodec copy out.mp4_C++_Ffmpeg_Libavcodec_Libavformat - Fatal编程技术网

“设置”;关于;libav格式的标志 如何在C++代码中使用强>标志。 我需要在C++应用程序中实现如下命令 ffmpeg -re -f m4v -i video.264 -vcodec copy out.mp4

“设置”;关于;libav格式的标志 如何在C++代码中使用强>标志。 我需要在C++应用程序中实现如下命令 ffmpeg -re -f m4v -i video.264 -vcodec copy out.mp4,c++,ffmpeg,libavcodec,libavformat,C++,Ffmpeg,Libavcodec,Libavformat,我已经实现并测试了上述命令,但没有re标志。我需要我的应用程序以编码帧时的相同速率读取帧。“re”标志设置InputFile->rate\u emu标志。它的出现可以在ffmpeg_opt.c中看到 InputFile是ffmpeg.h的本地结构,表示“re”标志在libavcodec或libavformat中都没有用处 根据如何使用该功能,如果您查看ffmpeg_opt.c { "re", OPT_BOOL | OPT_EXPERT | OPT_OFFSET |

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

“re”标志设置InputFile->rate\u emu标志。它的出现可以在ffmpeg_opt.c中看到

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

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

 { "re",             OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
                    OPT_INPUT,                                   { .off = OFFSET(rate_emu) },
    "read input at native frame rate", "" },
然后调查

ffmpeg.c

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);
}
static int get\u input\u数据包(InputFile*f,AVPacket*pkt)
{
如果(f->rate\u emu){
int i;
对于(i=0;inb_流;i++){
InputStream*ist=输入_流[f->ist_索引+i];
int64_t pts=av_重新缩放(ist->dts,1000000,av_时间基数);
int64\u t now=av\u gettime\u relative()-ist->start;
如果(临时技术秘书处>现在)
返回平均值(EAGAIN);
}
}
#如果有线程
如果(nb_输入文件>1)
返回get_input_packet_mt(f,pkt);
#恩迪夫
返回AVU读取帧(f->ctx,pkt);
}
如果设置了“rate_emu”标志,则get_input_数据包将重新缩放pts并检查读取帧的时间是否已到。如果时间正确,它将读取帧,否则将空手返回。所以感觉我们是以本机帧速率获得的。如果未设置rate_emu,代码将直接跳至“av_读取”帧