2013/5/15 iwastemoretimethanu <[email protected]>: > * Changing pts values before the encode, after the encode, using the > native av_rescale_q() function to try and automatically set the pts > value. > o I have done quite a bit of research on this and it seems to be > the consensus that pts is supposed to be set before the frame is > encoded into the packet, and I have a formula that should work > for both the audio and video pts: > + frame_count * (1000/STREAM_FRAME_RATE) * 90 > + ^ frame scale ^ getting ms > ^ pts is apparently supposed to be time * 90 > * Reducing the frames per second to a safe value (well-below the > potential of the system) > * Switching between the av_interleaved_write_frame() and the manual > av_write_frame()
I've used another pts assignment formula in transcoding apps. For audio, you should set pts of uncompressed-yet AVFrame with raw samples to _offset from stream beginning, in samples_. It means if you have audio @ 48000 Hz, the raw audio timestamps should be stamped in units of 1/48000 of second. Then you put this AVFrame into encoder and get AVPacket. I don't remember to what AVPacket.dts, .pts is set to after this, you should check. Either libavcodec rescales timestamp to timebase of media file (i.e. 1/1000 for FLV, 1/90000 for MPEG TS), or you have to do it by yourself. That's all. -- Andrey Utkin _______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
