Skip to main content

MP3 encoder

SDK contains MP3 audio encoder that can be used to encode audio streams to MP3 format using the LAME library. MP3 is a lossy audio compression format that is widely used in audio streaming and storage.

You can use MP3 encode to encode audio in MP4, AVI, MKV, and other containers.

Cross-platform MP3 output (X-engines: VideoCaptureCoreX, VideoEditCoreX, Media Blocks)

The MP3EncoderSettings class provides a straightforward way to configure MP3 encoding with support for different rate controls and quality settings.

Supported Formats and Specifications

  • Input Format: S16LE (Signed 16-bit Little Endian)
  • Sample Rates: 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 Hz
  • Channels: Mono (1) or Stereo (2)

Rate Control Modes

The encoder supports three rate control modes:

  1. CBR (Constant Bit Rate)

    • Fixed bitrate throughout the entire encoding process
    • Supported bitrates: 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 Kbit/s
    • Best for streaming and when consistent file size is important
  2. ABR (Average Bit Rate)

    • Maintains an average bitrate while allowing some variation
    • More efficient than CBR while still maintaining predictable file sizes
    • Useful for streaming services that need approximate file size estimates
  3. Quality-based VBR

    • Variable Bit Rate based on sound complexity
    • Quality setting ranges from 0 (best) to 10
    • Most efficient for storage and best quality-to-size ratio

Sample Usage

Create basic MP3 encoder settings with CBR.

var mp3Settings = new MP3EncoderSettings
{
RateControl = MP3EncoderRateControl.CBR,
Bitrate = 192,
EncodingEngineQuality = MP3EncodingQuality.Standard,
ForceMono = false
};

Quality-based VBR configuration.

var vbrSettings = new MP3EncoderSettings
{
RateControl = MP3EncoderRateControl.Quality,
Quality = 2.0f, // High quality VBR
EncodingEngineQuality = MP3EncodingQuality.High
};

Add the MP3 output to the Video Capture SDK core instance:

// Create a Video Capture SDK core instance
var core = new VideoCaptureCoreX();

// Create a MP3 output instance
var mp3Output = new MP3Output("output.mp3");

// Set the bitrate
mp3Output.Audio.RateControl = MP3EncoderRateControl.CBR;
mp3Output.Audio.Bitrate = 128;

// Add the MP3 output
core.Outputs_Add(mp3Output, true);

Set the output format for the Video Edit SDK core instance:

// Create a Video Edit SDK core instance
var core = new VideoEditCoreX();

// Create a MP3 output instance
var mp3Output = new MP3Output("output.mp3");

// Set the quality
mp3Output.Audio.RateControl = MP3EncoderRateControl.Quality;
mp3Output.Audio.Quality = 5.0f;

// Set the output format
core.Output_Format = mp3Output;

Create a Media Blocks MP3 output instance:

// Create a MP3 encoder settings instance
var mp3Settings = new MP3EncoderSettings();

// Create a MP3 output instance
var mp3Output = new MP3OutputBlock("output.mp3", mp3Settings);

Check if MP3 encoding is available.

if (!MP3EncoderSettings.IsAvailable())
{
// Handle error
}

Encoding Quality Levels

The encoder supports three quality presets that affect the encoding speed and CPU usage:

  • Fast: Quickest encoding, lower CPU usage
  • Standard: Balanced speed and quality (default)
  • High: Best quality, higher CPU usage

Common Scenarios

High-Quality Music Encoding

var highQualitySettings = new MP3EncoderSettings
{
RateControl = MP3EncoderRateControl.Quality,
Quality = 0.0f,
EncodingEngineQuality = MP3EncodingQuality.High
};

Streaming Audio

var streamingSettings = new MP3EncoderSettings
{
RateControl = MP3EncoderRateControl.CBR,
Bitrate = 128,
EncodingEngineQuality = MP3EncodingQuality.Fast
};

Windows-only MP3 output (VideoCaptureCore and VideoEditCore engines)

The MP3 file output class provides advanced configuration options for MP3 encoding in video capture and editing scenarios.

Key Features

  • Flexible channel mode selection
  • VBR and CBR encoding support
  • Advanced encoding parameters
  • Quality control settings

Channel Modes

The MP3Output supports four channel modes:

  1. Standard Stereo

    • Independent channel encoding
    • Best for tracks with significant stereo separation
  2. Joint Stereo

    • Uses mid/side stereo coding
    • Efficient for most stereo content
    • Default for VBR below quality level 4 or CBR below 160kbps
  3. Dual Stereo

    • Independent encoding with equal bitrate allocation
    • Useful for dual-language content
  4. Mono

    • Single channel output
    • 6dB attenuated downmix for stereo inputs

Sample Usage

Basic settings.

var mp3Output = new MP3Output
{
CBR_Bitrate = 192,
SampleRate = 44100,
ChannelsMode = MP3ChannelsMode.JointStereo,
};

core.Output_Format = mp3Output; // Core is VideoCaptureCore or VideoEditCore

VBR configuration.

var mp3Output = new MP3Output
{
VBR_Mode = true,
VBR_MinBitrate = 96,
VBR_MaxBitrate = 192,
VBR_Quality = 6,
};

core.Output_Format = mp3Output; // Core is VideoCaptureCore or VideoEditCore

Advanced options.

var mp3Output = new MP3Output
{
EncodingQuality = 6,
EnableXingVBRTag = true,
Copyright = false,
Original = true
};

core.Output_Format = mp3Output; // Core is VideoCaptureCore or VideoEditCore

Advanced Settings

  • CRC Protection: Adds error detection capability at the cost of 16 bits per frame
  • Short Blocks: Can be disabled to potentially increase quality at very low bitrates
  • Frequency Range: Option to keep all frequencies (disables automatic lowpass filtering)
  • Voice Mode: Experimental mode optimized for voice content

Best Practices

  1. Choosing Rate Control

    • Use CBR for streaming and real-time applications
    • Use Quality-based VBR for archival and highest quality
    • Use ABR when you need a balance between consistent size and quality
  2. Quality Settings

    • For archival: Use VBR with quality 0-2
    • For general use: VBR with quality 3-5 or CBR 192-256kbps
    • For voice: Consider using voice encoding mode with lower bitrates
  3. Channel Mode Selection

    • Use Joint Stereo for most music content
    • Use Standard Stereo for critical listening and complex stereo mixes
    • Use Mono for voice recordings or when bandwidth is critical
  4. Performance Optimization

    • Use Fast encoding quality for real-time applications
    • Use Standard quality for general purpose encoding
    • Use High quality only for archival purposes where encoding time is not critical