Opened 7 years ago
Closed 4 years ago
#3576 closed defect (fixed)
decoding MP3 (LAME) results in wrong length
| Reported by: | tobwen | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | avformat |
| Version: | git-master | Keywords: | mp3 |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | yes | |
| Analyzed by developer: | no |
Description
What I was trying to accomplish
I was trying to transcode from MP3 to 44.1 kHz, 16-bit stereo WAV file. Since it uses libmp3lame, the output should be equal to the CLI version.
The problem I encountered
The output is too long by 1263 samples.
I've used LAME v3.99.5 aka v3.99r (same es libmp3lame) to transcode a testfile with 441000 samples (10 seconds) to MP3 using this command line:
lame test_tobwen.wav -V 2 test_tobwen.mp3
When decoding it with the same lame version, it's exactly 441000 samples long.
lame --decode test_tobwen.mp3 output_lame.wav
LAME recognizes its own tag and skils encoder+decoder delay (1105 samples) and padding-decoder delay (263) samples.
You can read more about this here: http://mp3decoders.mp3-tech.org/decoders_lame.html
excact command line I was using
ffmpeg -i test_tobwen.mp3 -acodec pcm_s16le output_ffmpeg.wav
full, uncut console output
ffmpeg -v 9 -loglevel 99 -i test_tobwen.mp3 -acodec pcm_s16le output_ffmpeg.wav
ffmpeg version N-62569-gf57ac37 Copyright (c) 2000-2014 the FFmpeg developers
built on Apr 19 2014 22:03:22 with gcc 4.8.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-decklink --enable-zlib
libavutil 52. 77.100 / 52. 77.100
libavcodec 55. 58.105 / 55. 58.105
libavformat 55. 37.101 / 55. 37.101
libavdevice 55. 13.100 / 55. 13.100
libavfilter 4. 4.100 / 4. 4.100
libswscale 2. 6.100 / 2. 6.100
libswresample 0. 18.100 / 0. 18.100
libpostproc 52. 3.100 / 52. 3.100
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set logging level) with argument '9'.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument '99'.
Reading option '-i' ... matched as input file with argument 'test_tobwen.mp3'.
Reading option '-acodec' ... matched as option 'acodec' (force audio codec ('copy' to copy stream)) with argument 'pcm_s16le'.
Reading option 'output_ffmpeg.wav' ... matched as output file.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument 9.
Successfully parsed a group of options.
Parsing a group of options: input file test_tobwen.mp3.
Successfully parsed a group of options.
Opening an input file: test_tobwen.mp3.
[mp3 @ 04395000] Format mp3 probed with size=2048 and score=51
[mp3 @ 04395000] pad 576 792
[mp3 @ 04395000] Before avformat_find_stream_info() pos: 417 bytes read:65664 seeks:2
[mp3 @ 04395000] demuxer injecting skip 1105
[mp3 @ 04395820] skip 1105 samples due to side data
[mp3 @ 04395820] skip 1105/1152 samples
[mp3 @ 04395000] max_analyze_duration 5000000 reached at 5015510 microseconds
[mp3 @ 04395000] After avformat_find_stream_info() pos: 57761 bytes read:98432 seeks:2 frames:194
Input #0, mp3, from 'test_tobwen.mp3':
Duration: 00:00:10.03, start: 0.025057, bitrate: 104 kb/s
Stream #0:0, 194, 1/14112000: Audio: mp3, 44100 Hz, stereo, s16p, 104 kb/s
Metadata:
encoder : LAME3.99r
Successfully opened the file.
Parsing a group of options: output file output_ffmpeg.wav.
Applying option acodec (force audio codec ('copy' to copy stream)) with argument pcm_s16le.
Successfully parsed a group of options.
Opening an output file: output_ffmpeg.wav.
Successfully opened the file.
detected 4 logical cores
[graph 0 input from stream 0:0 @ 029dd2c0] Setting 'time_base' to value '1/44100'
[graph 0 input from stream 0:0 @ 029dd2c0] Setting 'sample_rate' to value '44100'
[graph 0 input from stream 0:0 @ 029dd2c0] Setting 'sample_fmt' to value 's16p'
[graph 0 input from stream 0:0 @ 029dd2c0] Setting 'channel_layout' to value '0x3'
[graph 0 input from stream 0:0 @ 029dd2c0] tb:1/44100 samplefmt:s16p samplerate:44100 chlayout:0x3
[audio format for output stream 0:0 @ 029d7920] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:0 @ 029d7920] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_anull_0' and the filter 'audio format for output stream 0:0'
[AVFilterGraph @ 043bd100] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 029d7f00] ch:2 chl:stereo fmt:s16p r:44100Hz -> ch:2 chl:stereo fmt:s16 r:44100Hz
Output #0, wav, to 'output_ffmpeg.wav':
Metadata:
ISFT : Lavf55.37.101
Stream #0:0, 0, 1/44100: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Metadata:
encoder : LAME3.99r
Stream mapping:
Stream #0:0 -> #0:0 (mp3 -> pcm_s16le)
Press [q] to stop, [?] for help
[mp3 @ 04395820] skip 1105 samples due to side data
[mp3 @ 04395820] skip 1105/1152 samples
[output stream 0:0 @ 029d78a0] EOF on sink link output stream 0:0:default.
No more output streams to write to, finishing.
size= 1724kB time=00:00:10.00 bitrate=1411.3kbits/s
video:0kB audio:1724kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.004532%
Input file #0 (test_tobwen.mp3):
Input stream #0:0 (audio): 384 packets read (130730 bytes); 384 frames decoded (441263 samples);
Total: 384 packets (130730 bytes) demuxed
Output file #0 (output_ffmpeg.wav):
Output stream #0:0 (audio): 384 frames encoded (441263 samples); 384 packets muxed (1765052 bytes);
Total: 384 packets (1765052 bytes) muxed
384 frames successfully decoded, 0 decoding errors
[AVIOContext @ 043c4a60] Statistics: 4 seeks, 387 writeouts
[AVIOContext @ 043949e0] Statistics: 164020 bytes read, 2 seeks
Files attached to this ticket
I've uploaded test_tobwen.wav and test_tobwen.mp3 to the FTP.
Attachments (1)
Change History (7)
Changed 7 years ago by tobwen
comment:1 Changed 7 years ago by tobwen
comment:2 follow-up: ↓ 3 Changed 7 years ago by cehoyos
- Component changed from ffmpeg to undetermined
- Keywords mp3 added; MP3 LAME audio delay padding removed
Do you believe this is a regression?
comment:3 in reply to: ↑ 2 Changed 7 years ago by tobwen
Replying to cehoyos:
Do you believe this is a regression?
I have tested versions 0.8, 1.0.1, 1.2, 2.0.2, 2.1, 2.1.3 and this does not seem to be a regression.
Remark: v0.8 didn't remove delays at all, v1.0.1 is missing some data.
comment:4 Changed 7 years ago by cehoyos
- Priority changed from important to normal
comment:5 Changed 7 years ago by cehoyos
- Reproduced by developer set
- Status changed from new to open
comment:6 Changed 4 years ago by cehoyos
- Component changed from undetermined to avformat
- Resolution set to fixed
- Status changed from open to closed
Fixed by wm4 in d87fe2687fdc5b1cb9aaec957afadb56d207618f



Narf, I'm too dumb to calculate. The file is 263 samples too long, that's the exact length of the padding-decoder delay. I think, you missed to strip this?