Browse Source

fix vobsub subtitle burn in from media server libraries (#1258)

pull/1259/head
Jason Dove 3 years ago committed by GitHub
parent
commit
7628ec7921
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      CHANGELOG.md
  2. 10
      ErsatzTV.Application/Subtitles/Commands/ExtractEmbeddedSubtitlesHandler.cs
  3. 2
      ErsatzTV.Core/Domain/Metadata/Subtitle.cs
  4. 2
      ErsatzTV.FFmpeg/InputFile.cs

1
CHANGELOG.md

@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Fix bug where deleting a channel would not remove its data from XMLTV - Fix bug where deleting a channel would not remove its data from XMLTV
- Fix colorspace filter for some files with invalid color metadata - Fix colorspace filter for some files with invalid color metadata
- Fix playback of external subtitles on Windows - Fix playback of external subtitles on Windows
- Fix vobsub subtitle burn in from media server libraries
### Changed ### Changed
- Remove duplicate items from smart collections before scheduling - Remove duplicate items from smart collections before scheduling

10
ErsatzTV.Application/Subtitles/Commands/ExtractEmbeddedSubtitlesHandler.cs

@ -177,7 +177,7 @@ public class ExtractEmbeddedSubtitlesHandler : IRequestHandler<ExtractEmbeddedSu
.Filter( .Filter(
em => em.Subtitles.Any( em => em.Subtitles.Any(
s => s.SubtitleKind == SubtitleKind.Embedded && s => s.SubtitleKind == SubtitleKind.Embedded &&
s.Codec != "hdmv_pgs_subtitle" && s.Codec != "dvd_subtitle" && s.Codec != "dvdsub" && s.Codec != "pgssub")) s.Codec != "hdmv_pgs_subtitle" && s.Codec != "dvd_subtitle" && s.Codec != "dvdsub" && s.Codec != "vobsub" && s.Codec != "pgssub"))
.Map(em => em.EpisodeId) .Map(em => em.EpisodeId)
.ToListAsync(cancellationToken); .ToListAsync(cancellationToken);
result.AddRange(episodeIds); result.AddRange(episodeIds);
@ -188,7 +188,7 @@ public class ExtractEmbeddedSubtitlesHandler : IRequestHandler<ExtractEmbeddedSu
.Filter( .Filter(
mm => mm.Subtitles.Any( mm => mm.Subtitles.Any(
s => s.SubtitleKind == SubtitleKind.Embedded && s => s.SubtitleKind == SubtitleKind.Embedded &&
s.Codec != "hdmv_pgs_subtitle" && s.Codec != "dvd_subtitle" && s.Codec != "dvdsub" && s.Codec != "pgssub")) s.Codec != "hdmv_pgs_subtitle" && s.Codec != "dvd_subtitle" && s.Codec != "dvdsub" && s.Codec != "vobsub" && s.Codec != "pgssub"))
.Map(mm => mm.MovieId) .Map(mm => mm.MovieId)
.ToListAsync(cancellationToken); .ToListAsync(cancellationToken);
result.AddRange(movieIds); result.AddRange(movieIds);
@ -199,7 +199,7 @@ public class ExtractEmbeddedSubtitlesHandler : IRequestHandler<ExtractEmbeddedSu
.Filter( .Filter(
mm => mm.Subtitles.Any( mm => mm.Subtitles.Any(
s => s.SubtitleKind == SubtitleKind.Embedded && s => s.SubtitleKind == SubtitleKind.Embedded &&
s.Codec != "hdmv_pgs_subtitle" && s.Codec != "dvd_subtitle" && s.Codec != "dvdsub" && s.Codec != "pgssub")) s.Codec != "hdmv_pgs_subtitle" && s.Codec != "dvd_subtitle" && s.Codec != "dvdsub" && s.Codec != "vobsub" && s.Codec != "pgssub"))
.Map(mm => mm.MusicVideoId) .Map(mm => mm.MusicVideoId)
.ToListAsync(cancellationToken); .ToListAsync(cancellationToken);
result.AddRange(musicVideoIds); result.AddRange(musicVideoIds);
@ -210,7 +210,7 @@ public class ExtractEmbeddedSubtitlesHandler : IRequestHandler<ExtractEmbeddedSu
.Filter( .Filter(
ovm => ovm.Subtitles.Any( ovm => ovm.Subtitles.Any(
s => s.SubtitleKind == SubtitleKind.Embedded && s => s.SubtitleKind == SubtitleKind.Embedded &&
s.Codec != "hdmv_pgs_subtitle" && s.Codec != "dvd_subtitle" && s.Codec != "dvdsub" && s.Codec != "pgssub")) s.Codec != "hdmv_pgs_subtitle" && s.Codec != "dvd_subtitle" && s.Codec != "dvdsub" && s.Codec != "vobsub" && s.Codec != "pgssub"))
.Map(ovm => ovm.OtherVideoId) .Map(ovm => ovm.OtherVideoId)
.ToListAsync(cancellationToken); .ToListAsync(cancellationToken);
result.AddRange(otherVideoIds); result.AddRange(otherVideoIds);
@ -239,7 +239,7 @@ public class ExtractEmbeddedSubtitlesHandler : IRequestHandler<ExtractEmbeddedSu
IEnumerable<Subtitle> subtitles = allSubtitles IEnumerable<Subtitle> subtitles = allSubtitles
.Filter( .Filter(
s => s.SubtitleKind == SubtitleKind.Embedded && s.IsExtracted == false && s => s.SubtitleKind == SubtitleKind.Embedded && s.IsExtracted == false &&
s.Codec != "hdmv_pgs_subtitle" && s.Codec != "dvd_subtitle" && s.Codec != "dvdsub" && s.Codec != "pgssub"); s.Codec != "hdmv_pgs_subtitle" && s.Codec != "dvd_subtitle" && s.Codec != "dvdsub" && s.Codec != "vobsub" && s.Codec != "pgssub");
// find cache paths for each subtitle // find cache paths for each subtitle
foreach (Subtitle subtitle in subtitles) foreach (Subtitle subtitle in subtitles)

2
ErsatzTV.Core/Domain/Metadata/Subtitle.cs

@ -15,7 +15,7 @@ public class Subtitle
public string Path { get; set; } public string Path { get; set; }
public DateTime DateAdded { get; set; } public DateTime DateAdded { get; set; }
public DateTime DateUpdated { get; set; } public DateTime DateUpdated { get; set; }
public bool IsImage => Codec is "hdmv_pgs_subtitle" or "dvd_subtitle" or "dvdsub" or "pgssub"; public bool IsImage => Codec is "hdmv_pgs_subtitle" or "dvd_subtitle" or "dvdsub" or "vobsub" or "pgssub";
public static Subtitle FromMediaStream(MediaStream stream) => public static Subtitle FromMediaStream(MediaStream stream) =>
new() new()

2
ErsatzTV.FFmpeg/InputFile.cs

@ -80,5 +80,5 @@ public record SubtitleInputFile(string Path, IList<MediaStream> SubtitleStreams,
Path, Path,
SubtitleStreams) SubtitleStreams)
{ {
public bool IsImageBased = SubtitleStreams.All(s => s.Codec is "hdmv_pgs_subtitle" or "dvd_subtitle" or "dvdsub" or "pgssub"); public bool IsImageBased = SubtitleStreams.All(s => s.Codec is "hdmv_pgs_subtitle" or "dvd_subtitle" or "dvdsub" or "vobsub" or "pgssub");
} }

Loading…
Cancel
Save