Exemplo n.º 1
0
        private Slide[] BuildThumbnailsUnix(ConversionConfiguration config, string slidesFileName)
        {
            var thumbOutDir = Path.Combine(config.OutputDirectory, "thumbs");

            Directory.CreateDirectory(thumbOutDir);

            List <Slide> result = new List <Slide>();

            try
            {
                dynamic projectJson = JsonConvert.DeserializeObject(File.ReadAllText(config.MetadataPath));
                int     currentId   = 0;

                var keyframes = new List <TimeSpan>();
                keyframes.Add(TimeSpan.Zero);
                foreach (string timestamp in projectJson["slides"])
                {
                    keyframes.Add(TimeSpan.Parse(timestamp));
                }

                foreach (var keyframe in keyframes)
                {
                    TimeSpan?nextKeyframe = null;

                    if (keyframes.IndexOf(keyframe) != keyframes.Count - 1)
                    {
                        nextKeyframe = keyframes[keyframes.IndexOf(keyframe) + 1];
                    }
                    else
                    {
                        nextKeyframe = FFmpegHelper.GetMediaLength(config.SlideVideoPath);
                    }

                    string thumbName = FFmpegHelper.ExportThumbnail((float)nextKeyframe.GetValueOrDefault().TotalSeconds - 2.0f, config.SlideVideoPath, thumbOutDir,
                                                                    (currentId++).ToString());

                    var tmpFileName = Path.Combine("/tmp", Path.GetRandomFileName());

                    var process = FFmpegHelper.BuildProcess("tesseract", Path.Combine(thumbOutDir, thumbName) + " \"" + tmpFileName + "\"", false);
                    process.Start();
                    process.WaitForExit();

                    var ocr = File.ReadAllText(tmpFileName + ".txt");
                    File.Delete(tmpFileName + ".txt");

                    var slide = new Slide
                    {
                        StartPosition = (float)keyframe.TotalSeconds + 0.2f,
                        Thumbnail     = "thumbs/" + thumbName,
                        Ocr           = ocr
                    };

                    if (keyframe.Equals(TimeSpan.Zero))
                    {
                        slide.StartPosition = 0.0f;
                    }
                    result.Add(slide);
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
            }

            return(result.ToArray());
        }