Exemple #1
0
        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;
            }

        }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
        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;
            }
        }