private void button1_Click(object sender, EventArgs e) { PlayerState state = VideoPlayerAPIFactory.CreateVideoPlayerAPI().GetPlayerState(); if (state.position == -1) { return; } var result = Task.Run(async() => await FFmpeg.GetMediaInfo(state.filePath)); StreamSelector streamSelector = new StreamSelector(result.Result); var formResult = streamSelector.ShowDialog(); if (formResult == DialogResult.OK) { selectedAudio = streamSelector.GetSelectedAudio(); selectedSubtitle = streamSelector.GetSelectedSub(); } }
private void ShowCropDialog() { PlayerState state = VideoPlayerAPIFactory.CreateVideoPlayerAPI().GetPlayerState(); if (state.position == -1) { ShowMessage(MessageType.Error, "Can't connect to video player"); return; } String screenPath = Path.ChangeExtension(Path.GetTempFileName(), "png"); var result = Conversion.Snapshot(state.filePath, screenPath, TimeSpan.FromMilliseconds(state.position)).Start().Result; if (!result.Success) { ShowMessage(MessageType.Error, "Getting screenshot failed"); return; } var image = Image.FromFile(screenPath); imageCropDialog.imageCropBox.Image = image; imageCropDialog.imageCropBox.SelectNone(); var display = Screen.PrimaryScreen.WorkingArea; double wScale = image.Width * 1.0 / display.Width; double hScale = image.Height * 1.0 / display.Height; double maxScale = Math.Max(wScale, hScale); if (maxScale <= 1.0) { imageCropDialog.Size = image.Size; } else { imageCropDialog.Width = (int)(image.Width / maxScale); imageCropDialog.Height = (int)(image.Height / maxScale); } if (imageCropDialog.ShowDialog() == DialogResult.Cancel) { return; } var region = imageCropDialog.imageCropBox.SelectionRegion; String crop = String.Format("crop={0}:{1}:{2}:{3}", (int)region.Width, (int)region.Height, (int)region.X, (int)region.Y); CutGif(start, end, fileName, crop); }
private void HotkeyHandler(object sender, HotkeyEventArgs e) { GiferActionId actionId; if (!Enum.TryParse(e.Name, out actionId)) { return; } switch (actionId) { case GiferActionId.MarkStart: { PlayerState state = VideoPlayerAPIFactory.CreateVideoPlayerAPI().GetPlayerState(); if (state.position == -1) { ShowMessage(MessageType.Error, "Can't connect to video player"); } else { if (fileName != state.filePath) { fileName = state.filePath; end = -1; } start = state.position; ShowMessage(MessageType.Info, "Marked start position " + TimeSpan.FromMilliseconds(start).ToString()); } } break; case GiferActionId.MarkEnd: { PlayerState state = VideoPlayerAPIFactory.CreateVideoPlayerAPI().GetPlayerState(); if (state.position == -1) { ShowMessage(MessageType.Error, "Can't connect to video player"); } else { if (fileName != state.filePath) { fileName = state.filePath; start = -1; } end = state.position; ShowMessage(MessageType.Info, "Marked end position " + TimeSpan.FromMilliseconds(end).ToString()); } } break; case GiferActionId.CreateDefault: { if (start != -1 && end != -1) { if (start > end) { int t = start; start = end; end = t; } CutGif(start, end, fileName); } } break; case GiferActionId.CreatePadded: { if (start != -1 && end != -1) { if (start > end) { int t = start; start = end; end = t; } ShowPadDialog(); } } break; case GiferActionId.CreateCropped: { if (start != -1 && end != -1) { if (start > end) { int t = start; start = end; end = t; } ShowCropDialog(); } } break; case GiferActionId.CreateWithSubs: { if (start != -1 && end != -1) { if (start > end) { int t = start; start = end; end = t; } CutGif(start, end, fileName, subtitles: true); } } break; case GiferActionId.CreateCustom: { if (start != -1 && end != -1) { if (start > end) { int t = start; start = end; end = t; } CutGif(start, end, fileName, subtitles: Configuration.CustomKeepSubs, fullResolution: Configuration.CustomFullResolution, keepAudio: Configuration.CustomKeepAudio); } } break; } e.Handled = true; }