コード例 #1
0
        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);
        }
コード例 #2
0
        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
             */
        }
コード例 #3
0
ファイル: AssemblerService.cs プロジェクト: IvanSorokin/Tuto
        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;
        }
コード例 #4
0
ファイル: AssemblerService.cs プロジェクト: IvanSorokin/Tuto
        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
             */
        }