Birdnet-Analyzer and Audacity for Bird ID

Quick guide: How to identify bird species from bird song recordings using a recorder, birdnet-analyzer and audacity software

You’ve captured a few recordings of birds on your phone or recording equipment and now you want to indentify bird species from the recording.

Scientists find the most value audio recordings that are as true to the source as possible. The information contained in this guide follows the best practices recommended by Cornell Lab of Ornithology.

Download Audacity

Audacity is free audio editing software for Windows, MacOS and Linux that can be used to make your recordings the best they can be.

Download Audacity

Load your recording into Audacity and switch view to spectrogram

The spectrogram view is essential to analyze and learn from your recordings. It will show the frequency of the audio in the file. The darker the markings, the more pronounced they are. If you see a spectrogram with a clear background and dark or intense frequencies it’s an indicator you have a decent recording. I prefer even to switch to greylevel viev in the Spectrogramm Settings. Spectrogramm Settings allows also to change max frequences to 14000Hz which corresponds to the value I use for recording.

Download and install BirdNet-Analyzer

Install BirdNet-Analyzer from Git-Hub: https://github.com/kahst/BirdNET-Analyzer#introduction The Sofware will allow you to use AI to analyze which species you hear in the recording and you can import the results file into audacity (see the lower part of the next graphics).

The following list shows all command line arguments for the software:

–i, Path to input file or folder. If this is a file, –o needs to be a file too.

–o, Path to output file or folder. If this is a file, –i needs to be a file too.

–lat, Recording location latitude. Set -1 to ignore.

–lon, Recording location longitude. Set -1 to ignore.

–week, Week of the year when the recording was made. Values in [1, 48] (4 weeks per month). Set -1 for year-round species list.

–slist, Path to species list file or folder. If folder is provided, species list needs to be named „species_list.txt“. If lat and lon are provided, this list will be ignored.

–sensitivity, Detection sensitivity; Higher values result in higher sensitivity. Values in [0.5, 1.5]. Defaults to 1.0.

–min_conf, Minimum confidence threshold. Values in [0.01, 0.99]. Defaults to 0.1.

–overlap, Overlap of prediction segments. Values in [0.0, 2.9]. Defaults to 0.0.

–rtype, Specifies output format. Values in [‚table‘, ‚audacity‘, ‚r‘, ‚kaleidoscope‘, ‚csv‘]. Defaults to ‚table‘ (Raven selection table).

–threads, Number of CPU threads.

–batchsize, Number of samples to process at the same time. Defaults to 1.

–locale, Locale for translated species common names. Values in [‚af‘, ‚de‘, ‚it‘, …] Defaults to ‚en‘.

–sf_thresh, Minimum species occurrence frequency threshold for location filter. Values in [0.01, 0.99]. Defaults to 0.03.

–classifier, Path to custom trained classifier. Defaults to None. If set, –lat, –lon and –loca

I use the following command for analysis in Göttingen:

(./python3.11 analyze.py –i /home/stefan_h/BirdNET-Analyzer/example/ –o /home/stefan_h/BIRDS –lat 51.518 –lon 9.943 –locale de –sensitivity 0.5 –rtype audacity)

Based on detection of Asio otus flight calls I now use (to automatically analyze 1.7GB of audio data takes about 11 minutes plus the time I need to check manually if the results are OK):

python3.11 analyze.py –i /home/stefan_h/BirdNET-Analyzer/example –o /home/stefan_h/birds –threads 14 –batchsize 4 –lat 51 –lon 10 –sensitivity 1.2 –min_
conf 0.27 –rtype audacity –locale DE

Parts of the spectrogramm can be selected, replayed and manually checked for plausibility. The software will produce about ~20% errors and you will have to find out which species are falsely detected by your system but you can record unattendet and will be able to get an idea about the species present in an area of interest. Automatic analyzing a few hours of recording will be done in a few minutes, only manually checking and confirming the results will take it´s time.

=========================================================================================

Recording can be started remotly using „arecord“ in a shell script:

!/bin/bash

cd /home/stefan_h/BirdNET-Analyzer
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav
FILENAME=bird-date +"%d-%m-%Y_%H-%M-%S"
arecord -r 16000 -f S16_LE -d 7200 /home/stefan_h/BirdNET-Analyzer/example/${FILENAME}.wav

This will start a recording session.

With rsync the recordings can be transferred to another PC/Server

rsync -rt –delete stefan_h@192.168.178.222:/home/stefan_h/BirdNET-Analyzer/example/ /home/stefan_h/BirdNET-Analyzer/example

BirdNET-Analyzer (a Python programm) will then analyze the recordings:

python3.11 analyze.py –i /home/stefan_h/BirdNET-Analyzer/example/ –o /home/stefan_h/BirdNET-Analyzer/results –locale de –sensitivity 1.5 –threads 16 –rtype audacity –min_conf 0.4 –lat 52 –lon 10 –week 12