Opened 11 hours ago
Closed 5 hours 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 , 8 hours 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 , 8 hours 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 , 7 hours 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 , 5 hours 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.