public async Task<string> ReMux(string inputfile, string inputs, string subtileargs, Format formats, string audiolanguagecode, string audiolanguage, double initialPercent, double percentIncrement, DownloadInfo dinfo, IProgress<DownloadInfo> progress, CancellationToken token) { int formatcnt = 0; foreach (Format fol in Enum.GetValues(typeof(Format))) { if ((fol & formats) == fol) { formatcnt++; } } percentIncrement /=(2*formatcnt); string size = string.Empty; string intermediatefile = dinfo.FullPath + ".tm2"; foreach (Format fol in Enum.GetValues(typeof(Format))) { if ((fol & formats) == fol) { string ffmpegargs = string.Format(LibSet[FFMPEGArgsS], inputfile, inputs, subtileargs, intermediatefile, fol == Format.Mkv ? string.Empty : "-c:s mov_text ", audiolanguagecode, audiolanguage, fol == Format.Mkv ? "-f matroska" : "-f mp4"); token.ThrowIfCancellationRequested(); dinfo.Percent = initialPercent; initialPercent += percentIncrement; dinfo.Status = "Muxing Video"; progress.Report(dinfo); ShellParser ffm = new ShellParser(); await ffm.Start(LibSet[FFMPEGEXES], ffmpegargs, token); dinfo.Percent = initialPercent; initialPercent += percentIncrement; dinfo.Status = "Unique Hashing"; progress.Report(dinfo); if (fol == Format.Mkv) Matroska.Matroska.MatroskaHash(intermediatefile, dinfo.FullPath + "." + fol.ToExtension()); else Mp4.Mp4.Mp4Hash(intermediatefile, dinfo.FullPath + "." + fol.ToExtension()); try { File.Delete(intermediatefile); } catch (Exception) { // ignored } FileInfo f = new FileInfo(dinfo.FullPath + "." + fol.ToExtension()); if (formatcnt == 1) { size = f.Length.ToString(); } else { size += f.Length.ToString() + " (" + fol.ToExtension() + "), "; } } } try { File.Delete(inputfile); } catch (Exception) { // ignored } if (formatcnt > 1) size = size.Substring(0, size.Length - 2); return size; }