void Start() { _workingDirectory = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; var sourceMp4 = "cat1.mp4"; var destinationPathAndFilename = System.IO.Path.Combine(_workingDirectory, "cat1_out.mp4"); var destinationPathAndFilename2 = System.IO.Path.Combine(_workingDirectory, "cat1_out2.mp4"); var destinationPathAndFilename4 = System.IO.Path.Combine(_workingDirectory, "cat1_out4.wav"); if (File.Exists(destinationPathAndFilename)) { File.Delete(destinationPathAndFilename); } CreateSampleFile(Resource.Raw.cat1, _workingDirectory, sourceMp4); var ffmpeg = new FFMpeg(this, _workingDirectory); var sourceClip = new Clip(System.IO.Path.Combine(_workingDirectory, sourceMp4)); var result = ffmpeg.GetInfo(sourceClip); var br = System.Environment.NewLine; // There are callbacks based on Standard Output and Standard Error when ffmpeg binary is running as a process: var onComplete = new MyCommand((_) => { RunOnUiThread(() => _logView.Append("DONE!" + br + br)); }); var onMessage = new MyCommand((message) => { RunOnUiThread(() => _logView.Append(message + br + br)); }); var callbacks = new FFMpegCallbacks(onComplete, onMessage); // 1. The idea of this first test is to show that video editing is possible via FFmpeg: // It results in a 150x150 movie that eventually zooms on a cat ear. This is desaturated, and there's a fade in. var filters = new List <VideoFilter> (); filters.Add(new FadeVideoFilter("in", 0, 100)); filters.Add(new CropVideoFilter("150", "150", "0", "0")); filters.Add(new ColorVideoFilter(1.0m, 1.0m, 0.0m, 0.5m, 1.0m, 1.0m, 1.0m, 1.0m)); var outputClip = new Clip(destinationPathAndFilename) { videoFilter = VideoFilter.Build(filters) }; outputClip.H264_CRF = "18"; // It's the quality coefficient for H264 - Default is 28. I think 18 is pretty good. ffmpeg.ProcessVideo(sourceClip, outputClip, true, new FFMpegCallbacks(onComplete, onMessage)); //2. This is a similar version version in command line only: string[] cmds = new string[] { "-y", "-i", sourceClip.path, "-strict", "-2", "-vf", "mp=eq2=1:1.68:0.3:1.25:1:0.96:1", destinationPathAndFilename2, "-acodec", "copy", }; ffmpeg.Execute(cmds, callbacks); // 3. This lists codecs: string[] cmds3 = new string[] { "-codecs", }; ffmpeg.Execute(cmds, callbacks); // 4. This convers to WAV // Note that the cat movie just has some silent house noise. ffmpeg.ConvertToWaveAudio(sourceClip, destinationPathAndFilename4, 44100, 2, callbacks, true); // Etc... // Rules of thumb: // a) Provide the minimum of info to ffmpeg to not mix it up // b) These helpers are cool to test capabilities, but useless otherwise, and crashy: Use command lines. // c) Try to compile a newer FFmpeg :) }