public async Task ExecuteServiceAsync(string subtitleFile, CancellationToken stoppingToken)
        {
            try
            {
                _logger.LogInformation($"Processing {subtitleFile}");

                await ConfirmFileTransferCompleteAsync(subtitleFile);

                string fileContent = GetFileContents(subtitleFile);

                SubtitleInputDto subtitleInputDto =
                    new SubtitleInputDto(fileContent, Path.GetFileName(subtitleFile));

                if (subtitleInputDto.IsValidSrtSubtitleFile() == false)
                {
                    _logger.LogError($"{subtitleFile} is not in a valid format");
                    return;
                }

                SubtitleOutputDto transcriptOutput = CleanSubtitle(subtitleInputDto);

                SaveSubtitleFile(transcriptOutput, _uploadDirectory);
                ArchiveSubtitleFile(subtitleFile, _uploadDirectory);

                _logger.LogInformation($"Finished processing {subtitleFile}");
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.InnerException, ex.Message);
            }
        }
示例#2
0
        public static bool IsValidSrtSubtitleFile(this SubtitleInputDto inputDto)
        {
            if (string.IsNullOrEmpty(inputDto.Input))
            {
                return(false);
            }

            string[] inputLines = inputDto.Input.Split('\n');
            return(inputLines[0].StartsWith("1") == true && inputLines[1].StartsWith("00:") == true);
        }
示例#3
0
        public async Task <IActionResult> CleanSubtitle(SubtitleInputDto inputDto)
        {
            if (inputDto.IsValidSrtSubtitleFile() == false)
            {
                return(BadRequest("Input is not in a valid format"));
            }

            var subtitle = await Task.Run(() => _subtitleService.CleanSubtitle(inputDto));

            return(Ok(subtitle));
        }
        public SubtitleOutputDto CleanSubtitle(SubtitleInputDto inputDto)
        {
            _logger.LogInformation($"Cleaning subtitle file");

            string[] inputLines = inputDto.Input.Split('\n');
            int      counter = 0;
            string   videoString = string.Empty, blogString = string.Empty;

            foreach (var line in inputLines)
            {
                counter = counter >= 4 ? 1 : counter + 1;

                string cleanedLine = line
                                     .Replace("um", string.Empty)
                                     .Replace("uh", string.Empty)
                                     .Replace("[music] you", "[music]")
                                     .Replace("  ", " ")
                                     .Replace("all right", "alright")
                                     .Trim();

                videoString += cleanedLine.ToUpper() + Environment.NewLine;

                if (counter == 3)
                {
                    blogString += cleanedLine + Environment.NewLine;
                }
            }

            blogString = RemoveDuplicatesFromBlogString(blogString);
            blogString = CleanBlogString(blogString);
            blogString = ConvertToSentenceCase(blogString);

            SubtitleOutputDto outputDto = new();

            outputDto.VideoTitle = inputDto.VideoTitle.Replace(FileExtension.Srt, string.Empty);
            outputDto.VideoText  = videoString;
            outputDto.BlogText   = blogString;
            outputDto.BlogWords  = blogString.Split(' ').Length;

            return(outputDto);
        }