static int Main(string[] args)
        {
            //Get the filename to the config file
            if (args.Length != 1)
            {
                Console.WriteLine("Invalid usage. Please specify the path to the project file.");
                return(-1);
            }

            //Load project file
            SpectrumVideoProjectConfig project = JsonConvert.DeserializeObject <SpectrumVideoProjectConfig>(File.ReadAllText(args[0]));

            //Begin processing each canvas
            start = DateTime.UtcNow;
            SpectrumVideoCanvasMultithread[] canvases = new SpectrumVideoCanvasMultithread[project.canvases.Count];
            for (int i = 0; i < project.canvases.Count; i++)
            {
                SpectrumVideoCanvasMultithread canvas = new SpectrumVideoCanvasMultithread(project.canvases[i], new FfmpegOutputProvider());
                canvases[i] = canvas;
                canvas.Start();
            }

            //Continuously update the UI
            while (true)
            {
                Console.SetCursorPosition(0, 0);
                for (int i = 0; i < canvases.Length; i++)
                {
                    UpdateLine(canvases[i]);
                }
                Thread.Sleep(10);
            }

            return(0);
        }
        public void LoadNewConfig(SpectrumVideoProjectConfig config, string path = null)
        {
            //Set
            this.config = config;
            this.path   = path;

            //Apply
            canvasList.Configure(config.canvases);
        }