Exemplo n.º 1
0
        /// <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);
        }