public Boolean demux(SortedList<String, String[]> fileDetails, SortedList<String, Track[]> tracks) { ExtApplication vdubmod = ToolsManager.Instance.getTool("VirtualDubMod"); LogBookController.Instance.addLogLine("Demuxing AVI - Using Vdubmod", LogMessageCategories.Video); MiniProcess proc = new DefaultProcess("Demuxing Avi", fileDetails["name"][0] + "DeMuxingProcess"); ProcessManager.Instance.Process = proc; proc.stdErrDisabled(false); proc.stdOutDisabled(false); try { if (!vdubmod.isInstalled()) vdubmod.download(); LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("demuxingMessage") + " AVI Tracks"); proc.initProcess(); LogBookController.Instance.addLogLine("Writing VirtualDub Script", LogMessageCategories.Video); StreamWriter vcf = File.CreateText(LocationManager.TempFolder + fileDetails["name"][0] + "_demux.vcf"); ; string temp = "VirtualDub.Open(\"" + fileDetails["fileName"][0].Replace("\\", "\\\\") + "\",\"\",0);\r\n"; tracks["video"][0].demuxPath = fileDetails["fileName"][0]; for (int i = 0; i < tracks["audio"].Length; i++) { tracks["audio"][i].demuxPath = LocationManager.TempFolder + fileDetails["name"][0] + "-Audio Track-" + i.ToString() + "." + Codec.Instance.getExtention(tracks["audio"][i].codec); temp += ("VirtualDub.stream[" + i.ToString() + "].Demux(\"" + tracks["audio"][i].demuxPath.Replace("\\", "\\\\") + "\");"); } LogBookController.Instance.addLogLine(temp, LogMessageCategories.Video); vcf.WriteLine(temp); vcf.Close(); proc.setFilename(Path.Combine(vdubmod.getInstallPath(), "VirtualDubMod.exe")); proc.setArguments("/s\"" + LocationManager.TempFolder + fileDetails["name"][0] + "_demux.vcf\" /x"); proc.startProcess(); if (proc.getAbandonStatus()) { LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("demuxingAbortedMessage")); return false; } else LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("demuxingCompleteMessage")); try { if (File.Exists(LocationManager.TempFolder + fileDetails["name"][0] + "-Audio Track-0." + Codec.Instance.getExtention(tracks["audio"][0].codec))) return true; else return false; } catch { return false; } } catch (KeyNotFoundException e) { LogBookController.Instance.addLogLine("Can't find codec: \r\n" + e.Message + "\r\n" + ErrorManager.fetchTrackData(tracks), LogMessageCategories.Error); return false; } }
public Boolean demux(SortedList<String, String[]> fileDetails, SortedList<String, Track[]> tracks) { ExtApplication mp4box = ToolsManager.Instance.getTool("mp4box"); LogBookController.Instance.addLogLine("Demuxing MP4 - Using mp4box", LogMessageCategories.Video); int exitCode = 0; MiniProcess proc = new DefaultProcess("Demuxing MP4", fileDetails["name"][0] + "DeMuxingProcess"); ProcessManager.Instance.Process = proc; proc.stdErrDisabled(false); proc.stdOutDisabled(false); try { if (!mp4box.isInstalled()) mp4box.download(); LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("demuxingmp4Video")); proc.initProcess(); proc.setFilename(Path.Combine(mp4box.getInstallPath(), "MP4Box.exe")); string tempArg; switch (tracks["video"][0].codec) { case "DIV3": case "XVID": case "DIVX": case "DX50": case "DX60": case "V_MS/VFW/FOURCC": case "20": tracks["video"][0].demuxPath = LocationManager.TempFolder + fileDetails["name"][0] + "-Video Track.avi"; tempArg = "\"" + fileDetails["fileName"][0] + "\" -avi 1 -out \"" + LocationManager.TempFolder + fileDetails["name"][0] + "-Video Track\""; break; default: tracks["video"][0].demuxPath = LocationManager.TempFolder + fileDetails["name"][0] + "-Video Track." + Codec.Instance.getExtention(tracks["video"][0].codec); tempArg = "\"" + fileDetails["fileName"][0] + "\" -raw 1 -out \"" + LocationManager.TempFolder + fileDetails["name"][0] + "-Video Track." + Codec.Instance.getExtention(tracks["video"][0].codec) + "\""; break; } proc.setArguments(tempArg); exitCode = proc.startProcess(); if (proc.getAbandonStatus()) return false; if (exitCode != 0) return false; if (tracks["audio"].Length == 0) return true; LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("demuxingmp4Audio")); tracks["audio"][0].demuxPath = LocationManager.TempFolder + fileDetails["name"][0] + "-Audio Track-" + "1" + "." + Codec.Instance.getExtention(tracks["audio"][0].codec); tempArg = "\"" + fileDetails["fileName"][0] + "\" -raw 2 -out \"" + tracks["audio"][0].demuxPath + "\""; proc.setArguments(tempArg); exitCode = proc.startProcess(); LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("demuxingCompleteMessage")); return ProcessManager.hasProcessExitedCorrectly(proc, exitCode); } catch (KeyNotFoundException e) { LogBookController.Instance.addLogLine("Can't find codec: \r\n" + e.Message + "\r\n" + ErrorManager.fetchTrackData(tracks), LogMessageCategories.Error); return false; } }
public Boolean mux( SortedList<String, String[]> fileDetails, SortedList<String, String> encOpts, SortedList<String, Track[]> fileTracks) { try { ExtApplication mp4box = ToolsManager.Instance.getTool("mp4box"); MiniProcess proc = new DefaultProcess("Muxing to MP4", fileDetails["name"][0] + "FileMuxingProcess"); proc.stdErrDisabled(false); proc.stdOutDisabled(false); proc.initProcess(); LogBookController.Instance.addLogLine("Muxing to MP4", LogMessageCategories.Video); LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("muxingMessage") + " MP4"); string args; try { float dar = int.Parse(encOpts["width"]) / int.Parse(encOpts["height"]); float par = int.Parse(fileDetails["width"][0]) / int.Parse(fileDetails["height"][0]); if (dar != par & encOpts["sizeopt"] != "0") { encOpts["width"] = (int.Parse(encOpts["width"]) * dar).ToString(); } } catch { encOpts["width"] = fileDetails["width"][0]; encOpts["height"] = fileDetails["height"][0]; } encOpts.Add("outfile", encOpts["outDIR"] + fileDetails["name"][0] + "_output.mp4"); if (!mp4box.isInstalled()) mp4box.download(); proc.setFilename(Path.Combine(mp4box.getInstallPath(), "mp4box.exe")); args = "-fps " + fileDetails["fps"][0] + " -add \"" + fileTracks["video"][0].encodePath + "#video:name=Video\" "; for (int i = 0; i < fileTracks["audio"].Length; i++) { args += "-add \"" + fileTracks["audio"][i].encodePath + ":lang=" + Language.Instance.getExtention(fileTracks["audio"][i].language) + "\" "; } if (encOpts["hardsubmp4"] == "0") { for (int i = 0; i < fileTracks["subs"].Length; i++) { args += "-add \"" + fileTracks["subs"][i].demuxPath + ":lang=" + Language.Instance.getExtention(fileTracks["subs"][i].language) + "\" "; } } args += "-new \"" + encOpts["outfile"] + "\""; proc.setArguments(args); if (proc.getAbandonStatus()) return false; int exitCode = proc.startProcess(); LogBookController.Instance.addLogLine("Muxing completed", LogMessageCategories.Video); return ProcessManager.hasProcessExitedCorrectly(proc, exitCode); } catch (Exception error) { LogBookController.Instance.addLogLine("Error muxing to MP4. (" + error.Source + ", " + error.Message + ", " + error.Data + ", " + error.ToString() + ")", LogMessageCategories.Error); return false; } }