[Ffmpeg-devel] av_seek_frame() units

Steve Willis ffmpeg
Wed Jul 6 15:27:42 CEST 2005

Just so everyone is on the same page, would someone please post some 
sample code for a concrete example? Like Ian, I'm not really clear on 
how the AVStream.time_base units work...are some streams based on 
seconds, and others based on ms?

Let's say I want to seek to a frame that is 14.25 seconds into a stream. 
Would someone please post actual code showing (1) how to calculate the 
value for 14.25 seconds to pass to av_seek_frame to seek to the nearest 
key frame (Ian's question), and (2) a recommended way to actually seek 
to the precise frame for 14.25 seconds, regardless of whether it is a 
keyframe (my question).

Ian and I both need help understanding how to convert a real time value 
(in seconds, ms, whatever) into AVStream.time_base units. I need some 
extra help on refining the call to av_seek_frame to produce the exact 
frame for a time, because my program is for scientific video analysis, 
and I need a way to let users step forward and backward through frames, 
as well as seek to exact time values to match data (the nearest key 
frame might not show the correct sample point.) The suggestions to 
enable hurry_up mode have not been ignored...I'm just struggling to 
understand and implement them being new to the library and the language 
(I'm binding this to a larger Java application.) I've got the rest of 
the more routine video player stuff working and am just trying to work 
past this last sticking point.

Thank you for all your help!


Andy Parkins wrote:
> On Wednesday 2005 July 06 07:10, Ian Gowen wrote:
>>Thus, time = frame_number / frame_rate. However, what I don't understand is
>>how to put that into AVStream.time_base units, as the docs say to do. Do I
>>multiply it by
>>the time_base? Divide? I don't get it, and I'm pretty sure this is
>>where I'm screwing
> I'm not sure why you would need to do this.  What source for frame_number are 
> you using - it's not in any of the AV structures.  If you want the time 
> simply read Packet.pts; why calculate it when it's already there?
> If you are trying to seek, you would want to seek a time anyway.  Maybe a 
> percentage through the file?  ffplay does this like this:
> seekPoint = (int64_t)(formatContext->start_time+frac*formatContext->duration);
> Andy
> ------------------------------------------------------------------------
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at mplayerhq.hu
> http://mplayerhq.hu/mailman/listinfo/ffmpeg-devel

More information about the ffmpeg-devel mailing list