FFmpeg.NET 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, FFmpeg.NET 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.
Some major parts are taken from https://github.com/AydinAdn/MediaToolkit. Many features have been refactored. The library has been ported to Netstandard and made threadsafe.
You need to provide the ffmpeg executable path to the Engine
constructor.
Service | Status |
---|---|
Travis CI |
Package | NuGet |
---|---|
xFFmpeg.NET |
Bit rate
Frame rate
Resolution
Aspect ratio
Seek position
Duration
Sample rate
Media format
FILM
, PAL
& NTSC
DVD
, DV
, DV50
, VCD
& SVCD
Install FFmpeg.NET from nuget.org Package Source using the Package Manager Console with the following command
PM> Install-Package xFFmpeg.NET
var inputFile = new InputFile (@"C:\Path\To_Video.flv");
var outputFile = new OutputFile (@"C:\Path\To_Save_Image.jpg");
var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
// Saves the frame located on the 15th second of the video.
var options = new ConversionOptions { Seek = TimeSpan.FromSeconds(15) };
await ffmpeg.GetThumbnailAsync(inputFile, outputFile, options);
var inputFile = new InputFile (@"C:\Path\To_Video.flv");
var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
var metadata = await ffmpeg.GetMetadataAsync(inputFile);
Console.WriteLine(metadata.Duration);
var inputFile = new InputFile (@"C:\Path\To_Video.flv");
var outputFile = new OutputFile (@"C:\Path\To_Save_New_Video.mp4");
var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
await ffmpeg.ConvertAsync(inputFile, outputFile);
var inputFile = new InputFile (@"C:\Path\To_Video.flv");
var outputFile = new OutputFile (@"C:\Path\To_Save_New_DVD.vob");
var conversionOptions = new ConversionOptions
{
Target = Target.DVD,
TargetStandard = TargetStandard.PAL
};
var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
await ffmpeg.ConvertAsync(inputFile, outputFile, conversionOptions);
var inputFile = new InputFile (@"C:\Path\To_Video.flv");
var outputFile = new OutputFile (@"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
};
var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
await ffmpeg.ConvertAsync(inputFile, outputFile, conversionOptions);
var inputFile = new InputFile (@"C:\Path\To_Video.flv");
var outputFile = new OutputFile (@"C:\Path\To_Save_ExtractedVideo.flv");
var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
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));
await ffmpeg.ConvertAsync(inputFile, outputFile, options);
public async Task StartConverting()
{
var inputFile = new InputFile (@"C:\Path\To_Video.flv");
var outputFile = new OutputFile (@"C:\Path\To_Save_New_Video.mp4");
var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
ffmpeg.Progress += OnProgress;
ffmpeg.Data += OnData;
ffmpeg.Error += OnError;
ffmpeg.Complete += OnComplete;
await ffmpeg.ConvertAsync(inputFile, outputFile);
}
private void OnProgress(object sender, ConversionProgressEventArgs e)
{
Console.WriteLine("[{0} => {1}]", e.Input.FileInfo.Name, e.Output.FileInfo.Name);
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("Size: {0} kb", e.SizeKb);
Console.WriteLine("TotalDuration: {0}\n", e.TotalDuration);
}
private void OnData(object sender, ConversionDataEventArgs e)
{
Console.WriteLine("[{0} => {1}]: {2}", e.Input.FileInfo.Name, e.Output.FileInfo.Name, e.Data);
}
private void OnComplete(object sender, ConversionCompleteEventArgs e)
{
Console.WriteLine("Completed conversion from {0} to {1}", e.Input.FileInfo.FullName, e.Output.FileInfo.FullName);
}
private void OnError(object sender, ConversionErrorEventArgs e)
{
Console.WriteLine("[{0} => {1}]: Error: {2}\n{3}", e.Input.FileInfo.Name, e.Output.FileInfo.Name, e.Exception.ExitCode, e.Exception.InnerException);
}