gpt4 book ai didi

c++ - av_seek_frame 仅每 12 帧搜索一次

转载 作者:行者123 更新时间:2023-12-04 23:18:58 26 4
gpt4 key购买 nike

我在我的图形应用程序中使用 ffmpeg 视频播放器。
现在我需要实现正确的方法来启动具有特定帧的视频(不仅是第一帧)。我找到了很好的例子here起初认为,它非常适合我:

    bool seek(uint64_t frame)
{
int64_t timeBase = (static_cast<int64_t>(_pContext->time_base.num) * AV_TIME_BASE)
/ static_cast<int64_t>(_pContext->time_base.den);
auto seekTarget = static_cast<int64_t>(frame) * timeBase;

if( av_seek_frame(_pFile, -1, seekTarget, AVSEEK_FLAG_ANY) < 0)
return false;

avcodec_flush_buffers( _pContext );
return true;
}
但是,最近我注意到它只搜索每 12 帧:
seek(10); //gives 0 frame
seek(12); //gives 12 frame
seek(20); //gives 12 frame
seek(80); //gives 72 frame
我想我计算 timeBase不正确,但实际上我找不到如何以正确方式进行操作的信息。有很多代码示例,但我已经尝试了很多,但它根本不起作用。甚至奇怪的是,我发现了太多不同的方法来计算同一个变量。
附言如果有人向我解释 timeBase 值的含义,或者分享好的解释,那就太好了。

最佳答案

您需要寻找前一个关键帧并解码,直到获得所需的帧。您无法搜索任何帧,因为解码器无法正确解码请求的帧。
你可以找到详细的讨论和代码here

关于c++ - av_seek_frame 仅每 12 帧搜索一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70892584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com