Поток MP3 содержит информацию для генерации набора сэмплов, где каждый сэмпл соответствует сэмплу в исходных данных LPCM (например, из файла WAV), но побочным эффектом кодирования является то, что к каждому из них добавляется дополнительный "мусор". конец, и побочным эффектом декодирования является то, что к началу добавлено еще больше мусора. Декодер будет знать, сколько он добавляет, и пропустит эти выборки, но добавленная кодировщиком нежелательная память не является полностью предсказуемой (разные кодеры добавляют разные количества), поэтому декодер не может пропустить эти выборки, если он каким-то образом не информирован о том, что пропускать. Некоторые кодировщики, такие как LAME, добавляют такую информацию "Воспроизведение без пауз" или "Задержка и заполнение" (в формате, специфичном для кодера, потому что для него нет стандарта) в заголовок VBR Info (VBRI) файла или заголовок Xing, который является сортировкой - стандартно даже для файлов CBR и содержит другую информацию, которая иногда полезна для проигрывателя. Этот заголовок фактически является кадром молчания (обычно 1152 сэмпла) с некоторой специально отформатированной информацией, вставленной между заголовком кадра и началом его нулевых аудиоданных. Большинство декодеров / проигрывателей распознают кадр как особый и пропускают эти сэмплы, но некоторые этого не делают, поэтому существует еще одна потенциальная точка отказа. поэтому я хотел бы убедиться, что вы используете совместимый кодер / декодер, чтобы получить файлы правильной длины, срезанные ненужной информацией в качестве выходных данных.
Ваш второй вопрос ... Вы обратили внимание на параметр "--decode" приложения командной строки LAME? :) Это должно решить вашу проблему, если вы используете LAME в качестве кодера. Длина вывода должна соответствовать входу.