Skip to main content

Overview

The AudioConverter class converts audio files to Markdown by extracting metadata (via exiftool) and transcribing speech to text (via speech_recognition library). Supports common audio formats including WAV, MP3, M4A, and MP4.

Dependencies

Required: None
Optional: exiftool (external), SpeechRecognition library

Accepted Formats

list
  • audio/x-wav
  • audio/mpeg
  • video/mp4
list
  • .wav
  • .mp3
  • .m4a
  • .mp4

Class Definition

Methods

accepts()

Returns True for supported audio file extensions or MIME types.

convert()

Converts an audio file to Markdown with metadata and transcript. Parameters:
BinaryIO
required
Binary stream of the audio file
StreamInfo
required
Metadata about the file (extension, MIME type)
str
Path to exiftool binary for metadata extraction
Returns: DocumentConverterResult with metadata and transcript Note: Transcription requires speech_recognition library. If not installed, only metadata is extracted.

Features

Metadata Extraction

If exiftool is available, extracts these audio metadata fields:
  • Title - Track title
  • Artist - Artist/performer name
  • Author - Author name
  • Band - Band/group name
  • Album - Album title
  • Genre - Music genre
  • Track - Track number
  • DateTimeOriginal - Original recording date
  • CreateDate - File creation date
  • NumChannels - Number of audio channels (mono/stereo)
  • SampleRate - Sample rate in Hz
  • AvgBytesPerSec - Average bitrate
  • BitsPerSample - Bit depth
Note: Duration field is excluded as it may be incorrect when read from memory.

Audio Transcription

When speech_recognition is installed:
  1. Detects audio format from extension/MIME type
  2. Transcribes speech to text
  3. Adds transcript under ”### Audio Transcript:” heading

Example Usage

Metadata Only

Output:

With Transcription

Output:

Custom exiftool Path

Implementation Details

Source Location

~/workspace/source/packages/markitdown/src/markitdown/converters/_audio_converter.py:23

Format Detection

The converter maps file extensions to audio formats for transcription:

Transcription Pipeline

Transcription uses the transcribe_audio() helper function (from _transcribe_audio.py):
This function:
  1. Uses speech_recognition library
  2. Supports multiple speech recognition engines
  3. Returns text transcript or None if transcription fails

Error Handling

  • Missing speech_recognition raises MissingDependencyException (caught silently)
  • Transcription failures are silent (no transcript section added)
  • Metadata extraction failures are silent (field not included)

Use Cases

Podcast Indexing

Meeting Notes

Music Library Management

Limitations

  • Transcription accuracy depends on audio quality and speech clarity
  • Only supports formats: WAV, MP3, M4A, MP4
  • Large audio files may require significant processing time
  • Transcription requires internet connection (for some engines)
  • Metadata extraction requires external exiftool binary
  • No speaker identification or timestamp markers
  • Music/background noise may interfere with transcription
  • Non-English speech may have limited support

Transcription Engines

The speech_recognition library supports multiple engines:
  • Google Speech Recognition (default, requires internet)
  • Sphinx (offline, less accurate)
  • Google Cloud Speech
  • Microsoft Azure Speech
  • IBM Speech to Text
  • Whisper (OpenAI)
Refer to speech_recognition documentation for configuration.