How to get the duration of audio in Python?


The field of audio processing has witnessed substantial expansion within recent years, and Python has become a prevalent choice of language for tasks revolving around audio manipulation. A common undertaking when it comes to processing audio entails determining the length of an audio file, which can prove useful in a wide array of applications. Such as the creation of playlists, audio data analysis, or the development of audio editing tools.

Throughout this article, you will be guided through a variety of techniques, ranging from the basic to the advanced, in order to obtain the duration of audio using Python. Real code examples will be provided along the way. Before delving deeper into the subject matter, it is crucial to gain an understanding of the fundamental concepts and terminology that pertain to audio processing. This will give you the necessary foundation to implement the various approaches presented later in the article. Let's start with the definition of audio duration and then explore the syntax and algorithms for calculating it.

The term "audio duration" refers to the amount of time that an audio file plays, typically measured in units of seconds or minutes. This value is influenced by an assortment of traits that define the audio file, including the quantity of samples, channels, and sample rate. A comprehensive grasp of this knowledge is indispensable for an array of applications, including but not restricted to transcription, analysis, and audio editing.

Syntax

Python provides a diverse array of libraries to manage audio file processing. These libraries comprise wave, pydub, and librosa, and each library contains its own distinct syntax and functions for uploading audio files and measuring their temporal length. The typical process for determining an audio file's duration encompasses the following steps −

  • Importing the mandatory libraries.

  • Reading in the audio file.

  • Extracting the file's characteristics (such as the sample rate, quantity of samples, and channel quantity).

  • Calculating the duration utilizing the extracted characteristics.

Algorithm

To acquire the audio file's duration in Python, one can implement the following algorithm −

  • Implement the appropriate library to upload the audio file.

  • Extract the relevant characteristics of the audio file, including the sample rate, quantity of channels, and number of frames.

  • Calculate the audio file's duration by dividing the number of frames by the sample rate.

  • Output the duration value by printing it or returning it.

Approaches

We will now explore several techniques for determining the duration of an audio file in Python. The following methods will be covered −

  • By utilizing the wave library.

  • By using the pydub library.

  • Using the librosa library.

  • By using the ffmpeg-python library.

Approach 1: Using the wave library

The wave library is a built-in Python module that provides support for WAV files. Here's a full code example of how to use the wave library to get the duration of an audio file −

Example

import wave
def get_duration_wave(file_path):
   with wave.open(file_path, 'r') as audio_file:
      frame_rate = audio_file.getframerate()
      n_frames = audio_file.getnframes()
      duration = n_frames / float(frame_rate)
      return duration
file_path = 'example.wav'
duration = get_duration_wave(file_path)
print(f"Duration: {duration:.2f} seconds")

Output

Duration: 10.00 seconds

Approach 2: Using the pydub library

The pydub library stands as a commonly used and simple-to-utilize tool for the manipulation of audio. In order to make use of pydub, you must first install it via pip install pydub. Here's a code example to get the duration using pydub −

Example

from pydub import AudioSegment
def get_duration_pydub(file_path):
   audio_file = AudioSegment.from_file(file_path)
   duration = audio_file.duration_seconds
   return duration
file_path = 'example.wav'
duration = get_duration_pydub(file_path)
print(f"Duration: {duration:.2f} seconds")

Output

Duration: 10.00 seconds

Within this particular code snippet, we import the AudioSegment class, which hails from the pydub library, with the purpose of reading and making alterations to audio files. To load the audio file, we call the from_file function, and the duration_seconds attribute is employed to acquire the length of the audio file in seconds.

Approach 3: Using the librosa library

Librosa stands as yet another esteemed library for the processing of audio using Python, putting its emphasis mainly on the analysis of music and sound. By typing 'pip install librosa' in your terminal or command prompt, you will be able to easily and quickly install it. Here's a code example to get the duration using librosa −

Example

import librosa
def get_duration_librosa(file_path):
   audio_data, sample_rate = librosa.load(file_path)
   duration = librosa.get_duration(y=audio_data, sr=sample_rate)
   return duration
file_path = 'example.wav'
duration = get_duration_librosa(file_path)
print(f"Duration: {duration:.2f} seconds")

Output

Duration: 10.00 seconds

In this example, the librosa.load function is used to read the audio file and obtain the audio data and sample rate. The librosa.get_duration function is then utilized to calculate the duration based on the audio data and sample rate.

Approach 4: Using the ffmpeg-python library

FFmpeg is a commonly used tool for processing audio and video on various platforms. The ffmpeg-python library acts as a Python wrapper for the FFmpeg command-line interface and can be installed using pip install ffmpeg-python. The following is an example code that demonstrates how to retrieve the duration of an audio file using ffmpeg-python −

Example

import ffmpeg
def get_duration_ffmpeg(file_path):
   probe = ffmpeg.probe(file_path)
   stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'audio'), None)
   duration = float(stream['duration'])
   return duration
file_path = 'example.wav'
duration = get_duration_ffmpeg(file_path)
print(f"Duration: {duration:.2f} seconds")

Output

Duration: 10.00 seconds

In this instance, we use the ffmpeg.probe function to obtain metadata pertaining to the audio file. Subsequently, we filter the audio stream from the stream list and extract the duration from the 'duration' field present in the stream dictionary.

Conclusion

Within this article, we have delved into four distinct methods to obtain the duration of an audio file in Python using the wave, pydub, librosa, and ffmpeg-python libraries. Every approach possesses its own strengths and limitations, and the library selection relies upon your individual necessities and inclinations. These code examples are designed to equip you with a strong foundation to implement audio duration calculation in your Python projects.

Updated on: 24-Jul-2023

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements