public async Task <ExtractResult> GifExtractRemote(double start, double end, string subs) { var streams = await Ydl.GetAVStreamUrlsAsync(CurrentMediaElement.Id); if (streams == null) { return(new ExtractResult(false, "Youtube-dl failed to get av streams")); } var htmlCtrl = ContentEx.GetFirstHtmlCtrl(); var refs = htmlCtrl?.GetReferences(); var filename = $"{refs?.Title ?? CurrentMediaElement.Id}-{start}-{end}"; var filepath = MediaPlayerFilesystem.ImageDir.CombineFile(filename).FullPath; if (!await Ffmpeg.GifExtract(streams.Video, start, end, filepath)) { return(new ExtractResult(false, "Ffmpeg failed to create gif extract")); } List <ContentBase> contents = new List <ContentBase>(); var htmlContent = subs ?? string.Empty; htmlContent += "\r\n"; htmlContent += $"<img href='{filepath}'>"; var mainHtml = new TextContent(true, htmlContent); contents.Add(mainHtml); refs.Title += $": Gif Extract - {start} -> {end}"; // TODO: Convert to human readable var priority = MediaPlayerState.Instance.Config.DefaultExtractPriority; var res = ContentEx.CreateSMElement(ExpectedElementId, priority, contents, refs, false); return(new ExtractResult(res == CreationResult.Ok, res.Name())); }