All, I'm sure this has been asked many times before, but nonetheless i couldn't find an answer to my problem.
In my app I have a need to calculate the PTS corresponding to the frame closest to a particular time. For example, I might need to grab the frame from a video that equates to 52.731 seconds into the stream. I thought I had this working (I'd previously built against an svn from about march 2009), but another part of my app have me cause to update to the latest SVN and this seems to have changed things. Basically, I need to understand how the time_base in the stream and the codec context can be used, along with the stream start_time, to calculate pts. Previously, my logic was roughly like this:- Firstly, my MPEG2 source video (which is a nominal 25fps) has a time_base in codec context of 1/50, but has ticks_per_frame of 2. My logic up to now has been to combine these two into a single rational:- AVRational frame_rate = m_pVideoCodecContext->time_base; frame_rate.num *= m_pVideoCodecContext->ticks_per_frame; then i can use that frame_rate to calculate the frame number:- float frameTime = 52.731; int64_t frame = (int64_t)((frameTime * 1000) * frame_rate.den / (1000 * frame_rate.num)); then, combining frame_rate and the stram time_base to get the pts:- int64_t pts = m_pVideoStream->start_time + (frame * ((frame_rate.num * m_pVideoStream->time_base.den) / (frame_rate.den * m_pVideoStream->time_base.num))); As I said, this previously working fine (at least with all the videos I tried it with (various MPEG2 and h264 MP4). However, since I updated to newer ffmpeg something has changed and the logic no longer works. My MP4 file under the new version of ffmpeg comes out as having a codec context timebase of 1001/50000 and ticks per frame of 2. The stream time_base is 1/3000. Following through the math, the results I get don't correspond to actual pts that are in the stream. I can see in the debugger that the PTS for this video increments in steps of 1200, whereas before it incremented in steps of 1. I'm definitely missing a link somewhere. Somehow I need to know what the increment is in PTS between frames, which for this MP4 seems to be 1200. There must be some other AVRational value which relates the PTS time_base with the increment. What is that rational? Thanks in advance for any guidance Jon _______________________________________________ libav-user mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/libav-user
