При выполнении этой простой команды преобразования: ffmpeg -i fileA.flac fileB.mp3 mp3 смещается примерно на 5 мс.

Этого не происходит, если я пытаюсь преобразовать в Vorbis/Ogg (т.е. ffmpeg -i fileA.flac fileC.ogg)

Снимок Audacity:

Снимок Audacity, показывающий смещение

Есть идеи, почему это происходит и как я могу это исправить?

1 ответ1

3

Это связано с тем, как работает кодирование MP3 (или собственно кодирование и декодирование). Смотрите технический FAQ:

Почему декодированный MP3 длиннее оригинального файла .wav?

Потому что LAME (и все другие кодировщики на основе MDCT) добавляют заполнение в начало и конец каждой песни. LAME встраивает количество отступов во вспомогательные данные первого кадра файла MP3. (Тег LAME INFO).

Продолжение:

Все протестированные мной декодеры вводят задержку в 528 сэмплов. То есть после декодирования mp3-файла на выходе будет 528 сэмплов нулей, добавленных вперед. Это связано с тем, что стандартные процедуры MDCT/filterbank, используемые ISO, имеют задержку выборки 528. Можно было бы написать подпрограмму MDCT/filterbank с задержкой 0 отсчетов (см. Описание подпрограммы Takehiro MDCT/filterbank, используемой в кодировке LAME ниже), но я не знаю, кто это сделал. Кроме того, из-за перекрывающейся природы кадров MDCT, первая половина первой гранулы (1 гранула = 576 выборок) не имеет предыдущего кадра для перекрытия, что приводит к ослаблению первых N выборок.

Это становится более техническим, если вы читаете дальше, но это должно резюмировать проблему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .