aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs
diff options
context:
space:
mode:
authorBond_009 <bond.009@outlook.com>2021-01-08 23:03:02 +0100
committerBond_009 <bond.009@outlook.com>2021-02-09 15:12:41 +0100
commited8fce2dced5aa1e3db5426e2bdd0aaf756d0e6b (patch)
treec5faae6dbe5ae4fb1a539cb2c332ae58376ed00d /MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs
parent995b3700177fce186d3232567e746d69ba54b295 (diff)
Use SubtitleEdit to parse subtitles
Diffstat (limited to 'MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs')
-rw-r--r--MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs45
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;
+ }
+ }
+}