У меня есть две функции:

        public (int DivisionCount, Timecode LastDivision) CalculateEventLengthDivisionCount(Timecode eventLength)
        {
            int divisionCount = 1; // Начинаем с 1, так как изначально у нас одна часть (оригинальная длительность)

            // Преобразуем 19 секунд в миллисекунды
            const int thresholdMilliseconds = 19000;

            // Пока длительность eventLength больше 19 секунд
            while (eventLength.ToMilliseconds() > thresholdMilliseconds)
            {
                // Делим длительность пополам
                eventLength = new Timecode(eventLength.ToMilliseconds() / 2);
                divisionCount *= 2; // Увеличиваем количество частей в 2 раза
            }

            // Возвращаем количество частей и последнее деление
            return (divisionCount, eventLength);
        }

        public List<VideoInfo> FindNearestVideosByDuration(string folderPath, Timecode eventStart, Timecode eventLength, List<VideoInfo> AlreadySelectedVideos)
        {
            List<VideoInfo> videoInfos = folderAnalizator.GetVideoInfoList(folderPath);
            (int partsCount, Timecode partDuration) = CalculateEventLengthDivisionCount(eventLength);

            if (partsCount == 1)
            {
                foreach (VideoInfo video in videoInfos)
                {
                    video.AbsoluteDurationDifferenceFromEvent = Math.Abs(eventLength.ToMilliseconds() - video.DurationInMilliseconds);
                    video.PercentageDurationDifferenceFromEvent = (video.DurationInMilliseconds - eventLength.ToMilliseconds()) / eventLength.ToMilliseconds() * 100;
                }

                videoInfos = videoInfos.OrderBy(video => video.AbsoluteDurationDifferenceFromEvent).ToList();

                foreach (VideoInfo video in videoInfos)
                {
                    if (video.PercentageDurationDifferenceFromEvent > -15 && video.PercentageDurationDifferenceFromEvent < 40)
                    {
                        Timecode plannedEnd = eventStart + eventLength;
                        int generalVideo = video.GeneralVideo;

                        List<VideoInfo> relevantVideos = AlreadySelectedVideos
                            .Where(v => v.GeneralVideo == generalVideo && v.End.ToMilliseconds() >= eventStart.ToMilliseconds() - 19000)
                            .ToList();

                        double totalDuration = relevantVideos.Sum(v => v.DurationInMilliseconds) + video.DurationInMilliseconds;

                        bool allCopyrightFree = relevantVideos.All(v => v.CopyrightFree) && video.CopyrightFree;

                        if (totalDuration <= 19000 || allCopyrightFree)
                        {
                            return new List<VideoInfo> { video };
                        }
                    }
                }
            }

            else
            {
                List<VideoInfo> selectedVideos = new List<VideoInfo>();
                Timecode currentStart = eventStart;

                for (int i = 0; i < partsCount; i++)
                {
                    foreach (VideoInfo video in videoInfos)
                    {
                        video.AbsoluteDurationDifferenceFromEvent = Math.Abs(partDuration.ToMilliseconds() - video.DurationInMilliseconds);
                    }

                    videoInfos = videoInfos.OrderBy(video => video.AbsoluteDurationDifferenceFromEvent).ToList();

                    foreach (VideoInfo video in videoInfos)
                    {
                        Timecode plannedEnd = currentStart + partDuration;
                        int generalVideo = video.GeneralVideo;

                        List<VideoInfo> relevantVideos = AlreadySelectedVideos.Concat(selectedVideos)
                            .Where(v => v.GeneralVideo == generalVideo && v.End.ToMilliseconds() >= currentStart.ToMilliseconds() - 19000)
                            .ToList();

                        double totalDuration = relevantVideos.Sum(v => v.DurationInMilliseconds) + video.DurationInMilliseconds;

                        bool allCopyrightFree = relevantVideos.All(v => v.CopyrightFree) && video.CopyrightFree;

                        if (totalDuration <= 19000 || allCopyrightFree)
                        {
                            selectedVideos.Add(video);
                            currentStart = plannedEnd;
                            break;
                        }
                    }
                }

                return selectedVideos;
            }

            return new List<VideoInfo>();
        }

Напиши конкретный пример использования функции FindNearestVideosByDuration с учётом следующих входных данных:
Пускай  список AlreadySelectedVideos содержит:
A: GeneralVideo = 1, Start = 0, End = 5000, Duration = 5000, CopyrightFree = true
B: GeneralVideo = 1, Start = 5000, End = 20000, Duration = 15000, CopyrightFree = true

Видео в folderPath:
Видео A: GeneralVideo = 1, Duration = 13000 мс, CopyrightFree = true
Видео B: GeneralVideo = 1, Duration = 14200 мс, CopyrightFree = true
Видео C: GeneralVideo = 2, Duration = 10000 мс, CopyrightFree = false
Видео D: GeneralVideo = 3, Duration = 9900 мс, CopyrightFree = false

eventStart: 20000
eventLength: 30000