av_seek_frame只会根据时间戳记关键帧。由于它寻求关键帧,因此您可能无法获得所需的内容。因此,建议先找到最接近的关键帧,然后逐帧读取,直到达到所需的帧。
但是,如果要处理固定的FPS值,则可以轻松地将时间戳映射到帧索引。
AVStream.time_base如果已指定流,在搜索之前,您需要将时间转换为单位。阅读
av_seek_framein的ffmpeg文档
avformat.h。
例如,如果要寻找
1.23剪辑的秒数:
double m_out_start_time = 1.23; int flgs = AVSEEK_FLAG_ANY; int seek_ts = (m_out_start_time*(m_in_vid_strm->time_base.den))/(m_in_vid_strm->time_base.num); if(av_seek_frame(m_informat, m_in_vid_strm_idx,seek_ts, flgs) < 0) { PRINT_MSG("Failed to seek Video ") }


