[Libav-user] Resampling issue
Andrew Sherepenko
andrew.sherepenko at gmail.com
Fri Nov 22 10:21:05 CET 2013
Hello libav users!
I try to remuxing MPEG-TS to MP4 container.
MPEG-TS stores H.264 video and AC3 audio. I copy video context to the
new container,
but I have to transcode audio to MP3.
What I do:
1. Read packet from input context;
2. Decode packet to the frame;
3. Resample audio (use swr_conwert() API method);
4. Encode frame into packet;
5. Write packet into output context.
AC3 frame stores 1536 samples, and MP3 - only 1152.
In this case we have downsampling. I've found that swr_convert()
buffered unprocessed samples (1536 - 1152 = 384 samples per frame).
If I don't read buffered samples I don't have an audio in the and of the
movie. So I try to flush data from the swr buffer and encode it too.
I flush after every third input frame (384 * 3 = 1152 - we have one full
output extra frame).
In such scenario I have complete audio stream but it has a lot of
strange artifacts.
I've tried change PTS/DTS, rescale, etc., but it doesn't help (Or i have
audio that plays faster without artifacts , or normal audio speed with
artifacts).
Also may be somebody knows can I use av_samples copy() without
swr_convert() in this case.
I will be glad to any advice.
Thank you.
WBR,
Andrew Sherepenko
More information about the Libav-user
mailing list