/// <summary> /// The get channel count. /// </summary> /// <param name="mixdown"> /// The mixdown. /// </param> /// <returns> /// The System.Int32. /// </returns> private int GetDiscreteChannelCount(Mixdown mixdown) { switch (mixdown) { case Mixdown.Five_2_LFE: case Mixdown.SevenPoint1Channels: return(8); case Mixdown.SixPoint1Channels: return(7); case Mixdown.FivePoint1Channels: return(6); case Mixdown.Mono: case Mixdown.LeftOnly: case Mixdown.RightOnly: return(1); case Mixdown.None: return(0); default: return(2); } }
/// <summary> /// Convert a Mixdown object to HandBrakes native mixdown constant. /// </summary> /// <param name="mixdown"> /// The mixdown. /// </param> /// <returns> /// NativeContstant that represents the mixdown. /// </returns> /// <exception cref="ArgumentException"> /// Thrown for an invalid mixodown. /// </exception> public static int MixdownToNative(Mixdown mixdown) { if (mixdown == Mixdown.Auto) { throw new ArgumentException("Cannot convert Auto to native."); } switch (mixdown) { case Mixdown.None: return(NativeConstants.HB_AMIXDOWN_NONE); case Mixdown.DolbyProLogicII: return(NativeConstants.HB_AMIXDOWN_DOLBYPLII); case Mixdown.DolbySurround: return(NativeConstants.HB_AMIXDOWN_DOLBY); case Mixdown.Mono: return(NativeConstants.HB_AMIXDOWN_MONO); case Mixdown.SixChannelDiscrete: return(NativeConstants.HB_AMIXDOWN_6CH); case Mixdown.Stereo: return(NativeConstants.HB_AMIXDOWN_STEREO); } return(0); }
/// <summary> /// Return the CLI Mixdown name /// </summary> /// <param name="selectedAudio">GUI mixdown name</param> /// <returns>CLI mixdown name</returns> public static string GetCliMixDown(Mixdown selectedAudio) { switch (selectedAudio) { case Mixdown.Auto: case Mixdown.None: return("auto"); case Mixdown.Mono: return("mono"); case Mixdown.Stereo: return("stereo"); case Mixdown.DolbySurround: return("dpl1"); case Mixdown.DolbyProLogicII: return("dpl2"); case Mixdown.SixChannelDiscrete: return("6ch"); default: return("auto"); } }
/// <summary> /// Initializes a new instance of the <see cref="AudioTrack"/> class. /// Copy Constructor /// </summary> /// <param name="track"> /// The track. /// </param> public AudioTrack(AudioTrack track) { this.bitrate = track.Bitrate; this.drc = track.DRC; this.encoder = track.Encoder; this.gain = track.Gain; this.mixDown = track.MixDown; this.sampleRate = track.SampleRate; this.scannedTrack = track.ScannedTrack ?? new Audio(); }
/// <summary> /// Builds an argument string from the settings /// </summary> /// <returns>A string to be used as argument to Handbrake CLI</returns> public string Build() { var sb = new StringBuilder(); sb.Append($"--format {Format} "); if (MaxHeight > 0) { sb.Append($"--maxHeight {MaxHeight} "); } if (MaxWidth > 0) { sb.Append($"--maxWidth {MaxWidth} "); } if (WebOptimize) { sb.Append("--optimize "); } sb.Append($"--modulus {Modulus} "); sb.Append($"--{Anamorphic.Formatted()} "); sb.Append($"--encoder {Encoder} "); sb.Append($"--quality {VideoQuality} "); sb.Append($"--{FrameRateSetting} "); sb.Append($"--rate {FrameRate} "); sb.Append($"--aencoder {AudioEncoder.Formatted()} "); if (AudioEncoder == AudioEncoder.copy) { sb.Append($"--audio-copy-mask {AudioCopyMask.Formatted()} "); } if (AudioEncoder.ToString().StartsWith("copy")) { sb.Append($"--audio-fallback {AudioEncoderFallback.Formatted()} "); } sb.Append($"--mixdown {Mixdown.Formatted()} "); sb.Append($"--arate {AudioSampleRate.Formatted()} "); sb.Append($"--ab {AudioBitrate} "); sb.Append($"--{AudioTracks.Formatted()} "); sb.Append($"--gain {AudioGain} "); sb.Append($"--subtitle none "); if (TwoPass) { sb.Append("--two-pass "); if (TurboTwoPass && (Encoder == Encoder.x264 || Encoder == Encoder.x265)) { sb.Append("--turbo "); } } sb.Append($"--encoder-level {EncoderLevel.Formatted()} "); sb.Append("--verbose 0 "); return(sb.ToString()); }
/// <summary> /// The get low freq channel count. /// </summary> /// <param name="mixdown"> /// The mixdown. /// </param> /// <returns> /// The System.Int32. /// </returns> private int GetLowFreqChannelCount(Mixdown mixdown) { switch (mixdown) { case Mixdown.FivePoint1Channels: case Mixdown.SixPoint1Channels: case Mixdown.SevenPoint1Channels: case Mixdown.Five_2_LFE: return(1); default: return(0); } }
/// <summary> /// Gets the bitrate limits for the given audio codec, sample rate and mixdown. /// </summary> /// <param name="encoder">The audio encoder used.</param> /// <param name="sampleRate">The sample rate used (Hz).</param> /// <param name="mixdown">The mixdown used.</param> /// <returns>Limits on the audio bitrate for the given settings.</returns> public static Limits GetBitrateLimits(AudioEncoder encoder, int sampleRate, Mixdown mixdown) { if (mixdown == Mixdown.Auto) { throw new ArgumentException("Mixdown cannot be Auto."); } int low = 0; int high = 0; HBFunctions.hb_get_audio_bitrate_limits(Converters.AudioEncoderToNative(encoder), sampleRate, Converters.MixdownToNative(mixdown), ref low, ref high); return(new Limits { Low = low, High = high }); }
/// <summary> /// Initializes a new instance of the <see cref="AudioTrack"/> class. /// Copy Constructor /// </summary> /// <param name="track"> /// The track. /// </param> /// <param name="setScannedTrack"> /// The set Scanned Track. /// </param> public AudioTrack(AudioTrack track, bool setScannedTrack) { this.bitrate = track.Bitrate; this.drc = track.DRC; this.encoder = track.Encoder; this.gain = track.Gain; this.mixDown = track.MixDown; this.sampleRate = track.SampleRate; if (setScannedTrack) { this.scannedTrack = track.ScannedTrack ?? new Audio(); } this.TrackName = track.TrackName; this.Quality = track.Quality; // Setup Backing Properties this.encoderRateType = track.EncoderRateType; this.SetupLimits(); }
/// <summary> /// Return the CLI Mixdown name /// </summary> /// <param name="selectedAudio">GUI mixdown name</param> /// <returns>CLI mixdown name</returns> public static string GetCliMixDown(Mixdown selectedAudio) { switch (selectedAudio) { case Mixdown.Auto: case Mixdown.None: return("auto"); case Mixdown.Mono: return("mono"); case Mixdown.LeftOnly: return("left_only"); case Mixdown.RightOnly: return("right_only"); case Mixdown.Stereo: return("stereo"); case Mixdown.DolbySurround: return("dpl1"); case Mixdown.DolbyProLogicII: return("dpl2"); case Mixdown.FivePoint1Channels: return("5point1"); case Mixdown.SixPoint1Channels: return("6point1"); case Mixdown.SevenPoint1Channels: return("7point1"); case Mixdown.Five_2_LFE: return("5_2_lfe"); default: return("auto"); } }
public static int MixdownToNative(Mixdown mixdown) { if (mixdown == Mixdown.Auto) { throw new ArgumentException("Cannot convert Auto to native."); } switch (mixdown) { case Mixdown.DolbyProLogicII: return NativeConstants.HB_AMIXDOWN_DOLBYPLII; case Mixdown.DolbySurround: return NativeConstants.HB_AMIXDOWN_DOLBY; case Mixdown.Mono: return NativeConstants.HB_AMIXDOWN_MONO; case Mixdown.SixChannelDiscrete: return NativeConstants.HB_AMIXDOWN_6CH; case Mixdown.Stereo: return NativeConstants.HB_AMIXDOWN_STEREO; } return 0; }
public static string DisplayMixdown(Mixdown mixdown) { return(mixdownConverter.Convert(mixdown)); }
/// <summary> /// Gets the bitrate limits for the given audio codec, sample rate and mixdown. /// </summary> /// <param name="encoder">The audio encoder used.</param> /// <param name="sampleRate">The sample rate used (Hz).</param> /// <param name="mixdown">The mixdown used.</param> /// <returns>Limits on the audio bitrate for the given settings.</returns> public static Limits GetBitrateLimits(AudioEncoder encoder, int sampleRate, Mixdown mixdown) { if (mixdown == Mixdown.Auto) { throw new ArgumentException("Mixdown cannot be Auto."); } int low = 0; int high = 0; HBFunctions.hb_get_audio_bitrate_limits(Converters.AudioEncoderToNative(encoder), sampleRate, Converters.MixdownToNative(mixdown), ref low, ref high); return new Limits { Low = low, High = high }; }
/// <summary> /// Sanitizes a mixdown given the output codec and input channel layout. /// </summary> /// <param name="mixdown">The desired mixdown.</param> /// <param name="encoder">The output encoder to be used.</param> /// <param name="layout">The input channel layout.</param> /// <returns>A sanitized mixdown value.</returns> public static Mixdown SanitizeMixdown(Mixdown mixdown, AudioEncoder encoder, int layout) { int sanitizedMixdown = HBFunctions.hb_get_best_mixdown(Converters.AudioEncoderToNative(encoder), layout, Converters.MixdownToNative(mixdown)); return Converters.NativeToMixdown(sanitizedMixdown); }
/// <summary> /// Sanitizes an audio bitrate given the output codec, sample rate and mixdown. /// </summary> /// <param name="audioBitrate">The desired audio bitrate.</param> /// <param name="encoder">The output encoder to be used.</param> /// <param name="sampleRate">The output sample rate to be used.</param> /// <param name="mixdown">The mixdown to be used.</param> /// <returns>A sanitized audio bitrate.</returns> public static int SanitizeAudioBitrate(int audioBitrate, AudioEncoder encoder, int sampleRate, Mixdown mixdown) { return HBFunctions.hb_get_best_audio_bitrate(Converters.AudioEncoderToNative(encoder), audioBitrate, sampleRate, Converters.MixdownToNative(mixdown)); }
/// <summary> /// The get low freq channel count. /// </summary> /// <param name="mixdown"> /// The mixdown. /// </param> /// <returns> /// The System.Int32. /// </returns> private int GetLowFreqChannelCount(Mixdown mixdown) { switch (mixdown) { case Mixdown.FivePoint1Channels: case Mixdown.SixPoint1Channels: case Mixdown.SevenPoint1Channels: case Mixdown.Five_2_LFE: return 1; default: return 0; } }
/// <summary> /// Get Appropiate Bitrates for the selected encoder and mixdown. /// </summary> /// <param name="encoder"> /// The encoder. /// </param> /// <param name="mixdown"> /// The mixdown. /// </param> /// <returns> /// A List of valid audio bitrates /// </returns> private IEnumerable<int> GetAppropiateBitrates(AudioEncoder encoder, Mixdown mixdown) { return new ObservableCollection<int> { 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448, 640, 768 }; }
/// <summary> /// Sanitizes a mixdown given the output codec and input channel layout. /// </summary> /// <param name="mixdown">The desired mixdown.</param> /// <param name="encoder">The output encoder to be used.</param> /// <param name="layout">The input channel layout.</param> /// <returns>A sanitized mixdown value.</returns> public static Mixdown SanitizeMixdown(Mixdown mixdown, AudioEncoder encoder, int layout) { int sanitizedMixdown = HBFunctions.hb_get_best_mixdown(Converters.AudioEncoderToNative(encoder), layout, Converters.MixdownToNative(mixdown)); return(Converters.NativeToMixdown(sanitizedMixdown)); }
/// <summary> /// Get Appropiate Bitrates for the selected encoder and mixdown. /// </summary> /// <param name="encoder"> /// The encoder. /// </param> /// <param name="mixdown"> /// The mixdown. /// </param> /// <returns> /// A List of valid audio bitrates /// </returns> private IEnumerable <int> GetAppropiateBitrates(AudioEncoder encoder, Mixdown mixdown) { return(new ObservableCollection <int> { 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448, 640, 768 }); }
public static string DisplayMixdown(Mixdown mixdown) { return mixdownConverter.Convert(mixdown); }
public static string Formatted(this Mixdown mixdown) { return(mixdown.ToString().TrimStart('_').Replace("__", ".")); }
/// <summary> /// Initializes a new instance of the <see cref="AudioTrack"/> class. /// Copy Constructor /// </summary> /// <param name="track"> /// The track. /// </param> public AudioTrack(AudioTrack track) { this.bitrate = track.Bitrate; this.drc = track.DRC; this.encoder = track.Encoder; this.gain = track.Gain; this.mixDown = track.MixDown; this.sampleRate = track.SampleRate; this.scannedTrack = new Audio(); this.trackName = track.TrackName; }
/// <summary> /// Return the CLI Mixdown name /// </summary> /// <param name="selectedAudio">GUI mixdown name</param> /// <returns>CLI mixdown name</returns> public static string GetCliMixDown(Mixdown selectedAudio) { switch (selectedAudio) { case Mixdown.Auto: return "auto"; case Mixdown.Mono: return "mono"; case Mixdown.Stereo: return "stereo"; case Mixdown.DolbySurround: return "dpl1"; case Mixdown.DolbyProLogicII: return "dpl2"; case Mixdown.SixChannelDiscrete: return "6ch"; default: return "auto"; } }
/// <summary> /// Return the CLI Mixdown name /// </summary> /// <param name="selectedAudio">GUI mixdown name</param> /// <returns>CLI mixdown name</returns> public static string GetCliMixDown(Mixdown selectedAudio) { switch (selectedAudio) { case Mixdown.Auto: case Mixdown.None: return "auto"; case Mixdown.Mono: return "mono"; case Mixdown.LeftOnly: return "left_only"; case Mixdown.RightOnly: return "right_only"; case Mixdown.Stereo: return "stereo"; case Mixdown.DolbySurround: return "dpl1"; case Mixdown.DolbyProLogicII: return "dpl2"; case Mixdown.FivePoint1Channels: return "5point1"; case Mixdown.SixPoint1Channels: return "6point1"; case Mixdown.SevenPoint1Channels: return "7point1"; case Mixdown.Five_2_LFE: return "5_2_lfe"; default: return "auto"; } }
/// <summary> /// Sanitizes an audio bitrate given the output codec, sample rate and mixdown. /// </summary> /// <param name="audioBitrate">The desired audio bitrate.</param> /// <param name="encoder">The output encoder to be used.</param> /// <param name="sampleRate">The output sample rate to be used.</param> /// <param name="mixdown">The mixdown to be used.</param> /// <returns>A sanitized audio bitrate.</returns> public static int SanitizeAudioBitrate(int audioBitrate, AudioEncoder encoder, int sampleRate, Mixdown mixdown) { return(HBFunctions.hb_get_best_audio_bitrate(Converters.AudioEncoderToNative(encoder), audioBitrate, sampleRate, Converters.MixdownToNative(mixdown))); }
/// <summary> /// The get channel count. /// </summary> /// <param name="mixdown"> /// The mixdown. /// </param> /// <returns> /// The System.Int32. /// </returns> private int GetDiscreteChannelCount(Mixdown mixdown) { switch (mixdown) { case Mixdown.Five_2_LFE: case Mixdown.SevenPoint1Channels: return 8; case Mixdown.SixPoint1Channels: return 7; case Mixdown.FivePoint1Channels: return 6; case Mixdown.Mono: case Mixdown.LeftOnly: case Mixdown.RightOnly: return 1; case Mixdown.None: return 0; default: return 2; } }