Я пытаюсь перекодировать файл 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.
Мне интересно, является ли битрейт причиной проблемы, но я не вижу никакого способа преобразовать входной битрейт в выходной битрейт. Есть предположения?