public static Task<bool> StartConversion(string inputFile, string outputFile, EncodingOptions advancedOptions) { var tcs = new TaskCompletionSource<bool>(); try { SimpleLogger.LogMessage(String.Format("Starting Conversion: \"{0}\" --> \"{1}\"", inputFile, outputFile)); var commandLineArguments = String.Format("-i \"{0}\" {2} \"{1}\"", inputFile, outputFile, advancedOptions.ToString()); SimpleLogger.LogMessage("Using arguments: " + commandLineArguments); var ffmpeg = ConfigurationManager.AppSettings["FFMPEG_PATH"]; var procStartInfo = new ProcessStartInfo(ffmpeg, commandLineArguments) { //* CreateNoWindow = true, UseShellExecute = false, WindowStyle = ProcessWindowStyle.Hidden, RedirectStandardOutput = true, RedirectStandardError = true, //*/ ErrorDialog = true, }; //var p = Process.Start(procStartInfo); var p = new Process() { StartInfo = procStartInfo, EnableRaisingEvents = true, }; //* p.Exited += (o, args) => { SimpleLogger.LogMessage("Conversion done"); p.Dispose(); tcs.TrySetResult(true); }; p.OutputDataReceived += (o, args) => { SimpleLogger.LogMessage(args.Data); }; p.ErrorDataReceived += (o, args) => { SimpleLogger.LogMessage(args.Data, "Errors"); }; //*/ if(p.Start()) { p.BeginOutputReadLine(); p.BeginErrorReadLine(); } else { tcs.TrySetException(new InvalidOperationException("Failed to start process")); } return tcs.Task; } catch (Exception ex) { SimpleLogger.LogMessage("Exception in FFWrapper.StartConversion: " + ex.Message, "Exceptions"); tcs.TrySetException(ex); return tcs.Task; } }
private void SetEncodingOptions(EncodingOptions options) { includeVideo.Checked = options.IncludeVideo; videoResolution.Text = options.VideoResolution; videoFramerate.Text = options.VideoFramerate; videoBitrate.Text = options.VideoBitrate; videoScaleQuality.Text = options.VideoScaleQuality; includeAudio.Checked = options.IncludeAudio; audioSamplerate.Text = options.AudioSampleRate; audioBitrate.Text = options.AudioBitrate; audioChannels.Text = options.AudioChannels; audioScaleQuality.Text = options.AudioScaleQuality; }
public static async Task<bool> StartBatchConversion(string inputFolder, string outputFolder, string outputFormat, EncodingOptions advancedOptions) { if(!Directory.Exists(outputFolder)) { Directory.CreateDirectory(outputFolder); } var result = new List<bool>(); var di = new DirectoryInfo(inputFolder); var files = di.GetFiles(); foreach(var file in files) { var status = false; try { var inName = file.FullName; var outName = String.Format("{0}\\{1}.{2}", outputFolder, file.Name, outputFormat); status = await StartConversion(inName, outName, advancedOptions); } catch (Exception ex) { SimpleLogger.LogMessage("Exception in FFWrapper.StartBatchConversion: " + ex.Message); } result.Add(status); } return result.All(b => b); }
private EncodingOptions GetEncodingOptions() { var res = String.Empty; var resText = videoResolution.Text; var p = resText.Split('x'); if (p.Length > 1) { uint a, b; if (UInt32.TryParse(p[0], out a) && UInt32.TryParse(p[1], out b)) { res = a + "x" + b; } } if ((!String.IsNullOrEmpty(resText)) && String.IsNullOrEmpty(res)) { MessageBox.Show(this, String.Format("\"{0}\" is an invalid resolution. Please enter one in the format of \"1920x1080\" or leave the field blank", resText), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } var options = new EncodingOptions { IncludeVideo =includeVideo.Checked, VideoResolution = res, VideoFramerate = videoFramerate.Text, VideoBitrate = videoBitrate.Text, VideoScaleQuality = videoScaleQuality.Text, IncludeAudio = includeAudio.Checked, AudioSampleRate = audioSamplerate.Text, AudioBitrate = audioBitrate.Text, AudioChannels = audioChannels.Text, AudioScaleQuality = audioScaleQuality.Text, }; return options; }