Skip to content

FFMpegSharp is a great way to use FFMpeg encoding when writing video applications, client-side and server-side. It has wrapper methods that allow conversion to all web formats: MP4, OGV, WebM and methods of capturing screens from the videos.

Notifications You must be signed in to change notification settings

WhiteLionATX/FFMpegSharp

 
 

Repository files navigation

FFMpegSharp

FFMpeg Sharp

FFMpegSharp is a great way to use FFMpeg encoding when writing video applications, client-side and server-side. It has wrapper methods that allow conversion to all web formats: MP4, OGV, WebM and methods of capturing screens from the videos.

Getting started

Setup your app config (ffmpeg files can be found in the 'Resources' folder):

  <appSettings>
    <add key="ffmpegRoot" value="C:\ffmpeg\bin\" />
  </appSettings>

FFProbe

FFProbe is used to gather video information

static void Main(string[] args)
        {
            string inputFile = "G:\\input.mp4";
            
            // loaded from configuration
            var video = new VideoInfo(inputFile);

            string output = video.ToString();

            Console.WriteLine(output);
        }

Sample output:

        Video Path : G:\input.mp4
        Video Root : G:\\
        Video Name: input.mp4
        Video Extension : .mp4
        Video Duration : 00:00:09
        Audio Format : none
        Video Format : h264
        Aspect Ratio : 16:9
        Framerate : 30fps
        Resolution : 1280x720
        Size : 2.88 Mb

FFMpeg

Convert your video files to web ready formats:

	static void Main(string[] args)
	{
		string inputFile = "input_path_goes_here";
		FileInfo outputFile = new FileInfo("output_path_goes_here");

		var video = VideoInfo.FromPath(inputFile);
				
		// easily track conversion progress
		video.OnConversionProgress += video_OnConversionProgress;

		// input and output strings are required
		// all other parameters are optional
		video.ConvertTo(VideoType.Mp4, outputFile, Speed.UltraFast,
			VideoSize.Original,
			AudioQuality.Hd, 
			true, 
			false);
		video.ConvertTo(VideoType.Ogv, outputFile, Speed.UltraFast,
			VideoSize.Original,
			AudioQuality.Hd,
			true,
			false);
		video.ConvertTo(VideoType.WebM, outputFile, Speed.UltraFast,
			VideoSize.Original,
			AudioQuality.Hd,
			true,
			false);
		video.ConvertTo(VideoType.Ts, outputFile, Speed.UltraFast,
			VideoSize.Original,
			AudioQuality.Hd,
			true,
			false);
	}

	static void video_OnConversionProgress(double percentage)
	{
		Console.WriteLine("Progress {0}%", percentage);
	}

Easily capture screens from your videos:

static void Main(string[] args)
        {
            string inputFile = "input_path_goes_here";
            FileInfo output = new FileInfo("output_path_goes_here");

            var video = VideoInfo.FromPath(inputFile);

            video.Snapshot(output, new Size(200, 400), TimeSpan.FromMinutes(1));
        }

Join video parts:

static void Main(string[] args)
        {
            FFMpeg encoder = new FFMpeg();

            encoder.Join(new FileInfo(@"..\joined_video.mp4"), 
                VideoInfo.FromPath(@"..\part1.mp4"),
                VideoInfo.FromPath(@"..\part2.mp4"),
                VideoInfo.FromPath(@"..\part3.mp4"));
        }

Strip audio track from videos:

static void Main(string[] args)
        {
            string inputFile = "input_path_goes_here",
                   outputFile = "output_path_goes_here";
            
            VideoInfo.FromPath(inputFile).Mute(new FileInfo(outputFile));
        }

Save audio track from video:

static void Main(string[] args)
        {
            string inputVideoFile = "input_path_goes_here",
                   outputAudioFile = "output_path_goes_here";
                        
            VideoInfo.FromPath(inputVideoFile).ExtractAudio(new FileInfo(outputAudioFile));
        }

Add audio track to video:

static void Main(string[] args)
        {
            string inputVideoFile = "input_path_goes_here",
                   inputAudioFile = "input_path_goes_here",
                   outputVideoFile = "output_path_goes_here";

            FFMpeg encoder = new FFMpeg();

            VideoInfo.FromPath(inputVideoFile).ReplaceAudio(new FileInfo(inputAudioFile), new FileInfo(outputVideoFile));
        }

Add poster image to audio file (good for youtube videos):

static void Main(string[] args)
        {
            string inputImageFile = "input_path_goes_here",
                   inputAudioFile = "input_path_goes_here",
                   outputVideoFile = "output_path_goes_here";

            FFMpeg encoder = new FFMpeg();

            var image = (Bitmap)Image.FromFile(inputImageFile);
            image.AddAudio(new FileInfo(inputAudioFile), new FileInfo(outputVideoFile);
        }

Control over the 'FFmpeg' process doing the job:

static void Main(string[] args)
        {
            string inputVideoFile = "input_path_goes_here",
                   outputVideoFile = "input_path_goes_here";

            FFMpeg encoder = new FFMpeg();

            // start the conversion process
            Task.Run(() => {
                encoder.ToMp4(new VideoInfo(inputVideoFile), new FileInfo(outputVideoFile));
            });

            // stop encoding after 2 seconds (only for example purposes)
            Thread.Sleep(2000);
            encoder.Stop();
        }

Video Size enumeration:

public enum VideoSize
    {
        HD,
        FullHD,
        ED,
        LD,
        Original
    }

Speed enumeration:

public enum Speed
    {
        VerySlow,
        Slower,
        Slow,
        Medium,
        Fast,
        Faster,
        VeryFast,
        SuperFast,
        UltraFast
    }

About

FFMpegSharp is a great way to use FFMpeg encoding when writing video applications, client-side and server-side. It has wrapper methods that allow conversion to all web formats: MP4, OGV, WebM and methods of capturing screens from the videos.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%