Note: This example was written in Visual Studio 2010.
This example shows how you can re-encode a video to change its audio gain. Earlier examples such as Change video quality in C# show how to use Microsoft Expression Encoder to work with videos. This example follows a similar pattern.
This example requires the following references:
- Microsoft.Expression.Encoder
- Microsoft.Expression.Encoder.Api2
- Microsoft.Expression.Encoder.Types
- Microsoft.Expression.Encoder.Utilities
It uses the following using directives to make using the Encoder objects and methods easier.
using Microsoft.Expression.Encoder; using Microsoft.Expression.Encoder.Profiles; using System.IO;
The following code shows how the program does its most interesting work (re-encoding the video to change the sound gain).
private void btnCreate_Click(object sender, EventArgs e) { if (sfdMerged.ShowDialog() != DialogResult.OK) return; Cursor = Cursors.WaitCursor; prgEncode.Value = 0; prgEncode.Visible = true; Refresh(); try { // Create a job. using (Job job = new Job()) { // Make a MediaItem containing the splash video. MediaItem media_item = new MediaItem(txtMovie.Text); job.MediaItems.Add(media_item); // Use the original size. media_item.OutputFormat.VideoProfile.Size = media_item.OriginalVideoSize; // Set the quality. double gain; if (trkGain.Value <= 0) gain = (10.0 + trkGain.Value) / 10.0; else gain = trkGain.Value; Console.WriteLine("Gain: " + gain); media_item.AudioGainLevel = gain; // Set the output directory. FileInfo file_info = new FileInfo(sfdMerged.FileName); job.OutputDirectory = file_info.DirectoryName; // Set the output file name. media_item.OutputFileName = file_info.Name; // Don't create a subdirectory. job.CreateSubfolder = false; // Install the progress event handler. job.EncodeProgress += job_EncodeProgress; // Encode. job.Encode(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } Cursor = Cursors.Default; prgEncode.Visible = false; }
Ths code displays a dialog to let you select the name of the output file. If you don’t pick a video file and click Save, the method returns.
If you do pick a file, the code creates a new Job object and adds a MediaItem representing the video you selected for input.
The code sets the media item’s size so it uses the original size. It then sets the item’s AudioGainLevel. This is a multiplicative factor. For example, the value 0.5 decreases the video’s volume by half and the value 3 increases it by a factor of 3.
The program uses a simple calculation to convert from the slider’s value between -5 and +5 into the factor. If the value is less than or equal to 0, the code adds the value to 10 and divides by 10. For example, suppose the value is -3. Then the code uses (10 – 3) / 10 = 0.7 for he gain.
If the slider’s value is greater than 0, the program uses it directly as a multiplier. For example, if the value is 3, the code sets the gain to 3.
After setting AudioGainLevel, the code sets the output directory and the output file name, installs a progress event handler, and calls the Encode method to create the output video. Download the example to see additional details.



