Beispiel #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);
        }
        public void AddTransitionSetsSwappedInputsProperly()
        {
            using (ITimeline timeline = new DefaultTimeline())
            {
                TransitionDefinition def = StandardTransitions.CreateIris();

                IGroup      group            = timeline.AddAudioGroup();
                ITransition groupTransition1 = group.AddTransition(0, 5, def, false);
                Assert.IsFalse(groupTransition1.SwapInputs);

                ITransition groupTransition2 = group.AddTransition(5, 5, def, true);
                Assert.IsTrue(groupTransition2.SwapInputs);
            }
        }
        public void AddingTransitionsChecksForOverlap()
        {
            using (ITimeline timeline = new DefaultTimeline())
            {
                TransitionDefinition def = StandardTransitions.CreateIris();

                IGroup      group            = timeline.AddAudioGroup();
                ITransition groupTransition1 = group.AddTransition(0, 5, def, false);
                Assert.IsFalse(groupTransition1.SwapInputs);

                ITransition groupTransition2 = group.AddTransition(1, 7, def, true);
                Assert.IsTrue(groupTransition2.SwapInputs);
            }
        }
Beispiel #4
0
        static void Main(string[] args)
        {
            string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Pics");

            using (ITimeline timeline = new DefaultTimeline(30))
            {
                double halfDuration = 1;
                IGroup group        = timeline.AddVideoGroup("video", 30, 32, 1920, 1080);

                ITrack        videoTrack = group.AddTrack();
                List <string> filePaths  = Directory.EnumerateFiles(folderPath, "*.jpg").ToList();
                for (int i = 0; i < filePaths.Count; i++)
                {
                    IClip clip = videoTrack.AddImage(filePaths[i], 0, 10);
                    if (i > 0)
                    {
                        group.AddTransition(clip.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
                        group.AddTransition(clip.Offset, halfDuration, StandardTransitions.CreateFade(), false);
                    }
                }

                string folderPath2 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Audio");
                string audioPath   = Directory.EnumerateFiles(folderPath2, "*.wav").FirstOrDefault(x => x != null);

                ITrack audioTrack = timeline.AddAudioGroup().AddTrack();

                IClip audio = audioTrack.AddAudio(audioPath, 0, videoTrack.Duration);

                audioTrack.AddEffect(0, audio.Duration, StandardEffects.CreateAudioEnvelope(1.0, 1.0, 1.0, audio.Duration));

                using (var renderer = new WindowsMediaRenderer(timeline, "output.wmv", WindowsMediaProfiles.FullHD))
                {
                    renderer.Render();
                }
            }

            Console.WriteLine("Hello World!");
        }
        public void GroupAddTransitionBubblesToTimeline()
        {
            int beforeCount = 0;
            int afterCount  = 0;

            using (ITimeline timeline = new DefaultTimeline(12))
            {
                timeline.AddingTransition += delegate { beforeCount++; };

                timeline.AddedTransition += delegate { afterCount++; };

                IGroup group = timeline.AddAudioGroup();
                group.AddTransition(0, 0, StandardTransitions.CreateFade());
            }

            Assert.AreEqual(1, beforeCount);
            Assert.AreEqual(1, afterCount);
        }
        public void FadeBetweenImages()
        {
            // generates a little slide-show, with audio track and fades between images.

            string outputFile = "FadeBetweenImages.wmv";

            using (ITimeline timeline = new DefaultTimeline())
            {
                IGroup group = timeline.AddVideoGroup(32, 160, 100);

                ITrack videoTrack = group.AddTrack();
                IClip  clip1      = videoTrack.AddImage("image1.jpg", 0, 2); // play first image for a little while
                IClip  clip2      = videoTrack.AddImage("image2.jpg", 0, 2); // and the next
                IClip  clip3      = videoTrack.AddImage("image3.jpg", 0, 2); // and finally the last
                IClip  clip4      = videoTrack.AddImage("image4.jpg", 0, 2); // and finally the last

                double halfDuration = 0.5;

                // fade out and back in
                group.AddTransition(clip2.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
                group.AddTransition(clip2.Offset, halfDuration, StandardTransitions.CreateFade(), false);

                // again
                group.AddTransition(clip3.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
                group.AddTransition(clip3.Offset, halfDuration, StandardTransitions.CreateFade(), false);

                // and again
                group.AddTransition(clip4.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
                group.AddTransition(clip4.Offset, halfDuration, StandardTransitions.CreateFade(), false);

                // add some audio
                ITrack audioTrack = timeline.AddAudioGroup().AddTrack();

                IClip audio =
                    audioTrack.AddAudio("testinput.wav", 0, videoTrack.Duration);

                // create an audio envelope effect, this will:
                // fade the audio from 0% to 100% in 1 second.
                // play at full volume until 1 second before the end of the track
                // fade back out to 0% volume
                audioTrack.AddEffect(0, audio.Duration,
                                     StandardEffects.CreateAudioEnvelope(1.0, 1.0, 1.0, audio.Duration));

                // render our slideshow out to a windows media file
                using (
                    IRenderer renderer =
                        new WindowsMediaRenderer(timeline, outputFile, WindowsMediaProfiles.HighQualityVideo))
                {
                    renderer.Render();
                }
            }
        }
        public void AddTransitionSetsAppropriateContainerAndGroup()
        {
            using (ITimeline timeline = new DefaultTimeline())
            {
                TransitionDefinition def = StandardTransitions.CreateIris();

                IGroup      group           = timeline.AddAudioGroup();
                ITransition groupTransition = group.AddTransition(0, 0, def);
                Assert.AreSame(group, groupTransition.Container);
                Assert.AreSame(group, groupTransition.Group);

                ITrack      track           = group.AddTrack();
                ITransition trackTransition = track.AddTransition(0, 0, def);
                Assert.AreSame(track, trackTransition.Container);
                Assert.AreSame(group, trackTransition.Group);

                IComposition composition           = group.AddComposition();
                ITransition  compositionTransition = composition.AddTransition(0, 0, def);
                Assert.AreSame(composition, compositionTransition.Container);
                Assert.AreSame(group, compositionTransition.Group);
            }
        }
        public void GroupAddTransitionBubblesToTimeline()
        {
            int beforeCount = 0;
            int afterCount  = 0;

            using (ITimeline timeline = new DefaultTimeline(12))
            {
                timeline.BeforeTransitionAdded += new EventHandler(delegate
                {
                    beforeCount++;
                });

                timeline.AfterTransitionAdded += new EventHandler <AfterTransitionAddedEventArgs>(delegate
                {
                    afterCount++;
                });

                IGroup group = timeline.AddAudioGroup();
                group.AddTransition(0, 0, StandardTransitions.CreateFade());
            }

            Assert.AreEqual(1, beforeCount);
            Assert.AreEqual(1, afterCount);
        }
        public void RemoveEvents()
        {
            int count = 0;

            EventHandler increment = delegate { count++; };

            EventHandler <AddedCompositionEventArgs> incrementForAfterCompositionAdded =
                delegate { count++; };

            EventHandler <AddedEffectEventArgs> incrementForAfterEffectAdded =
                delegate { count++; };

            EventHandler <AddedTrackEventArgs> incrementForAfterTrackAdded =
                delegate { count++; };

            EventHandler <AddedTransitionEventArgs> incrementForAfterTransitionAdded =
                delegate { count++; };

            EventHandler <AddedClipEventArgs> incrementForAfterClipAdded =
                delegate { count++; };

            EventHandler <AddedGroupEventArgs> incrementForAfterGroupAdded =
                delegate { count++; };

            using (ITimeline timeline = new DefaultTimeline())
            {
                timeline.AddedComposition += incrementForAfterCompositionAdded;
                timeline.AddedEffect      += incrementForAfterEffectAdded;
                timeline.AddedTrack       += incrementForAfterTrackAdded;
                timeline.AddedTransition  += incrementForAfterTransitionAdded;
                timeline.AddedClip        += incrementForAfterClipAdded;
                timeline.AddedGroup       += incrementForAfterGroupAdded;

                timeline.AddingComposition += increment;
                timeline.AddingEffect      += increment;
                timeline.AddingTrack       += increment;
                timeline.AddingTransition  += increment;
                timeline.AddingClip        += increment;
                timeline.AddingGroup       += increment;

                IGroup group = timeline.AddAudioGroup();
                group.AddComposition();
                group.AddEffect(0, 2, StandardEffects.CreateDefaultBlur());
                group.AddTrack().AddClip("testinput.mp3", GroupMediaType.Audio, InsertPosition.Absolute, 0, 0, 1);
                group.AddTransition(0, 2, StandardTransitions.CreateFade());

                Assert.AreEqual(12, count);
                count = 0;

                timeline.AddedComposition -= incrementForAfterCompositionAdded;
                timeline.AddedEffect      -= incrementForAfterEffectAdded;
                timeline.AddedTrack       -= incrementForAfterTrackAdded;
                timeline.AddedTransition  -= incrementForAfterTransitionAdded;
                timeline.AddedClip        -= incrementForAfterClipAdded;
                timeline.AddedGroup       -= incrementForAfterGroupAdded;

                timeline.AddingComposition -= increment;
                timeline.AddingEffect      -= increment;
                timeline.AddingTrack       -= increment;
                timeline.AddingTransition  -= increment;
                timeline.AddingClip        -= increment;
                timeline.AddingGroup       -= increment;

                IGroup group2 = timeline.AddAudioGroup();
                group2.AddComposition();
                group2.AddEffect(0, 2, StandardEffects.CreateDefaultBlur());
                group2.AddTrack().AddClip("testinput.wav", GroupMediaType.Audio, InsertPosition.Relative, 0, 0, 1);
                group2.AddTransition(2, 2, StandardTransitions.CreateFade());

                Assert.AreEqual(0, count);
            }
        }