diff options
| author | Bond_009 <bond.009@outlook.com> | 2021-01-08 23:03:02 +0100 |
|---|---|---|
| committer | Bond_009 <bond.009@outlook.com> | 2021-02-09 15:12:41 +0100 |
| commit | ed8fce2dced5aa1e3db5426e2bdd0aaf756d0e6b (patch) | |
| tree | c5faae6dbe5ae4fb1a539cb2c332ae58376ed00d /MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs | |
| parent | 995b3700177fce186d3232567e746d69ba54b295 (diff) | |
Use SubtitleEdit to parse subtitles
Diffstat (limited to 'MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs')
| -rw-r--r-- | MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs new file mode 100644 index 000000000..441b9ce33 --- /dev/null +++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs @@ -0,0 +1,45 @@ +#nullable enable + +using System.Globalization; +using System.IO; +using System.Linq; +using System.Threading; +using MediaBrowser.Common.Extensions; +using MediaBrowser.Model.MediaInfo; +using Nikse.SubtitleEdit.Core; + +namespace MediaBrowser.MediaEncoding.Subtitles +{ + /// <summary> + /// SubStation Alpha subtitle parser. + /// </summary> + /// <typeparam name="T">The <see cref="Nikse.SubtitleEdit.Core.SubtitleFormats.SubtitleFormat" />.</typeparam> + public abstract class SubtitleEditParser<T> : ISubtitleParser + where T : Nikse.SubtitleEdit.Core.SubtitleFormats.SubtitleFormat, new() + { + /// <inheritdoc /> + public SubtitleTrackInfo Parse(Stream stream, CancellationToken cancellationToken) + { + var subtitle = new Subtitle(); + var subRip = new T(); + var lines = stream.ReadAllLines().ToList(); + subRip.LoadSubtitle(subtitle, lines, "untitled"); + + var trackInfo = new SubtitleTrackInfo(); + int len = subtitle.Paragraphs.Count; + var trackEvents = new SubtitleTrackEvent[len]; + for (int i = 0; i < len; i++) + { + var p = subtitle.Paragraphs[i]; + trackEvents[i] = new SubtitleTrackEvent(p.Number.ToString(CultureInfo.InvariantCulture), p.Text) + { + StartPositionTicks = p.StartTime.TimeSpan.Ticks, + EndPositionTicks = p.EndTime.TimeSpan.Ticks + }; + } + + trackInfo.TrackEvents = trackEvents; + return trackInfo; + } + } +} |
