Um fluxo de MP3 contém informações para gerar um conjunto de amostras em que cada amostra corresponde a uma amostra nos dados LPCM originais (como no arquivo WAV), mas um efeito colateral da codificação é que existe algum "lixo" extra adicionado a cada extremidade, e um efeito colateral da decodificação é que há ainda mais lixo adicionado ao começo. O decodificador saberá o quanto ele adiciona e irá ignorar essas amostras, mas o lixo adicionado ao codificador não é totalmente previsível (codificadores diferentes adicionam quantidades diferentes), então o decodificador não pode ignorar essas amostras, a menos que seja de alguma forma informado sobre o que pular. Alguns codificadores, como o LAME, adicionarão as informações de "reprodução sem intervalos" ou "atraso e preenchimento" (em um formato específico do codificador, porque não há padrão para isso) no VBR Info (VBRI) ou no cabeçalho Xing, que é -de padrão, mesmo em arquivos CBR, e que contém outras informações que às vezes é útil para o jogador. Este cabeçalho é na verdade um quadro de silêncio (geralmente 1152 amostras) com algumas informações especialmente formatadas embutidas entre o cabeçalho do quadro e o início de seus dados nulos de áudio. A maioria dos decodificadores / jogadores reconhece o quadro como especial e pula essas amostras, mas outras não, então há outro potencial ponto de falha. então eu procuraria ter certeza de usar uma combinação de codificador / decodificador compatível para obter arquivos de comprimento correto e com aparas indesejadas como saída.
Sua segunda pergunta ... você notou a opção "--decode" do aplicativo da linha de comando LAME? :) Isso deve resolver seu problema se você estiver usando o LAME como codificador. O comprimento de saída deve corresponder à entrada.