private static List <EpisodesChunks> ListEpisodes(List <StreamChunk> fileChunks) { var test = fileChunks.Any(z => z.StartsNewEpisode); var result = new List <EpisodesChunks>(); var i = 0; while (i < fileChunks.Count) { var last = new EpisodesChunks(); last.episodeNumber = result.Count; result.Add(last); while (i < fileChunks.Count && (!fileChunks[i].StartsNewEpisode || last.chunks.Count == 0)) { last.chunks.Add(fileChunks[i]); i++; } } return(result); }
private AvsNode MakeEpisode(EditorModel model, EpisodesChunks episode) { var chunks = episode.chunks; var avsChunks = new AvsConcatList { Items = new List <AvsNode>() }; var fps = 25; var shift = model.Montage.SynchronizationShift; var currentChunk = chunks[0]; //making cross-fades and merging for (int i = 0; i < chunks.Count; i++) { if (chunks[i].IsNotActive) { continue; } var prevChunk = i >= 1 ? currentChunk : null; currentChunk = chunks[i]; AvsNode currentAvsChunk = AvsNode.NormalizedNode(currentChunk, fps, currentChunk.Mode == Mode.Face, shift); AvsNode prevAvsChunk = avsChunks.Items.Count >= 1 ? avsChunks.Items[avsChunks.Items.Count - 1] : AvsNode.NormalizedNode(chunks[0], fps, false, shift); //Оптимизация face-desktop et cetera if (UseChainProcessing) { var chain = GetChainNodeAndNewIndex(i, chunks, shift, fps); if (chain != null) { currentAvsChunk = chain.Item1; i = chain.Item2; } } if (prevChunk != null && prevChunk.Mode == Mode.Face && currentChunk.Mode == Mode.Face && CrossFadesEnabled) { avsChunks.Items[avsChunks.Items.Count - 1] = new AvsCrossFade { FadeFrom = prevAvsChunk, FadeTo = currentAvsChunk } } ; else if (currentChunk.IsActive) { avsChunks.Items.Add(currentAvsChunk); } currentChunk = chunks[i]; } // intro with fadein and fadeout //var intro = new AvsIntro //{ // VideoReference = model.Locations.Make(model.ChunkFolder, fileChunks[0].ChunkFilename), // ImageFile = model.Locations.IntroImage //}; //var normalizedIntro = AvsNode.NormalizedNode(intro); //var fadedIntro = new AvsFadeIn {Payload = new AvsFadeOut {Payload = normalizedIntro}}; //avsChunks.Items.Insert(0, fadedIntro); // fadeout last item avsChunks.Items[avsChunks.Items.Count - 1] = new AvsFadeOut { Payload = avsChunks.Items[avsChunks.Items.Count - 1] }; //AvsNode resultedAvs = avsChunks; //if (!string.IsNullOrEmpty(File.ReadAllText(model.Locations.GetSrtFile(episode.episodeNumber).FullName))) //{ // resultedAvs = new AvsSubtitle { SrtPath = model.Locations.GetSrtFile(episode.episodeNumber).FullName, Payload = avsChunks }; //} // autolevel // ??? return(avsChunks); // watermark //return new AvsWatermark //{ // Payload = avsChunks, // ImageFile = model.Locations.WatermarkImage //}; /* * add intro * make crossfades * add fadein/fadeout * add autolevel? * add watermark */ }
private static List<EpisodesChunks> ListEpisodes(List<FileChunk> fileChunks) { var test = fileChunks.Any(z => z.StartsNewEpisode); var result = new List<EpisodesChunks>(); var i = 0; while (i < fileChunks.Count) { var last = new EpisodesChunks(); last.episodeNumber = result.Count; result.Add(last); while (i < fileChunks.Count && (!fileChunks[i].StartsNewEpisode || last.chunks.Count == 0)) { last.chunks.Add(fileChunks[i]); i++; } } return result; }
private AvsNode MakeEpisode(EditorModel model, EpisodesChunks episode) { var fileChunks = episode.chunks; var avsChunks = new AvsConcatList { Items = new List<AvsNode>() }; var fps = 25; avsChunks.Items.Add(AvsNode.NormalizedNode(model.Locations.Make(model.ChunkFolder, fileChunks[0].ChunkFilename), fps, fileChunks[0].Mode == Mode.Face)); //making cross-fades for (int i = 1; i < fileChunks.Count; i++) { var currentChunk = fileChunks[i]; var prevChunk = fileChunks[i - 1]; AvsNode currentAvsChunk = AvsNode.NormalizedNode(model.Locations.Make(model.ChunkFolder, currentChunk.ChunkFilename), fps, currentChunk.Mode == Mode.Face); AvsNode prevAvsChunk = avsChunks.Items[avsChunks.Items.Count - 1]; if (prevChunk.Mode == Mode.Face && currentChunk.Mode == Mode.Face) avsChunks.Items[avsChunks.Items.Count - 1] = new AvsCrossFade { FadeFrom = prevAvsChunk, FadeTo = currentAvsChunk }; else avsChunks.Items.Add(currentAvsChunk); } // intro with fadein and fadeout //var intro = new AvsIntro //{ // VideoReference = model.Locations.Make(model.ChunkFolder, fileChunks[0].ChunkFilename), // ImageFile = model.Locations.IntroImage //}; //var normalizedIntro = AvsNode.NormalizedNode(intro); //var fadedIntro = new AvsFadeIn {Payload = new AvsFadeOut {Payload = normalizedIntro}}; //avsChunks.Items.Insert(0, fadedIntro); // fadeout last item avsChunks.Items[avsChunks.Items.Count - 1] = new AvsFadeOut { Payload = avsChunks.Items[avsChunks.Items.Count - 1] }; AvsNode resultedAvs = avsChunks; if (!string.IsNullOrEmpty(File.ReadAllText(model.Locations.GetSrtFile(episode.episodeNumber).FullName))) { resultedAvs = new AvsSubtitle { SrtPath = model.Locations.GetSrtFile(episode.episodeNumber).FullName, Payload = avsChunks }; } // autolevel // ??? return resultedAvs;; // watermark //return new AvsWatermark //{ // Payload = avsChunks, // ImageFile = model.Locations.WatermarkImage //}; /* * add intro * make crossfades * add fadein/fadeout * add autolevel? * add watermark */ }