private CompletionStatus ExecuteComplex(string src, string dst) { var dstEncode = GetPathWithoutExtension(dst) + "_.mp4"; var dstExtract = GetPathWithoutExtension(dst) + "_.mkv"; var dstAac = GetPathWithoutExtension(dst) + "_.aac"; s_jobId++; CompletionStatus result; _uiManager.Start(this, s_jobId, "Encoding to H264/AAC (Complex)"); var optionsMain = new ProcessOptionsEncoder(s_jobId, "", true); IProcessWorker processMain = null; var taskMain = Task.Run(() => _encoder.EncodeFFmpeg(src, dstEncode, "h264", null, "", optionsMain)); var options = new ProcessOptionsEncoder(s_jobId, "Extracting Audio", false); result = _muxer.ExtractAudio(src, dstExtract, options); if (result == CompletionStatus.Success) { options.Title = "Encoding Audio"; result = _encoder.EncodeFFmpeg(dstExtract, dstAac, null, "aac", null, options, (s, p) => processMain = p.ProcessWorker); } if (result != CompletionStatus.Success) { processMain?.Cancel(); } taskMain.Wait(); var result2 = taskMain.Result; if (result == CompletionStatus.Success && result2 == CompletionStatus.Success) { options.Title = "Muxing Audio and Video"; result = _muxer.Muxe(dstEncode, dstAac, dst, options); } File.Delete(dstEncode); File.Delete(dstExtract); File.Delete(dstAac); _uiManager.Close(s_jobId); return(GetStatus(result, result2)); }
private CompletionStatus ExecuteComplex(string src, string dst) { string DstEncode = GetPathWithoutExtension(dst) + "_.mp4"; string DstExtract = GetPathWithoutExtension(dst) + "_.mkv"; string DstAac = GetPathWithoutExtension(dst) + "_.aac"; jobId++; CompletionStatus Result; ffmpegManagerUI.Start(jobId, "Encoding to H264/AAC (Complex)"); ProcessOptionsFFmpeg OptionsMain = new ProcessOptionsFFmpeg(jobId, "", true); IProcessManager ProcessMain = null; Task <CompletionStatus> TaskMain = Task.Run(() => encoder.Encode(src, "h264", null, "", DstEncode, OptionsMain)); ProcessOptionsFFmpeg Options = new ProcessOptionsFFmpeg(jobId, "Extracting Audio", false); Result = muxer.ExtractAudio(src, DstExtract, Options); if (Result == CompletionStatus.Success) { Options.Title = "Encoding Audio"; Result = encoder.Encode(DstExtract, null, "aac", null, DstAac, Options, (s, p) => ProcessMain = p.ProcessManager); } if (Result != CompletionStatus.Success) { ProcessMain?.Cancel(); } TaskMain.Wait(); CompletionStatus Result2 = TaskMain.Result; if (Result == CompletionStatus.Success && Result2 == CompletionStatus.Success) { Options.Title = "Muxing Audio and Video"; Result = muxer.Muxe(DstEncode, DstAac, dst, Options); } File.Delete(DstEncode); File.Delete(DstExtract); File.Delete(DstAac); ffmpegManagerUI.Stop(jobId); return(Result); }