/// <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); } }
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); } }