using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Model.Entities; using MediaBrowser.Model.MediaInfo; using System; using System.Collections.Generic; using System.Linq; namespace MediaBrowser.MediaEncoding.Encoder { public static class EncodingUtils { public static string GetInputArgument(List inputFiles, MediaProtocol protocol) { if (protocol == MediaProtocol.Http) { var url = inputFiles.First(); return string.Format("\"{0}\"", url); } if (protocol == MediaProtocol.Rtmp) { var url = inputFiles.First(); return string.Format("\"{0}\"", url); } return GetConcatInputArgument(inputFiles); } /// /// Gets the concat input argument. /// /// The input files. /// System.String. private static string GetConcatInputArgument(IReadOnlyList inputFiles) { // Get all streams // If there's more than one we'll need to use the concat command if (inputFiles.Count > 1) { var files = string.Join("|", inputFiles); return string.Format("concat:\"{0}\"", files); } // Determine the input path for video files return GetFileInputArgument(inputFiles[0]); } /// /// Gets the file input argument. /// /// The path. /// System.String. private static string GetFileInputArgument(string path) { return string.Format("file:\"{0}\"", path); } public static string GetProbeSizeArgument(bool isDvd) { return isDvd ? "-probesize 1G -analyzeduration 200M" : string.Empty; } /// /// Gets the number of audio channels to specify on the command line /// /// The request. /// The audio stream. /// System.Nullable{System.Int32}. public static int? GetNumAudioChannelsParam(EncodingOptions request, MediaStream audioStream) { if (audioStream != null) { var codec = request.AudioCodec ?? string.Empty; if (audioStream.Channels > 2 && codec.IndexOf("wma", StringComparison.OrdinalIgnoreCase) != -1) { // wmav2 currently only supports two channel output return 2; } } if (request.MaxAudioChannels.HasValue) { if (audioStream != null && audioStream.Channels.HasValue) { return Math.Min(request.MaxAudioChannels.Value, audioStream.Channels.Value); } return request.MaxAudioChannels.Value; } return request.AudioChannels; } } }