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

dotnetgeek/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";
            
            // string ffmpegRoot = ConfigurationManager.AppSettings["ffmpegRoot"]
            // the is loaded implicitly from configuration if it is not passed as an argument to the constructor
            FFProbe infoDecoder = new FFProbe(ffmpegRoot);

            string output = infoDecoder.GetVideoInfo(inputFile).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",
                    outputFile = "output_path_goes_here";
            // string ffmpegRoot = ConfigurationManager.AppSettings["ffmpegRoot"]
            // the is loaded implicitly from configuration if it is not passed as an argument to the constructor
            FFMpeg encoder = new FFMpeg();
            
            // easily track conversion progress
            encoder.OnProgress += encoder_OnProgress;
            
            // input and output strings are required
            // all other parameters are optional
            encoder.ToMP4(inputFile, outputFile, Speed.Slower, VideoSize.FullHD, true);
            encoder.ToOGV(inputFile, outputFile, VideoSize.HD, true);
            encoder.ToWebM(inputFile, outputFile, VideoSize.Original, true);
            encoder.ToTS(inputFile, outputFile);
        }
        
static void encoder_OnProgress(int percentage)
        {
            Console.WriteLine("Progress {0}%", percentage);
        }

Easily capture screens from your videos:

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

            FFMpeg encoder = new FFMpeg();

            encoder.SaveThumbnail(inputFile, outputFile, new TimeSpan(0, 0, 15));
        }

Join video parts:

static void Main(string[] args)
        {
            string ffmpegRoot = ConfigurationManager.AppSettings["ffmpegRoot"];
            
            FFMpeg encoder = new FFMpeg(ffmpegRoot);

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

Strip audio track from videos:

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

            FFMpeg encoder = new FFMpeg(ffmpegRoot);

            encoder.Mute(inputFile, outputFile);
        }

Save audio track from video:

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

            FFMpeg encoder = new FFMpeg(ffmpegRoot);

            encoder.SaveAudio(inputVideoFile, outputAudioFile);
        }

Save audio track from 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(ffmpegRoot);

            encoder.AddAudio(inputVideoFile, inputAudioFile, 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(ffmpegRoot);

            encoder.AddAudio(inputImageFile, inputAudioFile, 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(ffmpegRoot);
            
            // start the conversion process
            Task.Run(() => {
              encoder.ToMP4(inputVideoFile, 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%
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy