Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Wav audio file compression not working

Is it possible to compress a wav audio file without reducing the sampling rate?

I have an audio file with 256 bit rate and sampling rate - 8000Hz. I would just like to reduce the bit rate to 128/64 kbs

I tried converting to mp3 and back to wav, ffmpeg -i input.wav 1.mp3 ffmpeg -i "1.mp3" -acodec pcm_s16le -ar 4000 out.wav but this reduced sampling rate as well. ffmpeg -i "1.mp3" -acodec pcm_s16le -ab 128 out.wav has default 256 bit rate

like image 545
Kitcha Avatar asked Dec 29 '15 23:12

Kitcha


2 Answers

PCM (WAV) is uncompressed, so -b:a/-ab is ignored.

The bitrate of WAV is directly affected by the sample rate, channel layout, and bits per sample.


Calculating PCM/WAV bitrate

Assuming 8000 samples per second, stereo channel layout, 16 bits per sample:

sample rate × number of channels × bits per sample = bitrate
8000 × 2 × 16 = 256000 bits/s, or 256 kb/s

Getting channels, sample rate, bit depth

You can just view the output of ffmpeg -i input.wav or use ffprobe for a more concise output:

$ ffprobe -loglevel error -select_streams a -show_entries stream=sample_rate,channels,bits_per_sample -of default=nw=1 input.wav 
sample_rate=8000
channels=2
bits_per_sample=16

Changing the bitrate

Bitrate should not be a consideration when using WAV. If bitrate is a problem then WAV is the wrong choice for you. That being said, you can change the bitrate by changing:

  • The sample rate (-ar)
  • The number of channels (-ac)
  • The bit depth. For PCM/WAV the bit depth is the number listed in the encoder name: -c:a pcm_s24le, -c:a pcm_s16le, -c:a pcm_u8, etc. See ffmpeg -encoders.

Examples for 128 kb/s (this will probably sound bad):

ffmpeg -i input.wav -ar 8000 -ac 1 -c:a pcm_s16le output.wav
ffmpeg -i input.wav -ar 8000 -ac 2 -c:a pcm_s8 output.wav

Another option is to use a lossless compressed format. The quality will be the same as WAV but the file size can be significantly smaller. Example for FLAC:

$ ffmpeg -i audio.wav audio.flac
$ ls -alh audio.wav audio.flac
  6.1M audio.flac
   11M audio.wac
like image 72
llogan Avatar answered Oct 03 '22 16:10

llogan


I usually do this using Audacity

1) import the wav file to audacity

2) Then File>Export

3) Choose "Constant" and then from the Quality drop-down select your required bit-rate


I haven't tried that with ffmpeg, but the command should be:

ffmpeg -i input.wav -ab 64000 output.wav
like image 28
el3ati2 Avatar answered Oct 03 '22 16:10

el3ati2