diff options
8 files changed, 33 insertions, 26 deletions
diff --git a/Emby.Server.Implementations/Localization/Core/ar.json b/Emby.Server.Implementations/Localization/Core/ar.json index 4245656ff..bd45b0b96 100644 --- a/Emby.Server.Implementations/Localization/Core/ar.json +++ b/Emby.Server.Implementations/Localization/Core/ar.json @@ -1,14 +1,14 @@ { - "Albums": "البومات", + "Albums": "ألبومات", "AppDeviceValues": "تطبيق: {0}, جهاز: {1}", "Application": "تطبيق", - "Artists": "الفنانين", + "Artists": "الفنانون", "AuthenticationSucceededWithUserName": "نجحت عملية التوثيق بـ {0}", "Books": "الكتب", "CameraImageUploadedFrom": "رُفعت صورة الكاميرا الجديدة من {0}", "Channels": "القنوات", "ChapterNameValue": "الفصل {0}", - "Collections": "التجميعات", + "Collections": "المجموعات", "DeviceOfflineWithName": "قُطِع الاتصال ب{0}", "DeviceOnlineWithName": "{0} متصل", "FailedLoginAttemptWithUserName": "محاولة تسجيل الدخول فاشلة من {0}", @@ -130,5 +130,6 @@ "TaskCleanCollectionsAndPlaylists": "حذف المجموعات وقوائم التشغيل", "TaskCleanCollectionsAndPlaylistsDescription": "حذف عناصر من المجموعات وقوائم التشغيل التي لم تعد موجودة.", "TaskAudioNormalization": "تطبيع الصوت", - "TaskAudioNormalizationDescription": "مسح الملفات لتطبيع بيانات الصوت." + "TaskAudioNormalizationDescription": "مسح الملفات لتطبيع بيانات الصوت.", + "TaskDownloadMissingLyrics": "تنزيل عبارات القصيدة" } diff --git a/Emby.Server.Implementations/Localization/Core/sv.json b/Emby.Server.Implementations/Localization/Core/sv.json index f40c4478a..a4e2302d1 100644 --- a/Emby.Server.Implementations/Localization/Core/sv.json +++ b/Emby.Server.Implementations/Localization/Core/sv.json @@ -16,7 +16,7 @@ "Folders": "Mappar", "Genres": "Genrer", "HeaderAlbumArtists": "Albumartister", - "HeaderContinueWatching": "Fortsätt titta på", + "HeaderContinueWatching": "Fortsätt titta", "HeaderFavoriteAlbums": "Favoritalbum", "HeaderFavoriteArtists": "Favoritartister", "HeaderFavoriteEpisodes": "Favoritavsnitt", @@ -130,5 +130,7 @@ "TaskCleanCollectionsAndPlaylists": "Rensa upp samlingar och spellistor", "TaskAudioNormalization": "Ljudnormalisering", "TaskCleanCollectionsAndPlaylistsDescription": "Tar bort objekt från samlingar och spellistor som inte längre finns.", - "TaskAudioNormalizationDescription": "Skannar filer för ljudnormaliseringsdata." + "TaskAudioNormalizationDescription": "Skannar filer för ljudnormaliseringsdata.", + "TaskDownloadMissingLyrics": "Ladda ner saknad låttext", + "TaskDownloadMissingLyricsDescription": "Laddar ner låttexter" } diff --git a/Emby.Server.Implementations/Localization/Core/vi.json b/Emby.Server.Implementations/Localization/Core/vi.json index 4bedfe3b2..32e2f4bab 100644 --- a/Emby.Server.Implementations/Localization/Core/vi.json +++ b/Emby.Server.Implementations/Localization/Core/vi.json @@ -129,5 +129,7 @@ "TaskCleanCollectionsAndPlaylists": "Dọn dẹp bộ sưu tập và danh sách phát", "TaskCleanCollectionsAndPlaylistsDescription": "Xóa các mục khỏi bộ sưu tập và danh sách phát không còn tồn tại.", "TaskAudioNormalization": "Chuẩn Hóa Âm Thanh", - "TaskAudioNormalizationDescription": "Quét tập tin để tìm dữ liệu chuẩn hóa âm thanh." + "TaskAudioNormalizationDescription": "Quét tập tin để tìm dữ liệu chuẩn hóa âm thanh.", + "TaskDownloadMissingLyricsDescription": "Tải xuống lời cho bài hát", + "TaskDownloadMissingLyrics": "Tải xuống lời bị thiếu" } diff --git a/Emby.Server.Implementations/Localization/Core/zh-CN.json b/Emby.Server.Implementations/Localization/Core/zh-CN.json index 808f73793..4bec590fb 100644 --- a/Emby.Server.Implementations/Localization/Core/zh-CN.json +++ b/Emby.Server.Implementations/Localization/Core/zh-CN.json @@ -130,5 +130,7 @@ "TaskCleanCollectionsAndPlaylists": "清理合集和播放列表", "TaskCleanCollectionsAndPlaylistsDescription": "清理合集和播放列表中已不存在的项目。", "TaskAudioNormalization": "音频标准化", - "TaskAudioNormalizationDescription": "扫描文件以寻找音频标准化数据。" + "TaskAudioNormalizationDescription": "扫描文件以寻找音频标准化数据。", + "TaskDownloadMissingLyrics": "下载缺失的歌词", + "TaskDownloadMissingLyricsDescription": "下载歌曲歌词" } diff --git a/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs b/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs index d0bfa1fbe..fa0db0541 100644 --- a/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs +++ b/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs @@ -19,12 +19,12 @@ public static class HlsCodecStringHelpers /// <summary> /// Codec name for AC-3. /// </summary> - public const string AC3 = "mp4a.a5"; + public const string AC3 = "ac-3"; /// <summary> /// Codec name for E-AC-3. /// </summary> - public const string EAC3 = "mp4a.a6"; + public const string EAC3 = "ec-3"; /// <summary> /// Codec name for FLAC. diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index 45013a358..db86a49f6 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -66,6 +66,7 @@ namespace MediaBrowser.Controller.MediaEncoding private readonly Version _minFFmpegReadrateOption = new Version(5, 0); private readonly Version _minFFmpegWorkingVtHwSurface = new Version(7, 0, 1); private readonly Version _minFFmpegDisplayRotationOption = new Version(6, 0); + private readonly Version _minFFmpegAdvancedTonemapMode = new Version(7, 0, 1); private static readonly Regex _validationRegex = new(ValidationRegex, RegexOptions.Compiled); @@ -104,6 +105,9 @@ namespace MediaBrowser.Controller.MediaEncoding "m4v", }; + private static readonly string[] _legacyTonemapModes = new[] { "max", "rgb" }; + private static readonly string[] _advancedTonemapModes = new[] { "lum", "itp" }; + // Set max transcoding channels for encoders that can't handle more than a set amount of channels // AAC, FLAC, ALAC, libopus, libvorbis encoders all support at least 8 channels private static readonly Dictionary<string, int> _audioTranscodeChannelLookup = new(StringComparer.OrdinalIgnoreCase) @@ -3285,13 +3289,15 @@ namespace MediaBrowser.Controller.MediaEncoding { args = "tonemap_{0}=format={1}:p=bt709:t=bt709:m=bt709:tonemap={2}:peak={3}:desat={4}"; - if (string.Equals(options.TonemappingMode, "max", StringComparison.OrdinalIgnoreCase) - || string.Equals(options.TonemappingMode, "rgb", StringComparison.OrdinalIgnoreCase)) + var useLegacyTonemapModes = _mediaEncoder.EncoderVersion >= _minFFmpegOclCuTonemapMode + && _legacyTonemapModes.Contains(options.TonemappingMode, StringComparison.OrdinalIgnoreCase); + + var useAdvancedTonemapModes = _mediaEncoder.EncoderVersion >= _minFFmpegAdvancedTonemapMode + && _advancedTonemapModes.Contains(options.TonemappingMode, StringComparison.OrdinalIgnoreCase); + + if (useLegacyTonemapModes || useAdvancedTonemapModes) { - if (_mediaEncoder.EncoderVersion >= _minFFmpegOclCuTonemapMode) - { - args += ":tonemap_mode={5}"; - } + args += ":tonemap_mode={5}"; } if (options.TonemappingParam != 0) diff --git a/MediaBrowser.MediaEncoding/Encoder/EncodingUtils.cs b/MediaBrowser.MediaEncoding/Encoder/EncodingUtils.cs index c5f500e76..2daeac734 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncodingUtils.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncodingUtils.cs @@ -42,7 +42,7 @@ namespace MediaBrowser.MediaEncoding.Encoder // If there's more than one we'll need to use the concat command if (inputFiles.Count > 1) { - var files = string.Join("|", inputFiles.Select(NormalizePath)); + var files = string.Join('|', inputFiles.Select(NormalizePath)); return string.Format(CultureInfo.InvariantCulture, "concat:\"{0}\"", files); } diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs index d9fe0594f..ba7a14344 100644 --- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs @@ -719,8 +719,6 @@ namespace MediaBrowser.MediaEncoding.Encoder using (var processWrapper = new ProcessWrapper(process, this)) { - bool ranToCompletion; - using (await _thumbnailResourcePool.LockAsync(cancellationToken).ConfigureAwait(false)) { StartProcess(processWrapper); @@ -734,22 +732,18 @@ namespace MediaBrowser.MediaEncoding.Encoder try { await process.WaitForExitAsync(TimeSpan.FromMilliseconds(timeoutMs)).ConfigureAwait(false); - ranToCompletion = true; } - catch (OperationCanceledException) + catch (OperationCanceledException ex) { process.Kill(true); - ranToCompletion = false; + throw new FfmpegException(string.Format(CultureInfo.InvariantCulture, "ffmpeg image extraction timed out for {0} after {1}ms", inputPath, timeoutMs), ex); } } - var exitCode = ranToCompletion ? processWrapper.ExitCode ?? 0 : -1; var file = _fileSystem.GetFileInfo(tempExtractPath); - if (exitCode == -1 || !file.Exists || file.Length == 0) + if (processWrapper.ExitCode > 0 || !file.Exists || file.Length == 0) { - _logger.LogError("ffmpeg image extraction failed for {Path}", inputPath); - throw new FfmpegException(string.Format(CultureInfo.InvariantCulture, "ffmpeg image extraction failed for {0}", inputPath)); } |
