#2407: Prefer MP4-Metadata for episodes

This commit is contained in:
Ulrich Wagner 2020-02-17 14:56:31 +01:00
parent 3bc0ce070d
commit d7f199bb1c
4 changed files with 30 additions and 0 deletions

View File

@ -29,11 +29,13 @@ using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Resolvers;
using MediaBrowser.Controller.Sorting; using MediaBrowser.Controller.Sorting;
using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
@ -2387,6 +2389,7 @@ namespace Emby.Server.Implementations.Library
public bool FillMissingEpisodeNumbersFromPath(Episode episode, bool forceRefresh) public bool FillMissingEpisodeNumbersFromPath(Episode episode, bool forceRefresh)
{ {
var libraryOptions = GetLibraryOptions(episode);
var series = episode.Series; var series = episode.Series;
bool? isAbsoluteNaming = series == null ? false : string.Equals(series.DisplayOrder, "absolute", StringComparison.OrdinalIgnoreCase); bool? isAbsoluteNaming = series == null ? false : string.Equals(series.DisplayOrder, "absolute", StringComparison.OrdinalIgnoreCase);
if (!isAbsoluteNaming.Value) if (!isAbsoluteNaming.Value)
@ -2408,6 +2411,28 @@ namespace Emby.Server.Implementations.Library
episodeInfo = new Naming.TV.EpisodeInfo(); episodeInfo = new Naming.TV.EpisodeInfo();
} }
if (libraryOptions.EnableEmbeddedEpisodeInfos && episodeInfo.Container.ToLowerInvariant() == "mp4") {
// Read from metadata
IMediaEncoder mediaEncoder = _appHost.Resolve<IMediaEncoder>();
var task = mediaEncoder.GetMediaInfo(new MediaInfoRequest
{
MediaSource = episode.GetMediaSources(false).First(),
MediaType = DlnaProfileType.Video,
ExtractChapters = false
}, CancellationToken.None);
task.Wait();
if (task.Result.ParentIndexNumber > 0) {
episodeInfo.SeasonNumber = task.Result.ParentIndexNumber;
}
if (task.Result.IndexNumber > 0) {
episodeInfo.EpisodeNumber = task.Result.IndexNumber;
}
if (!string.IsNullOrEmpty(task.Result.ShowName)) {
episodeInfo.SeriesName = task.Result.ShowName;
}
}
var changed = false; var changed = false;
if (episodeInfo.IsByDate) if (episodeInfo.IsByDate)

View File

@ -112,6 +112,9 @@ namespace MediaBrowser.MediaEncoding.Probing
info.Name = title; info.Name = title;
} }
info.IndexNumber = FFProbeHelpers.GetDictionaryNumericValue(tags, "episode_sort");
info.ParentIndexNumber = FFProbeHelpers.GetDictionaryNumericValue(tags, "season_number");
info.ShowName = FFProbeHelpers.GetDictionaryValue(tags, "show_name");
info.ProductionYear = FFProbeHelpers.GetDictionaryNumericValue(tags, "date"); info.ProductionYear = FFProbeHelpers.GetDictionaryNumericValue(tags, "date");
// Several different forms of retaildate // Several different forms of retaildate

View File

@ -21,6 +21,7 @@ namespace MediaBrowser.Model.Configuration
public bool ImportMissingEpisodes { get; set; } public bool ImportMissingEpisodes { get; set; }
public bool EnableAutomaticSeriesGrouping { get; set; } public bool EnableAutomaticSeriesGrouping { get; set; }
public bool EnableEmbeddedTitles { get; set; } public bool EnableEmbeddedTitles { get; set; }
public bool EnableEmbeddedEpisodeInfos { get; set; }
public int AutomaticRefreshIntervalDays { get; set; } public int AutomaticRefreshIntervalDays { get; set; }

View File

@ -36,6 +36,7 @@ namespace MediaBrowser.Model.MediaInfo
/// <value>The studios.</value> /// <value>The studios.</value>
public string[] Studios { get; set; } public string[] Studios { get; set; }
public string[] Genres { get; set; } public string[] Genres { get; set; }
public string ShowName { get; set; }
public int? IndexNumber { get; set; } public int? IndexNumber { get; set; }
public int? ParentIndexNumber { get; set; } public int? ParentIndexNumber { get; set; }
public int? ProductionYear { get; set; } public int? ProductionYear { get; set; }