private CompletionStatus GenerateDeshakerLogSegment(MediaEncoderSettings settings, string inputFile, int segment, long jobStart, long frameStart, long frameEnd, ProcessStartOptions jobOptions) { // Write Deshaker Pass 1 script to file. string Script = MediaEncoderScript.GenerateDeshakerScript(settings, inputFile, segment, frameStart, frameEnd); File.WriteAllText(settings.DeshakerScript, Script); // Run pass. jobOptions.IsMainTask = true; jobOptions.Title = "Running Deshaker Prescan"; jobOptions.ResumePos = frameStart - jobStart; CompletionStatus Result = MediaEncoder.ConvertToAvi(settings.DeshakerScript, settings.DeshakerTempOut, false, jobOptions); File.Delete(settings.DeshakerScript); File.Delete(settings.DeshakerTempOut); return Result; }
public async Task PreparePreviewFile(MediaEncoderSettings settings, bool overwrite, bool calcAutoCrop) { if (string.IsNullOrEmpty(settings.FilePath)) return; if (overwrite) { File.Delete(PathManager.PreviewSourceFile); // Select default open method. if (settings.FilePath.ToLower().EndsWith(".avi")) settings.ConvertToAvi = false; else { FFmpegProcess FileInfo = await Task.Run(() => MediaInfo.GetFileInfo(settings.FilePath)); if (settings.ConvertToAvi && FileInfo?.VideoStream?.Height >= 720) settings.ConvertToAvi = false; } } bool AviFileReady = File.Exists(PathManager.PreviewSourceFile); if (!AviFileReady && settings.ConvertToAvi) AviFileReady = await Task.Run(() => MediaEncoder.ConvertToAvi(settings.FilePath, PathManager.PreviewSourceFile, true, new ProcessStartOptions(FFmpegDisplayMode.Interface, "Converting to AVI"))) == CompletionStatus.Success; if (AviFileReady && settings.ConvertToAvi) await GetMediaInfo(PathManager.PreviewSourceFile, settings); else { settings.ConvertToAvi = false; await GetMediaInfo(settings.FilePath, settings); } // Auto-calculate crop settings. if (calcAutoCrop) { if (settings.CropLeft == 0 && settings.CropTop == 0 && settings.CropRight == 0 && settings.CropBottom == 0) { Rect AutoCrop = await Task.Run(() => EncoderBusiness.GetAutoCropRect(settings.FilePath, settings.SourceHeight ?? 0, settings.SourceWidth ?? 0, null)); if (settings.CropLeft == 0) settings.CropLeft = AutoCrop.Left; if (settings.CropTop == 0) settings.CropTop = AutoCrop.Top; if (settings.CropRight == 0) settings.CropRight = AutoCrop.Right; if (settings.CropBottom == 0) settings.CropBottom = AutoCrop.Bottom; } } }