Given VBR MP3s made with LAME as follows:
flac -d -c silence-44-s.flac | lame --resample 24 -V9 --vbr-old - silence-44-s-mpeg2.mp3
flac -d -c silence-44-s.flac | lame --resample 12 -V9 --vbr-old - silence-44-s-mpeg25.mp3
Mutagen fails to extract correct header information from the resulting MP3:
>>> import mutagen, os
>>> a1 = mutagen.File(os.path.join('tests', 'data', 'silence-44-s-mpeg2.mp3'))
>>> a2 = mutagen.File(os.path.join('tests', 'data', 'silence-44-s-mpeg25.mp3'))
>>> vars(a1.info)
{'bitrate': 288000, 'layer': 1, 'length': 0.23799999999999999, 'mode': 1, 'padding': False, 'protected': True,
'sample_rate': 48000, 'version': 1}
>>> vars(a2.info)
{'bitrate': 5101, 'layer': 3, 'length': 7, 'mode': 1, 'padding': False, 'protected': False, 'sample_rate': 12000, 'sketchy':
False, 'version': 2.5}
Because it calculates the frame lengths incorrectly, it's essentially pulling out random header-like data when it can't
find a second frame.
Going on the documentation about frame length calculation here[1], I'm able to get the headers correctly:
>>> import mutagen, os
>>> a1 = mutagen.File(os.path.join('tests', 'data', 'silence-44-s-mpeg2.mp3'))
>>> a2 = mutagen.File(os.path.join('tests', 'data', 'silence-44-s-mpeg25.mp3'))
>>> vars(a1.info)
{'bitrate': 18191, 'layer': 3, 'length': 3.7679999999999998, 'mode': 1, 'padding': False, 'protected': False,
'sample_rate': 24000, 'sketchy': False, 'version': 2}
>>> vars(a2.info)
{'bitrate': 9300, 'layer': 3, 'length': 3.8399999999999999, 'mode': 1, 'padding': False, 'protected': False,
'sample_rate': 12000, 'sketchy': False, 'version': 2.5}
I'm also including a prerequisite patch that fixes integer division being used to calculate MP3 lengths for VBR files.
[1] http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx