【问题标题】:FFmpeg extracting current frame time stampFFmpeg提取当前帧时间戳
【发布时间】:2011-07-11 22:22:01
【问题描述】:

我需要在视频的特定间隔内提取帧(例如从 40 秒到 50 秒)。 在 c++ 中工作。 首先,我得到了我需要开始阅读的位置

static double t = 10 ;//time in seconds
int64_t timestamp = t * AV_TIME_BASE; //destination time
av_seek_frame( pFormatContext , -1 ,  timestamp + pFormatContext->start_time ,AVSEEK_FLAG_BACKWARD );

然后我使用 av_read_frame 来获取所有连续帧。 我的问题是我不知道什么时候停止。如何检查我是否达到了结束时间间隔(例如 50 秒)?

谢谢。

【问题讨论】:

    标签: c++ ffmpeg timestamp


    【解决方案1】:

    av_read_frame() 会给你一个 PTS(Presentation Time Stamp)。它是 AVPacket 的成员pts。也许该值可以帮助您决定何时停止阅读。

    【讨论】:

      【解决方案2】:

      尝试查找每秒帧数,然后使用该数字计算每帧的确切时间

      frame_absolute_time = frame_number / FPS
      

      【讨论】:

      • 嗨丹尼尔,一般来说这种方法是有效的。但是有一个问题,av_seek_frame,返回时间戳之前的最后一个关键帧。因此,我开始提前计算我的 10 秒,结果我可能会在间隔的末尾(大约 49 ......)错过一些帧。有什么办法可以解决这个问题?谢谢
      • 不确定,除非有 API 调用来获取实际寻求的帧的帧索引...
      猜你喜欢
      • 2020-05-08
      • 2021-12-04
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 2012-03-04
      • 2011-04-18
      • 2022-06-12
      • 2011-02-16
      相关资源
      最近更新 更多