/// <summary> /// Gets the converted ass path. /// </summary> /// <param name="video">The video.</param> /// <param name="subtitleStream">The subtitle stream.</param> /// <param name="startTimeTicks">The start time ticks.</param> /// <param name="performConversion">if set to <c>true</c> [perform conversion].</param> /// <returns>System.String.</returns> private string GetConvertedAssPath(Video video, MediaStream subtitleStream, long?startTimeTicks, bool performConversion) { // If it's already ass, no conversion neccessary //if (string.Equals(Path.GetExtension(subtitleStream.Path), ".ass", StringComparison.OrdinalIgnoreCase)) //{ // return subtitleStream.Path; //} var offset = TimeSpan.FromTicks(startTimeTicks ?? 0); var path = Kernel.Instance.FFMpegManager.GetSubtitleCachePath(video, subtitleStream.Index, offset, ".ass"); if (performConversion) { try { var parentPath = Path.GetDirectoryName(path); Directory.CreateDirectory(parentPath); var task = MediaEncoder.ConvertTextSubtitleToAss(subtitleStream.Path, path, subtitleStream.Language, offset, CancellationToken.None); Task.WaitAll(task); } catch { return(null); } } return(path); }
/// <summary> /// Gets the converted ass path. /// </summary> /// <param name="video">The video.</param> /// <param name="subtitleStream">The subtitle stream.</param> /// <param name="startTimeTicks">The start time ticks.</param> /// <param name="performConversion">if set to <c>true</c> [perform conversion].</param> /// <returns>System.String.</returns> private string GetConvertedAssPath(Video video, MediaStream subtitleStream, long?startTimeTicks, bool performConversion) { var offset = TimeSpan.FromTicks(startTimeTicks ?? 0); var path = Kernel.Instance.FFMpegManager.GetSubtitleCachePath(video, subtitleStream.Index, offset, ".ass"); if (performConversion && !File.Exists(path)) { try { var parentPath = Path.GetDirectoryName(path); if (!Directory.Exists(parentPath)) { Directory.CreateDirectory(parentPath); } var task = MediaEncoder.ConvertTextSubtitleToAss(subtitleStream.Path, path, subtitleStream.Language, offset, CancellationToken.None); Task.WaitAll(task); } catch { return(null); } } return(path); }