public void vidThread(object sender, DoWorkEventArgs e)
        {
            if (sourceList.Count == 0 && insertTransitionClips == false)
            {
                Console.WriteLine("No sources added...");
                return;
            }

            if (File.Exists(OUTPUT_FILE))
            {
                File.Delete(OUTPUT_FILE);
            }

            try
            {
                Directory.CreateDirectory(toolBox.TEMP);
                int endofclips = MAX_CLIPS - 1;
                failed = false;
                for (int i = 0; i < MAX_CLIPS; i++)
                {
                    Console.WriteLine("STARTING CLIP " + "video" + i);
                    if (i == 0 && intro)
                    {
                        MAX_CLIPS++;
                        Console.WriteLine("Intro clip enabled, adding 1 to max clips. New max clips is " + MAX_CLIPS + ".");
                        Console.WriteLine("Done: " + Decimal.Divide(i, MAX_CLIPS));
                        vidThreadWorker.ReportProgress(Convert.ToInt32(Decimal.Divide(i, MAX_CLIPS) * 100, new CultureInfo("en-US")));
                        Console.WriteLine(toolBox.intro);
                        toolBox.copyVideo(toolBox.intro, toolBox.TEMP + "video" + i, width, height);
                    }
                    else
                    {
                        Console.WriteLine("Done: " + Decimal.Divide(i, MAX_CLIPS));
                        vidThreadWorker.ReportProgress(Convert.ToInt32(Decimal.Divide(i, MAX_CLIPS) * 100, new CultureInfo("en-US")));
                        if ((randomInt(0, 15) == 15 && insertTransitionClips == true) || sourceList.Count == 0)
                        {
                            Console.WriteLine("Tryina use a diff source");
                            toolBox.copyVideo(toolBox.SOURCES + effectsFactory.pickSource(), toolBox.TEMP + "video" + i, width, height);
                        }
                        else
                        {
                            string sourceToPick = sourceList[randomInt(0, sourceList.Count - 1)].ToString();
                            Console.WriteLine(sourceToPick);
                            decimal source = decimal.Parse(toolBox.getLength(sourceToPick), NumberStyles.Any, new CultureInfo("en-US"));
                            string  output = source.ToString("0.#########################", new CultureInfo("en-US"));
                            Console.WriteLine(toolBox.getLength(sourceToPick) + " -> " + output + " -> " + double.Parse(output, NumberStyles.Any, new CultureInfo("en-US")));
                            double boy = double.Parse(output, NumberStyles.Any, new CultureInfo("en-US"));
                            Console.WriteLine(boy);
                            double startOfClip = randomDouble(0.0, boy - MAX_STREAM_DURATION);
                            double endOfClip   = startOfClip + randomDouble(MIN_STREAM_DURATION, MAX_STREAM_DURATION);
                            Console.WriteLine("Beginning of clip " + i + ": " + startOfClip.ToString("0.#########################", new CultureInfo("en-US")));
                            Console.WriteLine("Ending of clip " + i + ": " + endOfClip.ToString("0.#########################", new CultureInfo("en-US")) + ", in seconds: ");
                            toolBox.snipVideo(sourceToPick, startOfClip, endOfClip, toolBox.TEMP + "video" + i, width, height);
                        }
                        //Add a random effect to the video
                        int effect = 0;
                        if (pluginTest)
                        {
                            effect = 28;
                        }
                        else
                        {
                            effect = randomInt(0, 27 + pluginCount);
                            if (effect > 0)
                            {
                                Console.WriteLine("STARTING EFFECT ON CLIP " + i + " EFFECT" + effect);
                            }
                        }
                        String clipToWorkWith = toolBox.TEMP + "video" + i + ".mp4";
                        switch (effect)
                        {
                        case 1:
                            if (effect1 == true)
                            {
                                effectsFactory.effect_RandomSound(clipToWorkWith);
                            }
                            break;

                        case 2:
                            if (effect2 == true)
                            {
                                effectsFactory.effect_RandomSoundMute(clipToWorkWith);
                            }
                            break;

                        case 3:
                            if (effect3 == true)
                            {
                                effectsFactory.effect_Reverse(clipToWorkWith);
                            }
                            break;

                        case 4:
                            if (effect4 == true)
                            {
                                effectsFactory.effect_SpeedUp(clipToWorkWith);
                            }
                            break;

                        case 5:
                            if (effect5 == true)
                            {
                                effectsFactory.effect_SlowDown(clipToWorkWith);
                            }
                            break;

                        case 6:
                            if (effect6 == true)
                            {
                                effectsFactory.effect_Chorus(clipToWorkWith);
                            }
                            break;

                        case 7:
                            if (effect7 == true)
                            {
                                effectsFactory.effect_Vibrato(clipToWorkWith);
                            }
                            break;

                        case 8:
                            if (effect8 == true)
                            {
                                effectsFactory.effect_Tremolo(clipToWorkWith);
                            }
                            break;

                        case 9:
                            if (effect9 == true)
                            {
                                effectsFactory.effect_Earrape(clipToWorkWith);
                            }
                            break;

                        case 10:
                            if (effect10 == true)
                            {
                                effectsFactory.effect_SpeedUpHighPitch(clipToWorkWith);
                            }
                            break;

                        case 11:
                            if (effect11 == true)
                            {
                                effectsFactory.effect_SlowDownLowPitch(clipToWorkWith);
                            }
                            break;

                        case 12:
                            if (effect12 == true)
                            {
                                effectsFactory.effect_HighPitch(clipToWorkWith);
                            }
                            break;

                        case 13:
                            if (effect13 == true)
                            {
                                effectsFactory.effect_LowPitch(clipToWorkWith);
                            }
                            break;

                        case 14:
                            if (effect14 == true)
                            {
                                effectsFactory.effect_ForwardReverse(clipToWorkWith);
                            }
                            break;

                        case 15:
                            if (effect15 == true)
                            {
                                effectsFactory.effect_ReverseForward(clipToWorkWith);
                            }
                            break;

                        case 16:
                            if (effect16 == true)
                            {
                                effectsFactory.effect_Pixelate(clipToWorkWith, width, height);
                            }
                            break;

                        case 17:
                            if (effect17 == true)
                            {
                                effectsFactory.effect_BadQuality(clipToWorkWith, width, height);
                            }
                            break;

                        case 18:
                            if (effect18 == true)
                            {
                                effectsFactory.effect_Emboss(clipToWorkWith);
                            }
                            break;

                        case 19:
                            if (effect19 == true)
                            {
                                effectsFactory.effect_SymmetryHorizontal1(clipToWorkWith);
                            }
                            break;

                        case 20:
                            if (effect20 == true)
                            {
                                effectsFactory.effect_SymmetryHorizontal2(clipToWorkWith);
                            }
                            break;

                        case 21:
                            if (effect21 == true)
                            {
                                effectsFactory.effect_SymmetryVertical1(clipToWorkWith);
                            }
                            break;

                        case 22:
                            if (effect22 == true)
                            {
                                effectsFactory.effect_SymmetryVertical2(clipToWorkWith);
                            }
                            break;

                        case 23:
                            if (effect23 == true)
                            {
                                effectsFactory.effect_GMajor(clipToWorkWith);
                            }
                            break;

                        case 24:
                            if (effect24 == true)
                            {
                                effectsFactory.effect_Dance(clipToWorkWith);
                            }
                            break;

                        case 25:
                            if (effect25 == true)
                            {
                                effectsFactory.effect_Squidward(clipToWorkWith, width, height);
                            }
                            break;

                        case 26:
                            if (effect26 == true)
                            {
                                effectsFactory.effect_SpartaRemix(clipToWorkWith, width, height);
                            }
                            break;

                        default:
                            if (effect >= 28 && effect <= 27 + pluginCount)
                            {
                                effectsFactory.effect_Plugin(clipToWorkWith, width, height, plugins[rnd.Next(plugins.Count)]);
                            }
                            break;
                        }
                    }
                }
                if (outro)
                {
                    Console.WriteLine("Outro clip enabled.");
                    Console.WriteLine("Done: " + Decimal.Divide(MAX_CLIPS - 1, MAX_CLIPS));
                    vidThreadWorker.ReportProgress(Convert.ToInt32(Decimal.Divide(MAX_CLIPS - 1, MAX_CLIPS) * 100, new CultureInfo("en-US")));
                    Console.WriteLine(toolBox.outro);
                    Console.WriteLine("STARTING CLIP " + "video" + MAX_CLIPS);
                    toolBox.copyVideo(toolBox.outro, toolBox.TEMP + "video" + MAX_CLIPS, width, height);
                    MAX_CLIPS++;
                }
                toolBox.concatenateVideo(MAX_CLIPS, OUTPUT_FILE);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
                exc    = ex;
                failed = true;
            }
            cleanUp();
            rmDir(toolBox.TEMP);
        }