On 27/05/2011 15:05, Ronald S. Bultje wrote:
Hi Mark,
On Fri, May 27, 2011 at 9:56 AM, Mark Kenna
<[email protected]> wrote:
On 27/05/2011 14:51, Ronald S. Bultje wrote:
On Fri, May 27, 2011 at 9:49 AM, Mark Kenna
<[email protected]> wrote:
I'm having a hard time getting my head around encoding variable frame
rate
containers in LibAV. I have taken the 'output_example.c' program and
modified it to encode to FLV. What I would like to know is how I would
modify the 'output_example.c' program to write variable time stamp values
into the output file. For my project I will be taking a streaming input
source (which will not have time-stamp information) and will need to
create
my own timestamp values (I guess from the delta value between the last
received frame and the current frame?).
I have read that you need to set the time base value to:
c->time_base.num=1;
c->time_base.den=1000;
But I am not sure exactly what I should be setting the encoded packet's
PTS
values to?
This means "each pts value has a fractional unit of 1/1000th", or in
other words, millisecond precision. So if your timestamps are 10ms,
22ms, 38ms, then pts would be 10, 22 and 38.
Ronald
Wow! That was quick - thanks!
So after encoding the frame and calculating what the pts value should be
(based on the delay between the last frame and this one) I would do:
pkt.stream_index= st->index;
pkt.data= video_outbuf;
pkt.size= out_size;
pkt.pts= previousPacketPts + deltaDelay;
/* write the compressed frame in the media file */
ret = av_write_frame(oc,&pkt);
If that makes any sense?
That works, if you're not using B-frames.
If you're using B-frames, I'd suggest using
AVCodecContext->coded_frame->pts as a way to set/get the PTS of
encoded frames before/after encoding. ffmpeg.c uses this also.
Ronald
Hi Ronald
I have implemented millisecond precision and modified the
output_example.c to write 100 frames with a timestamp delta of 1000(ms).
This works quite well but there is always an approximate 6 second delay
at the end of the file where the video just stops and then skips to the
end. This happens regardless of the duration of the video.
Would you have any idea what could be causing such a problem? I could
provide code if needed.
Thanks,.
Mark.
_______________________________________________
libav-api mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-api