public Boolean demux(SortedList<String, String[]> fileDetails, SortedList<String, Track[]> tracks) { ExtApplication ogmtools = ToolsManager.Instance.getTool("ogmtools"); LogBookController.Instance.addLogLine("Demuxing OGM - Using OgmTools", LogMessageCategories.Video); MiniProcess proc = new DefaultProcess("Demuxing OGM", fileDetails["name"][0] + "DeMuxingProcess"); ProcessManager.Instance.Process = proc; proc.stdErrDisabled(false); proc.stdOutDisabled(false); try { if (!ogmtools.isInstalled()) ogmtools.download(); LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("demuxingMessage") + " OGM"); proc.initProcess(); proc.setFilename(Path.Combine(ogmtools.getInstallPath(), "OGMDemuxer.exe")); string tempArg = "tracks \"" + fileDetails["fileName"][0] + "\" -p " + tracks["video"][0].id + ":\"" + LocationManager.TempFolder + fileDetails["name"][0] + "-Video Track." + Codec.Instance.getExtention(tracks["video"][0].codec) + "\""; tracks["video"][0].demuxPath = LocationManager.TempFolder + fileDetails["name"][0] + "-Video Track." + Codec.Instance.getExtention(tracks["video"][0].codec); 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); tempArg += " " + tracks["audio"][i].id + ":\"" + tracks["audio"][i].demuxPath + "\""; } for (int i = 0; i < tracks["subs"].Length; i++) { tracks["subs"][i].demuxPath = LocationManager.TempFolder + fileDetails["name"][0] + "-Subtitle Track-" + i.ToString() + "." + Codec.Instance.getExtention(tracks["subs"][i].codec); tempArg += " " + tracks["subs"][i].id + ":\"" + tracks["subs"][i].demuxPath + "\""; } proc.setArguments(tempArg); int exitCode = proc.startProcess(); LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("demuxingCompleteMessage")); if (!ProcessManager.hasProcessExitedCorrectly(proc, exitCode)) return false; if (File.Exists(LocationManager.TempFolder + fileDetails["name"][0] + "-Video Track." + Codec.Instance.getExtention(tracks["video"][0].codec))) return true; else 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 index(SortedList<String, String[]> fileDetails, Track video) { ExtApplication dgavcindex = ToolsManager.Instance.getTool("DGAVCIndex"); ExtApplication dgavcdecode = ToolsManager.Instance.getTool("DGAVCDecode"); if (fileDetails["ext"][0].ToLower().Equals(".avi")) return true; try { MiniProcess proc = new DefaultProcess(LanguageController.Instance.getLanguageString("indexingAvc"), fileDetails["name"][0] + "DGAVCStepProcess"); ProcessManager.Instance.Process = proc; proc.stdErrDisabled(false); proc.stdOutDisabled(false); LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("indexingAvc")); LogBookController.Instance.addLogLine("Started Indexing AVC", LogMessageCategories.Video); proc.initProcess(); if (!dgavcindex.isInstalled()) dgavcindex.download(); if (!dgavcdecode.isInstalled()) dgavcdecode.download(); proc.setFilename(Path.Combine(dgavcindex.getInstallPath(), "DGAVCIndex.exe")); string dgaFile = LocationManager.TempFolder + fileDetails["name"][0] + ".dga"; proc.setArguments("-i \"" + video.demuxPath + "\" -o \"" + dgaFile + "\" -a -h -e"); int exitCode = proc.startProcess(); video.demuxPath = dgaFile; LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("indexingAvcCompleted")); LogBookController.Instance.addLogLine("Finished Indexing AVC", LogMessageCategories.Video); if (!ProcessManager.hasProcessExitedCorrectly(proc, exitCode)) return false; if (File.Exists(dgaFile)) return true; else return false; } catch (Exception error) { LogBookController.Instance.addLogLine("Error indexing AVC. (" + error.Source + ", " + error.Message + ", " + error.Data + ", " + error.ToString() + ")", LogMessageCategories.Error); return false; } }
public Boolean decode(SortedList<String, String[]> fileDetails, int i, Track audio) { try { ExtApplication flac = ToolsManager.Instance.getTool("flac"); MiniProcess proc = new DefaultProcess("Decoding Audio Track (ID = " + (i) + ")", fileDetails["name"][0] + "AudioDecodingProcess"); ProcessManager.Instance.Process = proc; proc.initProcess(); proc.stdErrDisabled(true); proc.stdOutDisabled(true); LogBookController.Instance.addLogLine("Decoding Flac - Using flac", LogMessageCategories.Video); LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("audioDecodingMessage")); String decodedAudio = LocationManager.TempFolder + fileDetails["name"][0] + "-Decoded Audio Track-" + i.ToString() + ".wav"; if (!flac.isInstalled()) flac.download(); proc.setFilename(Path.Combine(flac.getInstallPath(), "flac.exe")); proc.setArguments("-d -o \"" + decodedAudio + "\" \"" + audio.demuxPath + "\""); int exitCode = proc.startProcess(); audio.demuxPath = decodedAudio; LogBookController.Instance.addLogLine("Decoding completed", LogMessageCategories.Video); return ProcessManager.hasProcessExitedCorrectly(proc, exitCode); } catch (Exception error) { LogBookController.Instance.addLogLine("Error decoding audio with Flac. (" + error.Source + ", " + error.Message + ", " + error.Data + ", " + error.ToString() + ")", LogMessageCategories.Error); return false; } }
public bool encode(SortedList<String, String[]> fileDetails, int i, Track audio, SortedList<String, String> EncOpts) { try { ExtApplication lame = ToolsManager.Instance.getTool("lame"); MiniProcess proc = new DefaultProcess(LanguageController.Instance.getLanguageString("audioEncodingTrack") + " (ID = " + (i) + ")", fileDetails["name"][0] + "AudioEncodingProcess"); ProcessManager.Instance.Process = proc; proc.stdErrDisabled(true); proc.stdOutDisabled(false); LogBookController.Instance.addLogLine("Encoding to Lame MP3", LogMessageCategories.Video); proc.initProcess(); proc.setFilename(Path.Combine(lame.getInstallPath(), "lame.exe")); if (!lame.isInstalled()) lame.download(); audio.encodePath = LocationManager.TempFolder + Path.GetFileNameWithoutExtension(audio.demuxPath) + "_output.mp3"; proc.setArguments("--abr " + EncOpts["audbr"] + " -h \"" + audio.demuxPath + "\" \"" + audio.encodePath + "\""); int exitCode = proc.startProcess(); LogBookController.Instance.addLogLine("Encoding audio completed", LogMessageCategories.Video); return ProcessManager.hasProcessExitedCorrectly(proc, exitCode); } catch (Exception error) { LogBookController.Instance.addLogLine("Error encoding audio to Lame MP3. (" + error.Source + ", " + error.Message + ", " + error.Data + ", " + error.ToString() + ")", LogMessageCategories.Error); return false; } }
public Boolean mux(SortedList<String, String[]> fileDetails, SortedList<String, String> encOpts, SortedList<String, Track[]> fileTracks) { try { ExtApplication mkvtoolnix = ToolsManager.Instance.getTool("mkvtoolnix"); MiniProcess proc = new DefaultProcess("Muxing to MKV", fileDetails["name"][0] + "FileMuxingProcess"); proc.stdErrDisabled(false); proc.stdOutDisabled(false); proc.initProcess(); LogBookController.Instance.addLogLine("Muxing to MKV", LogMessageCategories.Video); LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("muxingMessage") + " MKV"); 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.mkv"); if (!mkvtoolnix.isInstalled()) mkvtoolnix.download(); proc.setFilename(Path.Combine(mkvtoolnix.getInstallPath(), "mkvmerge.exe")); string arg1 = ""; if (encOpts.ContainsKey("vfr")) if (!String.IsNullOrEmpty(encOpts["vfr"])) arg1 += "--timecodes 0:\"" + encOpts["vfr"] + "\" "; if (encOpts["advertdisabled"] == "False") arg1 += "--title \"Encoded with MiniCoder\" "; if (File.Exists(LocationManager.TempFolder + "chapters.xml")) arg1 += "--chapters \"" + LocationManager.TempFolder + "chapters.xml\" "; if (File.Exists(LocationManager.TempFolder + "chapters.txt")) arg1 += "--chapters \"" + LocationManager.TempFolder + "chapters.txt\" "; try { args = "-o \"" + encOpts["outfile"] + "\" --default-duration 0:" + fileDetails["fps"][0] + "fps --display-dimensions 0:" + encOpts["width"] + "x" + encOpts["height"] + " " + arg1 + "-d 0 -A -S \"" + fileTracks["video"][0].encodePath + "\" "; } catch { LogBookController.Instance.addLogLine("Error parsing fps", LogMessageCategories.Error); return false; } for (int i = 0; i < fileTracks["audio"].Length; i++) { if (encOpts["audcodec"] == "0") { args += "--aac-is-sbr 1:1 "; args += "--language 1:" + Language.Instance.getExtention(fileTracks["audio"][i].language) + " --track-name 1:\"" + fileTracks["audio"][i].title + "\" -a 1 -D -S \"" + fileTracks["audio"][i].encodePath + "\" "; } else args += "--language 0:" + Language.Instance.getExtention(fileTracks["audio"][i].language) + " --track-name 0:\"" + fileTracks["audio"][i].title + "\" -a 0 -D -S \"" + fileTracks["audio"][i].encodePath + "\" "; } for (int i = 0; i < fileTracks["subs"].Length; i++) { args += "--language 0:" + Language.Instance.getExtention(fileTracks["subs"][i].language) + " --track-name 0:\"" + fileTracks["subs"][i].title + "\" -s 0 -A -D \"" + fileTracks["subs"][i].demuxPath + "\" "; } if (fileTracks.ContainsKey("attachments")) { for (int i = 0; i < fileTracks["attachments"].Length; i++) { if (File.Exists(fileTracks["attachments"][i].demuxPath)) args += "--attachment-mime-type application/x-truetype-font --attachment-name \"" + fileTracks["attachments"][i].title + "\" --attach-file \"" + fileTracks["attachments"][i].demuxPath + "\" "; } } args += "--track-order 0:0,"; for (int i = 0; i < fileTracks["audio"].Length; i++) args += (i + 1).ToString() + ":1,"; int step = fileTracks["audio"].Length + 1; for (int i = 0; i < fileTracks["subs"].Length; i++) args += (i + step).ToString() + ":0,"; proc.setArguments(args); 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 Matroska. (" + error.Source + ", " + error.Message + ", " + error.Data + ", " + error.ToString() + ")", 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 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; } }
private Boolean demuxFile(SortedList<String, String[]> fileDetails, SortedList<String, Track[]> tracks) { MiniProcess proc = new DefaultProcess("Indexing VOB", fileDetails["name"][0] + "DeMuxingProcess"); ProcessManager.Instance.Process = proc; proc.stdErrDisabled(false); proc.stdOutDisabled(false); if (!DGIndex.isInstalled()) DGIndex.download(); string tempArg; LogBookController.Instance.addLogLine("Demuxing VOB - Using DGIndex", LogMessageCategories.Video); LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("demuxingVob")); proc.initProcess(); proc.setFilename(Path.Combine(DGIndex.getInstallPath(), "DGIndex.exe")); tracks["video"][0].demuxPath = LocationManager.TempFolder + fileDetails["name"][0] + "." + Codec.Instance.getExtention(tracks["video"][0].codec); tempArg = "-SD=< -AIF=<" + fileDetails["fileName"][0] + "< -OF=<" + LocationManager.TempFolder + fileDetails["name"][0] + "< -exit -hide -OM=2 -TN=80"; proc.setArguments(tempArg); int exitCode = proc.startProcess(); DirectoryInfo info = new DirectoryInfo(LocationManager.TempFolder); int count = 0; foreach (FileInfo fInfo in info.GetFiles()) { if (fInfo.Extension == ".ac3") tracks["audio"][count++].demuxPath = fInfo.FullName; } LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("demuxingCompleteMessage")); return ProcessManager.hasProcessExitedCorrectly(proc, exitCode); }
public Boolean mux(SortedList<String, String[]> fileDetails, SortedList<String, String> encOpts, SortedList<String, Track[]> fileTracks) { try { ExtApplication ffmpeg = ToolsManager.Instance.getTool("ffmpeg"); LogBookController.Instance.addLogLine("Muxing to AVI", LogMessageCategories.Video); MiniProcess proc = new DefaultProcess("Muxing to AVI", fileDetails["name"][0] + "FileMuxingProcess"); proc.stdErrDisabled(true); proc.stdOutDisabled(false); proc.initProcess(); LogBookController.Instance.setInfoLabel(LanguageController.Instance.getLanguageString("muxingMessage") + " avi..."); 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.avi"); if (!ffmpeg.isInstalled()) ffmpeg.download(); proc.setFilename(Path.Combine(ffmpeg.getInstallPath(), "ffmpeg.exe")); args = "-i \"" + fileTracks["video"][0].encodePath + "\" -vcodec copy -r " + fileDetails["fps"][0] + " -s " + encOpts["width"] + "x" + encOpts["height"] + " "; for (int i = 0; i < fileTracks["audio"].Length; i++) { args += "-i \"" + fileTracks["audio"][i].encodePath + "\" -acodec copy "; } args += "\"" + encOpts["outfile"] + "\""; proc.setArguments(args); int exitCode = proc.startProcess(); LogBookController.Instance.setInfoLabel("Muxing Complete"); LogBookController.Instance.addLogLine("Muxing completed", LogMessageCategories.Video); return ProcessManager.hasProcessExitedCorrectly(proc, exitCode); } catch (Exception error) { LogBookController.Instance.addLogLine("Error muxing to avi. (" + error.Source + ", " + error.Message + ", " + error.Data + ", " + error.ToString() + ")", 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; } }