/// <summary> /// Creates the video track from the image files, taken in a random order /// </summary> /// <param name="video">The track container that will hold the new track</param> /// <param name="imageFiles">The list of image files to add</param> /// <param name="duration">The total duration of the video track</param> /// <param name="width">Frame image width</param> /// <param name="height">Frame image height</param> /// <returns>The new video track</returns> private ITrack CreateVideo(IGroup video, IList <string> imageFiles, double duration, int width, int height) { var videoTrack = video.AddTrack(); if (imageFiles.Any()) { imageFiles = shuffler.Shuffle(imageFiles).ToList(); LogList("Images", imageFiles); var durations = shuffler.GetRandomizedDurations(duration, imageFiles.Count).ToList(); LogList("Durations", durations); var durationSums = durations.RunningSum().ToList(); LogList("DurationSums", durationSums); imageFiles = CreateImageTimeline(imageFiles, duration, EFFECT_DURATION, durationSums).ToList(); LogList("Image list", imageFiles); var images = imageFiles.Select(LoadImage); foreach (var img in images) { var clip = videoTrack.AddImage(img, 0, EFFECT_DURATION); //video.AddEffect(clip.Offset, clip.Duration, GetRandomEffect()); //video.AddTransition(clip.Offset, clip.Duration, CreateWMTFX_Move_SmallerImage("right")); //videoTrack.AddTransition(clip.Offset, clip.Duration, CreateWMTFX_Move_SmallerImage("right")); img.Dispose(); } var previousTime = 0.0; foreach (var time in durationSums) { var clipDuration = time - previousTime; if (time >= 0.5) { var transition = GetRandomTransition(); logger.Log("Adding transition (true): " + transition.TransitionId); video.AddTransition(time - 0.5, 0.5, transition, true); transition = GetRandomTransition(); logger.Log("Adding transition (false): " + transition.TransitionId); video.AddTransition(time, 0.5, transition, false); } //video.AddEffect(previousTime, clipDuration, GetRandomEffect()); //video.AddTransition(previousTime, clipDuration, GetRandomTransition2()); //video.AddTransition(previousTime, clipDuration, CreateWMTFX_Move_SmallerImage("right")); //videoTrack.AddTransition(time - clipDuration, clipDuration / 2, CreateWMTFX_Move_SmallerImage("2"), true); //videoTrack.AddTransition(time - clipDuration / 2, clipDuration / 2, CreateWMTFX_Move_SmallerImage("up"), false); previousTime = time; } } return(videoTrack); }