## Using ffmpeg to convert audio files

Recently, I needed to convert some .wav and .ogg files to .mp3, so I ended up using ffmpeg, a Swiss-army knife for handling different media formats from the command line.

ffmpeg is quite a multi-faceted tool, supporting conversion between most video and audio formats. To enumerate some of its many abilities: it can be used to convert audio files to a new codec, extract images or audio from a video, change the resolution of a video, or crop audio (or video files) into sections.

### Installing ffmpeg

ffmpeg supports a number of different POSIX systems, but I’ll cover the two I’ve installed it on.

On Ubuntu-based Linux systems, you can install it from the universe repository. First, you’ll need to make sure the universe repository is enabled:

sudo add-apt-repository universe
sudo apt update
sudo apt install ffmpeg


On macOS-based systems, you can use Homebrew to install ffmpeg. If you haven’t installed many packages before with brew, there will likely be a lot of prerequisites that need to be installed, so expect for this command to run for a while:

brew install ffmpeg


### Using ffmpeg

To actually use ffmpeg, you’ll want to first check information on your input files with ffmpeg -i filename01.ogg.

A single conversion between .ogg and .mp3 looks like this:

ffmpeg -i filename01.ogg filename01.mp3


If you need to specify a particular encoding library or bitrate, take a look at the documentation here for more information on the flags you’ll want.

For example, to specify 256K CBR and the libmp3lame library: ffmpeg -i filename01.wav -acodec libmp3lame -b:a 256k filename01.mp3

### Batch converting files

We can write a function that will handle generating the output name for us:

ogg2mp3() {
# Convert a .ogg file to .mp3 using ffmpeg
INPUT_FILENAME="$1" OUTPUT_FILENAME="${INPUT_FILENAME/.ogg/.mp3}"
ffmpeg -i "$INPUT_FILENAME" "$OUTPUT_FILENAME"
}

wav2mp3() {
# Convert a .wav file to .mp3 using ffmpeg
INPUT_FILENAME="$1" OUTPUT_FILENAME="${INPUT_FILENAME/.wav/.mp3}"
ffmpeg -i "$INPUT_FILENAME" "$OUTPUT_FILENAME"
}


To batch rename the files:

for audiofile in *.ogg; do
ogg2mp3 "$audiofile" done for audiofile in *.wav; do wav2mp3 "$audiofile"
done


Like what you see? Subscribe via RSS, check out the full index or browse by tag.