Opened 20 months ago
Closed 20 months ago
#11364 closed defect (invalid)
µ-law: pcm_mulaw files incorrectly shown as "s16", actually 8 bit per sample
| Reported by: | Marcus Müller | Owned by: | |
|---|---|---|---|
| Priority: | minor | Component: | ffprobe |
| Version: | 6.1.1 | Keywords: | |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
Summary of the bug: ffprobe (6.1.2)/ffplay/ffmpeg incorrectly show
Stream #0:0: Audio: pcm_mulaw ([7][0][0][0] / 0x0007), 48000 Hz, 1 channels, s16, 384 kb/s
when inspecting a µ-law PCM file.
If you divide 384 kb/s / (48000 Hz), you get the actual (and correct for G.711 µ-law) 8 b per sample.
How to reproduce:
# get some example linear pcm curl https://opus-codec.org/static/examples/samples/speech_orig.wav > orig.wav ffmpeg -i orig.wav -c:a pcm_mulaw mulaw.wav ffprobe -show_entries stream=sample_fmt -hide_banner mulaw.wav # gives: # Input #0, wav, from 'mulaw.wav': # Metadata: # encoder : Lavf60.16.100 # Duration: 00:00:10.80, bitrate: 384 kb/s # Stream #0:0: Audio: pcm_mulaw ([7][0][0][0] / 0x0007), 48000 Hz, 1 channels, s16, 384 kb/s ###### PROBLEM HERE: ######-----------------------------------------------------^^^ # [STREAM] # sample_fmt=s16 # [/STREAM]
The sample_fmt should be s8, not s16.
Change History (5)
comment:2 by , 20 months ago
| Priority: | normal → minor |
|---|---|
| Version: | unspecified → 6.1.1 |
ah, I see, that kind of makes sense. Otherwise, that field is meaningless for anything actually compressed (and not just companded/quantized).
Hm, however, is it then correct to organize it as property of {{stream}}? It seems to be a property of the decoder.
comment:3 by , 20 months ago
(oh by the way, if you don't think this constitutes a defect, please close. I wasn't sure I should close it myself since your comment started with "Maybe")
comment:4 by , 20 months ago
Are you Marcus from Gnuradio project, lol
Anyway, I was wrong https://imgur.com/a/jo9NzKh mediainfo actually shows it as 8 bit in metadata.
s16 does not mean it is 16 bit. It just means it will be decoded as s16.
comment:5 by , 20 months ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
You can see that -show_entries stream=bits_per_sample reports 8, which is what's coded in the WAV header.
As Baling said, the sample format is what the decoder exports.



Maybe
The μ-law and A-law algorithms encode 14-bit and 13-bit signed linear PCM samples (respectively) to logarithmic 8-bit samples. Thus, the G.711 encoder will create a 64 kbit/s bitstream for a signal sampled at 8 kHz
So when decoded it must be decoded to 14 bit or since it is not supported (we do not even support standard 20 bit in HDMI spec, only 16 bit and 24, LOL!!).
Also mediainfo sees it as 16 bit, metadata.