Exemplo n.º 1
0
		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;
			}
		}
Exemplo n.º 2
0
		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;
		}
Exemplo n.º 3
0
		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);
		}
Exemplo n.º 4
0
		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;
		}