Звук, перекодированный с помощью libavformat/libavfilter, прерывается

Я пытаюсь перекодировать файл mp4 в стандартный формат. Видео выглядит нормально, но звук прерывистый (и не синхронизирован с видео).

Мой тестовый входной файл имеет следующие свойства:

Stream #0:1(eng), 0, 1/48000: Audio: aac (mp4a / 0x6134706D), 48000 Hz, 2 channels, 129 kb/s (default)

и я вывожу в:

Stream #0:1, 0, 1/44100: Audio: aac (libfaac) (Main), 44100 Hz, stereo, s16, 128 kb/s

Когда я строю график аудиофильтра, я получаю следующий вывод отладки:

[in @ 0x103954380] Setting 'time_base' to value '1/48000'
[in @ 0x103954380] Setting 'sample_rate' to value '48000'
[in @ 0x103954380] Setting 'sample_fmt' to value 'fltp'
[in @ 0x103954380] Setting 'channel_layout' to value '0x3'
[in @ 0x103954380] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:0x3
[format @ 0x10390b3e0] Setting 'sample_fmts' to value 's16'
[format @ 0x10390b3e0] Setting 'sample_rates' to value '44100'
[format @ 0x10390b3e0] Setting 'channel_layouts' to value '0x3'
[format @ 0x10390b3e0] auto-inserting filter 'auto-inserted resampler 0' between the filter 'in' and the filter 'format'
[AVFilterGraph @ 0x101f21b80] query_formats: 3 queried, 3 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x103952bc0] ch:2 chl:stereo fmt:fltp r:48000Hz -> ch:2 chl:stereo fmt:s16 r:44100Hz

Это выглядит правильно для меня, но я получаю много следующих сообщений при обработке файла...

[libfaac @ 0x102063a00] Trying to remove 80 more samples than there are in the queue

... и звук прерывается. Также я вижу, что формат образца такой же, как и исходный файл (из ffprobe):

Stream #0:1(und): Audio: aac (Main) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)

то есть он не выполнил преобразование из AV_SAMPLE_FMT_FLT в AV_SAMPLE_FMT_S16.

Мне интересно, является ли битрейт причиной проблемы, но я не вижу никакого способа преобразовать входной битрейт в выходной битрейт. Есть предположения?


person JohnnyD    schedule 25.01.2016    source источник