You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Sonarr/src/NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoFormatter.cs

119 lines
3.5 KiB

using System;
using System.Globalization;
using System.IO;
using System.Linq;
using NLog;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Instrumentation;
namespace NzbDrone.Core.MediaFiles.MediaInfo
{
public static class MediaInfoFormatter
{
private static readonly Logger Logger = NzbDroneLogger.GetLogger(typeof(MediaInfoFormatter));
public static decimal FormatAudioChannels(MediaInfoModel mediaInfo)
{
var audioChannelPositions = mediaInfo.AudioChannelPositions;
var audioChannelPositionsText = mediaInfo.AudioChannelPositionsText;
var audioChannels = mediaInfo.AudioChannels;
if (audioChannelPositions.IsNullOrWhiteSpace())
{
if (audioChannelPositionsText.IsNullOrWhiteSpace())
{
if (mediaInfo.SchemaRevision >= 3)
{
return audioChannels;
}
return 0;
}
return mediaInfo.AudioChannelPositionsText.ContainsIgnoreCase("LFE") ? audioChannels - 1 + 0.1m : audioChannels;
}
return audioChannelPositions.Replace("Object Based / ", "")
.Split(new string[] { " / " }, StringSplitOptions.None)
.First()
.Split('/')
.Sum(s => decimal.Parse(s, CultureInfo.InvariantCulture));
}
public static string FormatAudioCodec(MediaInfoModel mediaInfo)
{
var audioFormat = mediaInfo.AudioFormat;
if (audioFormat.IsNullOrWhiteSpace())
{
return audioFormat;
}
if (audioFormat == "AC-3")
{
return "AC3";
}
if (audioFormat == "E-AC-3")
{
return "EAC3";
}
if (audioFormat == "AAC")
{
return "AAC";
}
if (audioFormat == "MPEG Audio")
{
return mediaInfo.AudioProfile == "Layer 3" ? "MP3" : audioFormat;
}
if (audioFormat == "DTS")
{
return "DTS";
}
Logger.Error("Unknown audio format: {0}", audioFormat);
return audioFormat;
}
public static string FormatVideoCodec(MediaInfoModel mediaInfo, string sceneName)
{
var videoCodec = mediaInfo.VideoCodec;
if (videoCodec.IsNullOrWhiteSpace())
{
return videoCodec;
}
if (videoCodec == "AVC")
{
return sceneName.IsNotNullOrWhiteSpace() && Path.GetFileNameWithoutExtension(sceneName).Contains("h264")
? "h264"
: "x264";
}
if (videoCodec == "V_MPEGH/ISO/HEVC")
{
return sceneName.IsNotNullOrWhiteSpace() && Path.GetFileNameWithoutExtension(sceneName).Contains("h265")
? "h265"
: "x265";
}
if (videoCodec == "MPEG-2 Video")
{
return "MPEG2";
}
if (videoCodec.Equals("XviD", StringComparison.OrdinalIgnoreCase))
{
return "XviD";
}
Logger.Error("Unknown video codec: {0}", videoCodec);
return videoCodec;
}
}
}