Need help with MediaToolkit?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

AydinAdn
531 Stars 192 Forks MIT License 101 Commits 65 Opened issues

Description

A .NET library to convert and process all your video & audio files.

Services available

!
?

Need anything else?

Contributors list

# 93,532
C#
c-sharp
flv
ffmpeg
49 commits
# 50,966
bitbuck...
Groovy
Visual ...
ffmpeg
4 commits
# 78,190
CSS
nginx
slick
React
3 commits
# 300,118
C#
c-sharp
flv
ffmpeg
2 commits
# 375,590
C#
c-sharp
flv
ffmpeg
1 commit
# 145,422
sentry
lgplv3
Erlang
rabbitm...
1 commit
# 272,919
WPF
Windows
c-sharp
flv
1 commit
# 376,393
C#
c-sharp
flv
ffmpeg
1 commit
# 76,448
C#
oauth2
ffmpeg
lgplv3
1 commit
# 129,005
IPFS
Electro...
C#
c-sharp
1 commit

Update 19/Feb/2020

There's breaking changes on the way, when MediaToolkit was initially developed it was meant to act as facade over the FFmpeg library, providing a simplified interface to perform the most basic tasks of converting media.

Since then, there's been demands for new features, demands for updates of the original FFmpeg executables, demands for custom code executions and with each new feature the original code base has been getting more bloated and difficult to maintain, the Engine class has turned into a god class essentially and there's no easy way for clients to plugin their own arguments without modifying the original code base, the new update aims to resolve all of that.

Changes going forwards:

  • Conversion methods have been extracted out into separate classes deriving from
    IInstructionBuilder
    , so whether if you want to crop a video you would use the
    CropVideoInstructionBuilder
    , if you wanted to extract a thumbnail,
    ExtractThumbnailInstructionBuilder
    , etc. You can also obviously implement your own instructions as long as it implements
    IInstructionBuilder
    .
  • Added logging functionality to log traces of the raw output received by the FFmpeg process.
  • Added
    FFprobe
    for querying the Metadata of media files.
  • MediaFile
    classes will no longer be used, the reason for this change is because it relies on FFmpeg for querying metadata and it's difficult to make it work reliably across different types of files as the output from FFmpeg is difficult to parse and it doesn't really expose all that much information anyway. What's recommended is using
    FFprobe
    instead.

You can track its progress in the MajorRefactoring branch. You're welcome to get involved, if you see opportunities to break dependencies without adding great deals of complexity, let me know.

MediaToolkit

MediaToolkit provides a straightforward interface for handling media data, making tasks such as converting, slicing and editing both audio and video completely effortless.

Under the hood, MediaToolkit is a .NET wrapper for FFmpeg; a free (LGPLv2.1) multimedia framework containing multiple audio and video codecs, supporting muxing, demuxing and transcoding tasks on many media formats.

Contents

  1. Features
  2. Get started!
  3. Samples
  4. Licensing

Features

  • Resolving metadata
  • Generating thumbnails from videos
  • Transcode audio & video into other formats using parameters such as:
    • Bit rate
    • Frame rate
    • Resolution
    • Aspect ratio
    • Seek position
    • Duration
    • Sample rate
    • Media format
  • Convert media to physical formats and standards such as:
    • Standards include:
      FILM
      ,
      PAL
      &
      NTSC
    • Mediums include:
      DVD
      ,
      DV
      ,
      DV50
      ,
      VCD
      &
      SVCD
  • Supports custom FFmpeg command line arguments
  • Raising progress events

Get started!

Install MediaToolkit from NuGet using the Package Manager Console with the following command (or search on NuGet MediaToolkit)

PM> Install-Package MediaToolkit

Samples

Grab thumbnail from a video

var inputFile = new MediaFile {Filename = @"C:\Path\To_Video.flv"};
var outputFile = new MediaFile {Filename = @"C:\Path\To_Save_Image.jpg"};

using (var engine = new Engine()) { engine.GetMetadata(inputFile);

// Saves the frame located on the 15th second of the video.
var options = new ConversionOptions { Seek = TimeSpan.FromSeconds(15) };
engine.GetThumbnail(inputFile, outputFile, options);

}

Retrieve metadata

var inputFile = new MediaFile {Filename = @"C:\Path\To_Video.flv"};

using (var engine = new Engine()) { engine.GetMetadata(inputFile); }

Console.WriteLine(inputFile.Metadata.Duration);

Basic conversion

var inputFile = new MediaFile {Filename = @"C:\Path\To_Video.flv"};
var outputFile = new MediaFile {Filename = @"C:\Path\To_Save_New_Video.mp4"};

using (var engine = new Engine()) { engine.Convert(inputFile, outputFile); }

Convert Flash video to DVD

var inputFile = new MediaFile {Filename = @"C:\Path\To_Video.flv"};
var outputFile = new MediaFile {Filename = @"C:\Path\To_Save_New_DVD.vob"};

var conversionOptions = new ConversionOptions { Target = Target.DVD, TargetStandard = TargetStandard.PAL };

using (var engine = new Engine()) { engine.Convert(inputFile, outputFile, conversionOptions); }

Transcoding options FLV to MP4

var inputFile = new MediaFile {Filename = @"C:\Path\To_Video.flv"};
var outputFile = new MediaFile {Filename = @"C:\Path\To_Save_New_Video.mp4"};

var conversionOptions = new ConversionOptions { MaxVideoDuration = TimeSpan.FromSeconds(30), VideoAspectRatio = VideoAspectRatio.R16_9, VideoSize = VideoSize.Hd1080, AudioSampleRate = AudioSampleRate.Hz44100 };

using (var engine = new Engine()) { engine.Convert(inputFile, outputFile, conversionOptions); }

Cut video down to smaller length

var inputFile = new MediaFile {Filename = @"C:\Path\To_Video.flv"};
var outputFile = new MediaFile {Filename = @"C:\Path\To_Save_ExtractedVideo.flv"};

using (var engine = new Engine()) { engine.GetMetadata(inputFile);

var options = new ConversionOptions();

// This example will create a 25 second video, starting from the 
// 30th second of the original video.
//// First parameter requests the starting frame to cut the media from.
//// Second parameter requests how long to cut the video.
options.CutMedia(TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(25));

engine.Convert(inputFile, outputFile, options);

}

Subscribe to events

public void StartConverting()
{
    var inputFile = new MediaFile {Filename = @"C:\Path\To_Video.flv"};
    var outputFile = new MediaFile {Filename = @"C:\Path\To_Save_New_Video.mp4"};

using (var engine = new Engine())
{
    engine.ConvertProgressEvent += ConvertProgressEvent;
    engine.ConversionCompleteEvent += engine_ConversionCompleteEvent;
    engine.Convert(inputFile, outputFile);
}

}

private void ConvertProgressEvent(object sender, ConvertProgressEventArgs e) { Console.WriteLine("\n------------\nConverting...\n------------"); Console.WriteLine("Bitrate: {0}", e.Bitrate); Console.WriteLine("Fps: {0}", e.Fps); Console.WriteLine("Frame: {0}", e.Frame); Console.WriteLine("ProcessedDuration: {0}", e.ProcessedDuration); Console.WriteLine("SizeKb: {0}", e.SizeKb); Console.WriteLine("TotalDuration: {0}\n", e.TotalDuration); }

private void engine_ConversionCompleteEvent(object sender, ConversionCompleteEventArgs e) { Console.WriteLine("\n------------\nConversion complete!\n------------"); Console.WriteLine("Bitrate: {0}", e.Bitrate); Console.WriteLine("Fps: {0}", e.Fps); Console.WriteLine("Frame: {0}", e.Frame); Console.WriteLine("ProcessedDuration: {0}", e.ProcessedDuration); Console.WriteLine("SizeKb: {0}", e.SizeKb); Console.WriteLine("TotalDuration: {0}\n", e.TotalDuration); }

Licensing

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.