packages feed

amazonka-elastictranscoder-2.0: gen/Amazonka/ElasticTranscoder/Types/VideoParameters.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.ElasticTranscoder.Types.VideoParameters
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.ElasticTranscoder.Types.VideoParameters where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.ElasticTranscoder.Types.PresetWatermark
import qualified Amazonka.Prelude as Prelude

-- | The @VideoParameters@ structure.
--
-- /See:/ 'newVideoParameters' smart constructor.
data VideoParameters = VideoParameters'
  { -- | To better control resolution and aspect ratio of output videos, we
    -- recommend that you use the values @MaxWidth@, @MaxHeight@,
    -- @SizingPolicy@, @PaddingPolicy@, and @DisplayAspectRatio@ instead of
    -- @Resolution@ and @AspectRatio@. The two groups of settings are mutually
    -- exclusive. Do not use them together.
    --
    -- The display aspect ratio of the video in the output file. Valid values
    -- include:
    --
    -- @auto@, @1:1@, @4:3@, @3:2@, @16:9@
    --
    -- If you specify @auto@, Elastic Transcoder tries to preserve the aspect
    -- ratio of the input file.
    --
    -- If you specify an aspect ratio for the output file that differs from
    -- aspect ratio of the input file, Elastic Transcoder adds pillarboxing
    -- (black bars on the sides) or letterboxing (black bars on the top and
    -- bottom) to maintain the aspect ratio of the active region of the video.
    aspectRatio :: Prelude.Maybe Prelude.Text,
    -- | The bit rate of the video stream in the output file, in
    -- kilobits\/second. Valid values depend on the values of @Level@ and
    -- @Profile@. If you specify @auto@, Elastic Transcoder uses the detected
    -- bit rate of the input source. If you specify a value other than @auto@,
    -- we recommend that you specify a value less than or equal to the maximum
    -- H.264-compliant value listed for your level and profile:
    --
    -- /Level - Maximum video bit rate in kilobits\/second (baseline and main
    -- Profile) : maximum video bit rate in kilobits\/second (high Profile)/
    --
    -- -   1 - 64 : 80
    --
    -- -   1b - 128 : 160
    --
    -- -   1.1 - 192 : 240
    --
    -- -   1.2 - 384 : 480
    --
    -- -   1.3 - 768 : 960
    --
    -- -   2 - 2000 : 2500
    --
    -- -   3 - 10000 : 12500
    --
    -- -   3.1 - 14000 : 17500
    --
    -- -   3.2 - 20000 : 25000
    --
    -- -   4 - 20000 : 25000
    --
    -- -   4.1 - 50000 : 62500
    bitRate :: Prelude.Maybe Prelude.Text,
    -- | The video codec for the output file. Valid values include @gif@,
    -- @H.264@, @mpeg2@, @vp8@, and @vp9@. You can only specify @vp8@ and @vp9@
    -- when the container type is @webm@, @gif@ when the container type is
    -- @gif@, and @mpeg2@ when the container type is @mpg@.
    codec :: Prelude.Maybe Prelude.Text,
    -- | __Profile (H.264\/VP8\/VP9 Only)__
    --
    -- The H.264 profile that you want to use for the output file. Elastic
    -- Transcoder supports the following profiles:
    --
    -- -   @baseline@: The profile most commonly used for videoconferencing and
    --     for mobile applications.
    --
    -- -   @main@: The profile used for standard-definition digital TV
    --     broadcasts.
    --
    -- -   @high@: The profile used for high-definition digital TV broadcasts
    --     and for Blu-ray discs.
    --
    -- __Level (H.264 Only)__
    --
    -- The H.264 level that you want to use for the output file. Elastic
    -- Transcoder supports the following levels:
    --
    -- @1@, @1b@, @1.1@, @1.2@, @1.3@, @2@, @2.1@, @2.2@, @3@, @3.1@, @3.2@,
    -- @4@, @4.1@
    --
    -- __MaxReferenceFrames (H.264 Only)__
    --
    -- Applicable only when the value of Video:Codec is H.264. The maximum
    -- number of previously decoded frames to use as a reference for decoding
    -- future frames. Valid values are integers 0 through 16, but we recommend
    -- that you not use a value greater than the following:
    --
    -- @Min(Floor(Maximum decoded picture buffer in macroblocks * 256 \/ (Width in pixels * Height in pixels)), 16)@
    --
    -- where /Width in pixels/ and /Height in pixels/ represent either MaxWidth
    -- and MaxHeight, or Resolution. /Maximum decoded picture buffer in
    -- macroblocks/ depends on the value of the @Level@ object. See the list
    -- below. (A macroblock is a block of pixels measuring 16x16.)
    --
    -- -   1 - 396
    --
    -- -   1b - 396
    --
    -- -   1.1 - 900
    --
    -- -   1.2 - 2376
    --
    -- -   1.3 - 2376
    --
    -- -   2 - 2376
    --
    -- -   2.1 - 4752
    --
    -- -   2.2 - 8100
    --
    -- -   3 - 8100
    --
    -- -   3.1 - 18000
    --
    -- -   3.2 - 20480
    --
    -- -   4 - 32768
    --
    -- -   4.1 - 32768
    --
    -- __MaxBitRate (Optional, H.264\/MPEG2\/VP8\/VP9 only)__
    --
    -- The maximum number of bits per second in a video buffer; the size of the
    -- buffer is specified by @BufferSize@. Specify a value between 16 and
    -- 62,500. You can reduce the bandwidth required to stream a video by
    -- reducing the maximum bit rate, but this also reduces the quality of the
    -- video.
    --
    -- __BufferSize (Optional, H.264\/MPEG2\/VP8\/VP9 only)__
    --
    -- The maximum number of bits in any x seconds of the output video. This
    -- window is commonly 10 seconds, the standard segment duration when
    -- you\'re using FMP4 or MPEG-TS for the container type of the output
    -- video. Specify an integer greater than 0. If you specify @MaxBitRate@
    -- and omit @BufferSize@, Elastic Transcoder sets @BufferSize@ to 10 times
    -- the value of @MaxBitRate@.
    --
    -- __InterlacedMode (Optional, H.264\/MPEG2 Only)__
    --
    -- The interlace mode for the output video.
    --
    -- Interlaced video is used to double the perceived frame rate for a video
    -- by interlacing two fields (one field on every other line, the other
    -- field on the other lines) so that the human eye registers multiple
    -- pictures per frame. Interlacing reduces the bandwidth required for
    -- transmitting a video, but can result in blurred images and flickering.
    --
    -- Valid values include @Progressive@ (no interlacing, top to bottom),
    -- @TopFirst@ (top field first), @BottomFirst@ (bottom field first), and
    -- @Auto@.
    --
    -- If @InterlaceMode@ is not specified, Elastic Transcoder uses
    -- @Progressive@ for the output. If @Auto@ is specified, Elastic Transcoder
    -- interlaces the output.
    --
    -- __ColorSpaceConversionMode (Optional, H.264\/MPEG2 Only)__
    --
    -- The color space conversion Elastic Transcoder applies to the output
    -- video. Color spaces are the algorithms used by the computer to store
    -- information about how to render color. @Bt.601@ is the standard for
    -- standard definition video, while @Bt.709@ is the standard for high
    -- definition video.
    --
    -- Valid values include @None@, @Bt709toBt601@, @Bt601toBt709@, and @Auto@.
    --
    -- If you chose @Auto@ for @ColorSpaceConversionMode@ and your output is
    -- interlaced, your frame rate is one of @23.97@, @24@, @25@, @29.97@,
    -- @50@, or @60@, your @SegmentDuration@ is null, and you are using one of
    -- the resolution changes from the list below, Elastic Transcoder applies
    -- the following color space conversions:
    --
    -- -   /Standard to HD, 720x480 to 1920x1080/ - Elastic Transcoder applies
    --     @Bt601ToBt709@
    --
    -- -   /Standard to HD, 720x576 to 1920x1080/ - Elastic Transcoder applies
    --     @Bt601ToBt709@
    --
    -- -   /HD to Standard, 1920x1080 to 720x480/ - Elastic Transcoder applies
    --     @Bt709ToBt601@
    --
    -- -   /HD to Standard, 1920x1080 to 720x576/ - Elastic Transcoder applies
    --     @Bt709ToBt601@
    --
    -- Elastic Transcoder may change the behavior of the
    -- @ColorspaceConversionMode@ @Auto@ mode in the future. All outputs in a
    -- playlist must use the same @ColorSpaceConversionMode@.
    --
    -- If you do not specify a @ColorSpaceConversionMode@, Elastic Transcoder
    -- does not change the color space of a file. If you are unsure what
    -- @ColorSpaceConversionMode@ was applied to your output file, you can
    -- check the @AppliedColorSpaceConversion@ parameter included in your job
    -- response. If your job does not have an @AppliedColorSpaceConversion@ in
    -- its response, no @ColorSpaceConversionMode@ was applied.
    --
    -- __ChromaSubsampling__
    --
    -- The sampling pattern for the chroma (color) channels of the output
    -- video. Valid values include @yuv420p@ and @yuv422p@.
    --
    -- @yuv420p@ samples the chroma information of every other horizontal and
    -- every other vertical line, @yuv422p@ samples the color information of
    -- every horizontal line and every other vertical line.
    --
    -- __LoopCount (Gif Only)__
    --
    -- The number of times you want the output gif to loop. Valid values
    -- include @Infinite@ and integers between @0@ and @100@, inclusive.
    codecOptions :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The value that Elastic Transcoder adds to the metadata in the output
    -- file.
    displayAspectRatio :: Prelude.Maybe Prelude.Text,
    -- | Applicable only when the value of Video:Codec is one of @H.264@,
    -- @MPEG2@, or @VP8@.
    --
    -- Whether to use a fixed value for @FixedGOP@. Valid values are @true@ and
    -- @false@:
    --
    -- -   @true@: Elastic Transcoder uses the value of @KeyframesMaxDist@ for
    --     the distance between key frames (the number of frames in a group of
    --     pictures, or GOP).
    --
    -- -   @false@: The distance between key frames can vary.
    --
    -- @FixedGOP@ must be set to @true@ for @fmp4@ containers.
    fixedGOP :: Prelude.Maybe Prelude.Text,
    -- | The frames per second for the video stream in the output file. Valid
    -- values include:
    --
    -- @auto@, @10@, @15@, @23.97@, @24@, @25@, @29.97@, @30@, @60@
    --
    -- If you specify @auto@, Elastic Transcoder uses the detected frame rate
    -- of the input source. If you specify a frame rate, we recommend that you
    -- perform the following calculation:
    --
    -- @Frame rate = maximum recommended decoding speed in luma samples\/second \/ (width in pixels * height in pixels)@
    --
    -- where:
    --
    -- -   /width in pixels/ and /height in pixels/ represent the Resolution of
    --     the output video.
    --
    -- -   /maximum recommended decoding speed in Luma samples\/second/ is less
    --     than or equal to the maximum value listed in the following table,
    --     based on the value that you specified for Level.
    --
    -- The maximum recommended decoding speed in Luma samples\/second for each
    -- level is described in the following list (/Level - Decoding speed/):
    --
    -- -   1 - 380160
    --
    -- -   1b - 380160
    --
    -- -   1.1 - 76800
    --
    -- -   1.2 - 1536000
    --
    -- -   1.3 - 3041280
    --
    -- -   2 - 3041280
    --
    -- -   2.1 - 5068800
    --
    -- -   2.2 - 5184000
    --
    -- -   3 - 10368000
    --
    -- -   3.1 - 27648000
    --
    -- -   3.2 - 55296000
    --
    -- -   4 - 62914560
    --
    -- -   4.1 - 62914560
    frameRate :: Prelude.Maybe Prelude.Text,
    -- | Applicable only when the value of Video:Codec is one of @H.264@,
    -- @MPEG2@, or @VP8@.
    --
    -- The maximum number of frames between key frames. Key frames are fully
    -- encoded frames; the frames between key frames are encoded based, in
    -- part, on the content of the key frames. The value is an integer
    -- formatted as a string; valid values are between 1 (every frame is a key
    -- frame) and 100000, inclusive. A higher value results in higher
    -- compression but may also discernibly decrease video quality.
    --
    -- For @Smooth@ outputs, the @FrameRate@ must have a constant ratio to the
    -- @KeyframesMaxDist@. This allows @Smooth@ playlists to switch between
    -- different quality levels while the file is being played.
    --
    -- For example, an input file can have a @FrameRate@ of 30 with a
    -- @KeyframesMaxDist@ of 90. The output file then needs to have a ratio of
    -- 1:3. Valid outputs would have @FrameRate@ of 30, 25, and 10, and
    -- @KeyframesMaxDist@ of 90, 75, and 30, respectively.
    --
    -- Alternately, this can be achieved by setting @FrameRate@ to auto and
    -- having the same values for @MaxFrameRate@ and @KeyframesMaxDist@.
    keyframesMaxDist :: Prelude.Maybe Prelude.Text,
    -- | If you specify @auto@ for @FrameRate@, Elastic Transcoder uses the frame
    -- rate of the input video for the frame rate of the output video. Specify
    -- the maximum frame rate that you want Elastic Transcoder to use when the
    -- frame rate of the input video is greater than the desired maximum frame
    -- rate of the output video. Valid values include: @10@, @15@, @23.97@,
    -- @24@, @25@, @29.97@, @30@, @60@.
    maxFrameRate :: Prelude.Maybe Prelude.Text,
    -- | The maximum height of the output video in pixels. If you specify @auto@,
    -- Elastic Transcoder uses 1080 (Full HD) as the default value. If you
    -- specify a numeric value, enter an even integer between 96 and 3072.
    maxHeight :: Prelude.Maybe Prelude.Text,
    -- | The maximum width of the output video in pixels. If you specify @auto@,
    -- Elastic Transcoder uses 1920 (Full HD) as the default value. If you
    -- specify a numeric value, enter an even integer between 128 and 4096.
    maxWidth :: Prelude.Maybe Prelude.Text,
    -- | When you set @PaddingPolicy@ to @Pad@, Elastic Transcoder may add black
    -- bars to the top and bottom and\/or left and right sides of the output
    -- video to make the total size of the output video match the values that
    -- you specified for @MaxWidth@ and @MaxHeight@.
    paddingPolicy :: Prelude.Maybe Prelude.Text,
    -- | To better control resolution and aspect ratio of output videos, we
    -- recommend that you use the values @MaxWidth@, @MaxHeight@,
    -- @SizingPolicy@, @PaddingPolicy@, and @DisplayAspectRatio@ instead of
    -- @Resolution@ and @AspectRatio@. The two groups of settings are mutually
    -- exclusive. Do not use them together.
    --
    -- The width and height of the video in the output file, in pixels. Valid
    -- values are @auto@ and /width/ x /height/:
    --
    -- -   @auto@: Elastic Transcoder attempts to preserve the width and height
    --     of the input file, subject to the following rules.
    --
    -- -   @ @/@width@/@ x @/@height@/@ @: The width and height of the output
    --     video in pixels.
    --
    -- Note the following about specifying the width and height:
    --
    -- -   The width must be an even integer between 128 and 4096, inclusive.
    --
    -- -   The height must be an even integer between 96 and 3072, inclusive.
    --
    -- -   If you specify a resolution that is less than the resolution of the
    --     input file, Elastic Transcoder rescales the output file to the lower
    --     resolution.
    --
    -- -   If you specify a resolution that is greater than the resolution of
    --     the input file, Elastic Transcoder rescales the output to the higher
    --     resolution.
    --
    -- -   We recommend that you specify a resolution for which the product of
    --     width and height is less than or equal to the applicable value in
    --     the following list (/List - Max width x height value/):
    --
    --     -   1 - 25344
    --
    --     -   1b - 25344
    --
    --     -   1.1 - 101376
    --
    --     -   1.2 - 101376
    --
    --     -   1.3 - 101376
    --
    --     -   2 - 101376
    --
    --     -   2.1 - 202752
    --
    --     -   2.2 - 404720
    --
    --     -   3 - 404720
    --
    --     -   3.1 - 921600
    --
    --     -   3.2 - 1310720
    --
    --     -   4 - 2097152
    --
    --     -   4.1 - 2097152
    resolution :: Prelude.Maybe Prelude.Text,
    -- | Specify one of the following values to control scaling of the output
    -- video:
    --
    -- -   @Fit@: Elastic Transcoder scales the output video so it matches the
    --     value that you specified in either @MaxWidth@ or @MaxHeight@ without
    --     exceeding the other value.
    --
    -- -   @Fill@: Elastic Transcoder scales the output video so it matches the
    --     value that you specified in either @MaxWidth@ or @MaxHeight@ and
    --     matches or exceeds the other value. Elastic Transcoder centers the
    --     output video and then crops it in the dimension (if any) that
    --     exceeds the maximum value.
    --
    -- -   @Stretch@: Elastic Transcoder stretches the output video to match
    --     the values that you specified for @MaxWidth@ and @MaxHeight@. If the
    --     relative proportions of the input video and the output video are
    --     different, the output video will be distorted.
    --
    -- -   @Keep@: Elastic Transcoder does not scale the output video. If
    --     either dimension of the input video exceeds the values that you
    --     specified for @MaxWidth@ and @MaxHeight@, Elastic Transcoder crops
    --     the output video.
    --
    -- -   @ShrinkToFit@: Elastic Transcoder scales the output video down so
    --     that its dimensions match the values that you specified for at least
    --     one of @MaxWidth@ and @MaxHeight@ without exceeding either value. If
    --     you specify this option, Elastic Transcoder does not scale the video
    --     up.
    --
    -- -   @ShrinkToFill@: Elastic Transcoder scales the output video down so
    --     that its dimensions match the values that you specified for at least
    --     one of @MaxWidth@ and @MaxHeight@ without dropping below either
    --     value. If you specify this option, Elastic Transcoder does not scale
    --     the video up.
    sizingPolicy :: Prelude.Maybe Prelude.Text,
    -- | Settings for the size, location, and opacity of graphics that you want
    -- Elastic Transcoder to overlay over videos that are transcoded using this
    -- preset. You can specify settings for up to four watermarks. Watermarks
    -- appear in the specified size and location, and with the specified
    -- opacity for the duration of the transcoded video.
    --
    -- Watermarks can be in .png or .jpg format. If you want to display a
    -- watermark that is not rectangular, use the .png format, which supports
    -- transparency.
    --
    -- When you create a job that uses this preset, you specify the .png or
    -- .jpg graphics that you want Elastic Transcoder to include in the
    -- transcoded videos. You can specify fewer graphics in the job than you
    -- specify watermark settings in the preset, which allows you to use the
    -- same preset for up to four watermarks that have different dimensions.
    watermarks :: Prelude.Maybe [PresetWatermark]
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'VideoParameters' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'aspectRatio', 'videoParameters_aspectRatio' - To better control resolution and aspect ratio of output videos, we
-- recommend that you use the values @MaxWidth@, @MaxHeight@,
-- @SizingPolicy@, @PaddingPolicy@, and @DisplayAspectRatio@ instead of
-- @Resolution@ and @AspectRatio@. The two groups of settings are mutually
-- exclusive. Do not use them together.
--
-- The display aspect ratio of the video in the output file. Valid values
-- include:
--
-- @auto@, @1:1@, @4:3@, @3:2@, @16:9@
--
-- If you specify @auto@, Elastic Transcoder tries to preserve the aspect
-- ratio of the input file.
--
-- If you specify an aspect ratio for the output file that differs from
-- aspect ratio of the input file, Elastic Transcoder adds pillarboxing
-- (black bars on the sides) or letterboxing (black bars on the top and
-- bottom) to maintain the aspect ratio of the active region of the video.
--
-- 'bitRate', 'videoParameters_bitRate' - The bit rate of the video stream in the output file, in
-- kilobits\/second. Valid values depend on the values of @Level@ and
-- @Profile@. If you specify @auto@, Elastic Transcoder uses the detected
-- bit rate of the input source. If you specify a value other than @auto@,
-- we recommend that you specify a value less than or equal to the maximum
-- H.264-compliant value listed for your level and profile:
--
-- /Level - Maximum video bit rate in kilobits\/second (baseline and main
-- Profile) : maximum video bit rate in kilobits\/second (high Profile)/
--
-- -   1 - 64 : 80
--
-- -   1b - 128 : 160
--
-- -   1.1 - 192 : 240
--
-- -   1.2 - 384 : 480
--
-- -   1.3 - 768 : 960
--
-- -   2 - 2000 : 2500
--
-- -   3 - 10000 : 12500
--
-- -   3.1 - 14000 : 17500
--
-- -   3.2 - 20000 : 25000
--
-- -   4 - 20000 : 25000
--
-- -   4.1 - 50000 : 62500
--
-- 'codec', 'videoParameters_codec' - The video codec for the output file. Valid values include @gif@,
-- @H.264@, @mpeg2@, @vp8@, and @vp9@. You can only specify @vp8@ and @vp9@
-- when the container type is @webm@, @gif@ when the container type is
-- @gif@, and @mpeg2@ when the container type is @mpg@.
--
-- 'codecOptions', 'videoParameters_codecOptions' - __Profile (H.264\/VP8\/VP9 Only)__
--
-- The H.264 profile that you want to use for the output file. Elastic
-- Transcoder supports the following profiles:
--
-- -   @baseline@: The profile most commonly used for videoconferencing and
--     for mobile applications.
--
-- -   @main@: The profile used for standard-definition digital TV
--     broadcasts.
--
-- -   @high@: The profile used for high-definition digital TV broadcasts
--     and for Blu-ray discs.
--
-- __Level (H.264 Only)__
--
-- The H.264 level that you want to use for the output file. Elastic
-- Transcoder supports the following levels:
--
-- @1@, @1b@, @1.1@, @1.2@, @1.3@, @2@, @2.1@, @2.2@, @3@, @3.1@, @3.2@,
-- @4@, @4.1@
--
-- __MaxReferenceFrames (H.264 Only)__
--
-- Applicable only when the value of Video:Codec is H.264. The maximum
-- number of previously decoded frames to use as a reference for decoding
-- future frames. Valid values are integers 0 through 16, but we recommend
-- that you not use a value greater than the following:
--
-- @Min(Floor(Maximum decoded picture buffer in macroblocks * 256 \/ (Width in pixels * Height in pixels)), 16)@
--
-- where /Width in pixels/ and /Height in pixels/ represent either MaxWidth
-- and MaxHeight, or Resolution. /Maximum decoded picture buffer in
-- macroblocks/ depends on the value of the @Level@ object. See the list
-- below. (A macroblock is a block of pixels measuring 16x16.)
--
-- -   1 - 396
--
-- -   1b - 396
--
-- -   1.1 - 900
--
-- -   1.2 - 2376
--
-- -   1.3 - 2376
--
-- -   2 - 2376
--
-- -   2.1 - 4752
--
-- -   2.2 - 8100
--
-- -   3 - 8100
--
-- -   3.1 - 18000
--
-- -   3.2 - 20480
--
-- -   4 - 32768
--
-- -   4.1 - 32768
--
-- __MaxBitRate (Optional, H.264\/MPEG2\/VP8\/VP9 only)__
--
-- The maximum number of bits per second in a video buffer; the size of the
-- buffer is specified by @BufferSize@. Specify a value between 16 and
-- 62,500. You can reduce the bandwidth required to stream a video by
-- reducing the maximum bit rate, but this also reduces the quality of the
-- video.
--
-- __BufferSize (Optional, H.264\/MPEG2\/VP8\/VP9 only)__
--
-- The maximum number of bits in any x seconds of the output video. This
-- window is commonly 10 seconds, the standard segment duration when
-- you\'re using FMP4 or MPEG-TS for the container type of the output
-- video. Specify an integer greater than 0. If you specify @MaxBitRate@
-- and omit @BufferSize@, Elastic Transcoder sets @BufferSize@ to 10 times
-- the value of @MaxBitRate@.
--
-- __InterlacedMode (Optional, H.264\/MPEG2 Only)__
--
-- The interlace mode for the output video.
--
-- Interlaced video is used to double the perceived frame rate for a video
-- by interlacing two fields (one field on every other line, the other
-- field on the other lines) so that the human eye registers multiple
-- pictures per frame. Interlacing reduces the bandwidth required for
-- transmitting a video, but can result in blurred images and flickering.
--
-- Valid values include @Progressive@ (no interlacing, top to bottom),
-- @TopFirst@ (top field first), @BottomFirst@ (bottom field first), and
-- @Auto@.
--
-- If @InterlaceMode@ is not specified, Elastic Transcoder uses
-- @Progressive@ for the output. If @Auto@ is specified, Elastic Transcoder
-- interlaces the output.
--
-- __ColorSpaceConversionMode (Optional, H.264\/MPEG2 Only)__
--
-- The color space conversion Elastic Transcoder applies to the output
-- video. Color spaces are the algorithms used by the computer to store
-- information about how to render color. @Bt.601@ is the standard for
-- standard definition video, while @Bt.709@ is the standard for high
-- definition video.
--
-- Valid values include @None@, @Bt709toBt601@, @Bt601toBt709@, and @Auto@.
--
-- If you chose @Auto@ for @ColorSpaceConversionMode@ and your output is
-- interlaced, your frame rate is one of @23.97@, @24@, @25@, @29.97@,
-- @50@, or @60@, your @SegmentDuration@ is null, and you are using one of
-- the resolution changes from the list below, Elastic Transcoder applies
-- the following color space conversions:
--
-- -   /Standard to HD, 720x480 to 1920x1080/ - Elastic Transcoder applies
--     @Bt601ToBt709@
--
-- -   /Standard to HD, 720x576 to 1920x1080/ - Elastic Transcoder applies
--     @Bt601ToBt709@
--
-- -   /HD to Standard, 1920x1080 to 720x480/ - Elastic Transcoder applies
--     @Bt709ToBt601@
--
-- -   /HD to Standard, 1920x1080 to 720x576/ - Elastic Transcoder applies
--     @Bt709ToBt601@
--
-- Elastic Transcoder may change the behavior of the
-- @ColorspaceConversionMode@ @Auto@ mode in the future. All outputs in a
-- playlist must use the same @ColorSpaceConversionMode@.
--
-- If you do not specify a @ColorSpaceConversionMode@, Elastic Transcoder
-- does not change the color space of a file. If you are unsure what
-- @ColorSpaceConversionMode@ was applied to your output file, you can
-- check the @AppliedColorSpaceConversion@ parameter included in your job
-- response. If your job does not have an @AppliedColorSpaceConversion@ in
-- its response, no @ColorSpaceConversionMode@ was applied.
--
-- __ChromaSubsampling__
--
-- The sampling pattern for the chroma (color) channels of the output
-- video. Valid values include @yuv420p@ and @yuv422p@.
--
-- @yuv420p@ samples the chroma information of every other horizontal and
-- every other vertical line, @yuv422p@ samples the color information of
-- every horizontal line and every other vertical line.
--
-- __LoopCount (Gif Only)__
--
-- The number of times you want the output gif to loop. Valid values
-- include @Infinite@ and integers between @0@ and @100@, inclusive.
--
-- 'displayAspectRatio', 'videoParameters_displayAspectRatio' - The value that Elastic Transcoder adds to the metadata in the output
-- file.
--
-- 'fixedGOP', 'videoParameters_fixedGOP' - Applicable only when the value of Video:Codec is one of @H.264@,
-- @MPEG2@, or @VP8@.
--
-- Whether to use a fixed value for @FixedGOP@. Valid values are @true@ and
-- @false@:
--
-- -   @true@: Elastic Transcoder uses the value of @KeyframesMaxDist@ for
--     the distance between key frames (the number of frames in a group of
--     pictures, or GOP).
--
-- -   @false@: The distance between key frames can vary.
--
-- @FixedGOP@ must be set to @true@ for @fmp4@ containers.
--
-- 'frameRate', 'videoParameters_frameRate' - The frames per second for the video stream in the output file. Valid
-- values include:
--
-- @auto@, @10@, @15@, @23.97@, @24@, @25@, @29.97@, @30@, @60@
--
-- If you specify @auto@, Elastic Transcoder uses the detected frame rate
-- of the input source. If you specify a frame rate, we recommend that you
-- perform the following calculation:
--
-- @Frame rate = maximum recommended decoding speed in luma samples\/second \/ (width in pixels * height in pixels)@
--
-- where:
--
-- -   /width in pixels/ and /height in pixels/ represent the Resolution of
--     the output video.
--
-- -   /maximum recommended decoding speed in Luma samples\/second/ is less
--     than or equal to the maximum value listed in the following table,
--     based on the value that you specified for Level.
--
-- The maximum recommended decoding speed in Luma samples\/second for each
-- level is described in the following list (/Level - Decoding speed/):
--
-- -   1 - 380160
--
-- -   1b - 380160
--
-- -   1.1 - 76800
--
-- -   1.2 - 1536000
--
-- -   1.3 - 3041280
--
-- -   2 - 3041280
--
-- -   2.1 - 5068800
--
-- -   2.2 - 5184000
--
-- -   3 - 10368000
--
-- -   3.1 - 27648000
--
-- -   3.2 - 55296000
--
-- -   4 - 62914560
--
-- -   4.1 - 62914560
--
-- 'keyframesMaxDist', 'videoParameters_keyframesMaxDist' - Applicable only when the value of Video:Codec is one of @H.264@,
-- @MPEG2@, or @VP8@.
--
-- The maximum number of frames between key frames. Key frames are fully
-- encoded frames; the frames between key frames are encoded based, in
-- part, on the content of the key frames. The value is an integer
-- formatted as a string; valid values are between 1 (every frame is a key
-- frame) and 100000, inclusive. A higher value results in higher
-- compression but may also discernibly decrease video quality.
--
-- For @Smooth@ outputs, the @FrameRate@ must have a constant ratio to the
-- @KeyframesMaxDist@. This allows @Smooth@ playlists to switch between
-- different quality levels while the file is being played.
--
-- For example, an input file can have a @FrameRate@ of 30 with a
-- @KeyframesMaxDist@ of 90. The output file then needs to have a ratio of
-- 1:3. Valid outputs would have @FrameRate@ of 30, 25, and 10, and
-- @KeyframesMaxDist@ of 90, 75, and 30, respectively.
--
-- Alternately, this can be achieved by setting @FrameRate@ to auto and
-- having the same values for @MaxFrameRate@ and @KeyframesMaxDist@.
--
-- 'maxFrameRate', 'videoParameters_maxFrameRate' - If you specify @auto@ for @FrameRate@, Elastic Transcoder uses the frame
-- rate of the input video for the frame rate of the output video. Specify
-- the maximum frame rate that you want Elastic Transcoder to use when the
-- frame rate of the input video is greater than the desired maximum frame
-- rate of the output video. Valid values include: @10@, @15@, @23.97@,
-- @24@, @25@, @29.97@, @30@, @60@.
--
-- 'maxHeight', 'videoParameters_maxHeight' - The maximum height of the output video in pixels. If you specify @auto@,
-- Elastic Transcoder uses 1080 (Full HD) as the default value. If you
-- specify a numeric value, enter an even integer between 96 and 3072.
--
-- 'maxWidth', 'videoParameters_maxWidth' - The maximum width of the output video in pixels. If you specify @auto@,
-- Elastic Transcoder uses 1920 (Full HD) as the default value. If you
-- specify a numeric value, enter an even integer between 128 and 4096.
--
-- 'paddingPolicy', 'videoParameters_paddingPolicy' - When you set @PaddingPolicy@ to @Pad@, Elastic Transcoder may add black
-- bars to the top and bottom and\/or left and right sides of the output
-- video to make the total size of the output video match the values that
-- you specified for @MaxWidth@ and @MaxHeight@.
--
-- 'resolution', 'videoParameters_resolution' - To better control resolution and aspect ratio of output videos, we
-- recommend that you use the values @MaxWidth@, @MaxHeight@,
-- @SizingPolicy@, @PaddingPolicy@, and @DisplayAspectRatio@ instead of
-- @Resolution@ and @AspectRatio@. The two groups of settings are mutually
-- exclusive. Do not use them together.
--
-- The width and height of the video in the output file, in pixels. Valid
-- values are @auto@ and /width/ x /height/:
--
-- -   @auto@: Elastic Transcoder attempts to preserve the width and height
--     of the input file, subject to the following rules.
--
-- -   @ @/@width@/@ x @/@height@/@ @: The width and height of the output
--     video in pixels.
--
-- Note the following about specifying the width and height:
--
-- -   The width must be an even integer between 128 and 4096, inclusive.
--
-- -   The height must be an even integer between 96 and 3072, inclusive.
--
-- -   If you specify a resolution that is less than the resolution of the
--     input file, Elastic Transcoder rescales the output file to the lower
--     resolution.
--
-- -   If you specify a resolution that is greater than the resolution of
--     the input file, Elastic Transcoder rescales the output to the higher
--     resolution.
--
-- -   We recommend that you specify a resolution for which the product of
--     width and height is less than or equal to the applicable value in
--     the following list (/List - Max width x height value/):
--
--     -   1 - 25344
--
--     -   1b - 25344
--
--     -   1.1 - 101376
--
--     -   1.2 - 101376
--
--     -   1.3 - 101376
--
--     -   2 - 101376
--
--     -   2.1 - 202752
--
--     -   2.2 - 404720
--
--     -   3 - 404720
--
--     -   3.1 - 921600
--
--     -   3.2 - 1310720
--
--     -   4 - 2097152
--
--     -   4.1 - 2097152
--
-- 'sizingPolicy', 'videoParameters_sizingPolicy' - Specify one of the following values to control scaling of the output
-- video:
--
-- -   @Fit@: Elastic Transcoder scales the output video so it matches the
--     value that you specified in either @MaxWidth@ or @MaxHeight@ without
--     exceeding the other value.
--
-- -   @Fill@: Elastic Transcoder scales the output video so it matches the
--     value that you specified in either @MaxWidth@ or @MaxHeight@ and
--     matches or exceeds the other value. Elastic Transcoder centers the
--     output video and then crops it in the dimension (if any) that
--     exceeds the maximum value.
--
-- -   @Stretch@: Elastic Transcoder stretches the output video to match
--     the values that you specified for @MaxWidth@ and @MaxHeight@. If the
--     relative proportions of the input video and the output video are
--     different, the output video will be distorted.
--
-- -   @Keep@: Elastic Transcoder does not scale the output video. If
--     either dimension of the input video exceeds the values that you
--     specified for @MaxWidth@ and @MaxHeight@, Elastic Transcoder crops
--     the output video.
--
-- -   @ShrinkToFit@: Elastic Transcoder scales the output video down so
--     that its dimensions match the values that you specified for at least
--     one of @MaxWidth@ and @MaxHeight@ without exceeding either value. If
--     you specify this option, Elastic Transcoder does not scale the video
--     up.
--
-- -   @ShrinkToFill@: Elastic Transcoder scales the output video down so
--     that its dimensions match the values that you specified for at least
--     one of @MaxWidth@ and @MaxHeight@ without dropping below either
--     value. If you specify this option, Elastic Transcoder does not scale
--     the video up.
--
-- 'watermarks', 'videoParameters_watermarks' - Settings for the size, location, and opacity of graphics that you want
-- Elastic Transcoder to overlay over videos that are transcoded using this
-- preset. You can specify settings for up to four watermarks. Watermarks
-- appear in the specified size and location, and with the specified
-- opacity for the duration of the transcoded video.
--
-- Watermarks can be in .png or .jpg format. If you want to display a
-- watermark that is not rectangular, use the .png format, which supports
-- transparency.
--
-- When you create a job that uses this preset, you specify the .png or
-- .jpg graphics that you want Elastic Transcoder to include in the
-- transcoded videos. You can specify fewer graphics in the job than you
-- specify watermark settings in the preset, which allows you to use the
-- same preset for up to four watermarks that have different dimensions.
newVideoParameters ::
  VideoParameters
newVideoParameters =
  VideoParameters'
    { aspectRatio = Prelude.Nothing,
      bitRate = Prelude.Nothing,
      codec = Prelude.Nothing,
      codecOptions = Prelude.Nothing,
      displayAspectRatio = Prelude.Nothing,
      fixedGOP = Prelude.Nothing,
      frameRate = Prelude.Nothing,
      keyframesMaxDist = Prelude.Nothing,
      maxFrameRate = Prelude.Nothing,
      maxHeight = Prelude.Nothing,
      maxWidth = Prelude.Nothing,
      paddingPolicy = Prelude.Nothing,
      resolution = Prelude.Nothing,
      sizingPolicy = Prelude.Nothing,
      watermarks = Prelude.Nothing
    }

-- | To better control resolution and aspect ratio of output videos, we
-- recommend that you use the values @MaxWidth@, @MaxHeight@,
-- @SizingPolicy@, @PaddingPolicy@, and @DisplayAspectRatio@ instead of
-- @Resolution@ and @AspectRatio@. The two groups of settings are mutually
-- exclusive. Do not use them together.
--
-- The display aspect ratio of the video in the output file. Valid values
-- include:
--
-- @auto@, @1:1@, @4:3@, @3:2@, @16:9@
--
-- If you specify @auto@, Elastic Transcoder tries to preserve the aspect
-- ratio of the input file.
--
-- If you specify an aspect ratio for the output file that differs from
-- aspect ratio of the input file, Elastic Transcoder adds pillarboxing
-- (black bars on the sides) or letterboxing (black bars on the top and
-- bottom) to maintain the aspect ratio of the active region of the video.
videoParameters_aspectRatio :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_aspectRatio = Lens.lens (\VideoParameters' {aspectRatio} -> aspectRatio) (\s@VideoParameters' {} a -> s {aspectRatio = a} :: VideoParameters)

-- | The bit rate of the video stream in the output file, in
-- kilobits\/second. Valid values depend on the values of @Level@ and
-- @Profile@. If you specify @auto@, Elastic Transcoder uses the detected
-- bit rate of the input source. If you specify a value other than @auto@,
-- we recommend that you specify a value less than or equal to the maximum
-- H.264-compliant value listed for your level and profile:
--
-- /Level - Maximum video bit rate in kilobits\/second (baseline and main
-- Profile) : maximum video bit rate in kilobits\/second (high Profile)/
--
-- -   1 - 64 : 80
--
-- -   1b - 128 : 160
--
-- -   1.1 - 192 : 240
--
-- -   1.2 - 384 : 480
--
-- -   1.3 - 768 : 960
--
-- -   2 - 2000 : 2500
--
-- -   3 - 10000 : 12500
--
-- -   3.1 - 14000 : 17500
--
-- -   3.2 - 20000 : 25000
--
-- -   4 - 20000 : 25000
--
-- -   4.1 - 50000 : 62500
videoParameters_bitRate :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_bitRate = Lens.lens (\VideoParameters' {bitRate} -> bitRate) (\s@VideoParameters' {} a -> s {bitRate = a} :: VideoParameters)

-- | The video codec for the output file. Valid values include @gif@,
-- @H.264@, @mpeg2@, @vp8@, and @vp9@. You can only specify @vp8@ and @vp9@
-- when the container type is @webm@, @gif@ when the container type is
-- @gif@, and @mpeg2@ when the container type is @mpg@.
videoParameters_codec :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_codec = Lens.lens (\VideoParameters' {codec} -> codec) (\s@VideoParameters' {} a -> s {codec = a} :: VideoParameters)

-- | __Profile (H.264\/VP8\/VP9 Only)__
--
-- The H.264 profile that you want to use for the output file. Elastic
-- Transcoder supports the following profiles:
--
-- -   @baseline@: The profile most commonly used for videoconferencing and
--     for mobile applications.
--
-- -   @main@: The profile used for standard-definition digital TV
--     broadcasts.
--
-- -   @high@: The profile used for high-definition digital TV broadcasts
--     and for Blu-ray discs.
--
-- __Level (H.264 Only)__
--
-- The H.264 level that you want to use for the output file. Elastic
-- Transcoder supports the following levels:
--
-- @1@, @1b@, @1.1@, @1.2@, @1.3@, @2@, @2.1@, @2.2@, @3@, @3.1@, @3.2@,
-- @4@, @4.1@
--
-- __MaxReferenceFrames (H.264 Only)__
--
-- Applicable only when the value of Video:Codec is H.264. The maximum
-- number of previously decoded frames to use as a reference for decoding
-- future frames. Valid values are integers 0 through 16, but we recommend
-- that you not use a value greater than the following:
--
-- @Min(Floor(Maximum decoded picture buffer in macroblocks * 256 \/ (Width in pixels * Height in pixels)), 16)@
--
-- where /Width in pixels/ and /Height in pixels/ represent either MaxWidth
-- and MaxHeight, or Resolution. /Maximum decoded picture buffer in
-- macroblocks/ depends on the value of the @Level@ object. See the list
-- below. (A macroblock is a block of pixels measuring 16x16.)
--
-- -   1 - 396
--
-- -   1b - 396
--
-- -   1.1 - 900
--
-- -   1.2 - 2376
--
-- -   1.3 - 2376
--
-- -   2 - 2376
--
-- -   2.1 - 4752
--
-- -   2.2 - 8100
--
-- -   3 - 8100
--
-- -   3.1 - 18000
--
-- -   3.2 - 20480
--
-- -   4 - 32768
--
-- -   4.1 - 32768
--
-- __MaxBitRate (Optional, H.264\/MPEG2\/VP8\/VP9 only)__
--
-- The maximum number of bits per second in a video buffer; the size of the
-- buffer is specified by @BufferSize@. Specify a value between 16 and
-- 62,500. You can reduce the bandwidth required to stream a video by
-- reducing the maximum bit rate, but this also reduces the quality of the
-- video.
--
-- __BufferSize (Optional, H.264\/MPEG2\/VP8\/VP9 only)__
--
-- The maximum number of bits in any x seconds of the output video. This
-- window is commonly 10 seconds, the standard segment duration when
-- you\'re using FMP4 or MPEG-TS for the container type of the output
-- video. Specify an integer greater than 0. If you specify @MaxBitRate@
-- and omit @BufferSize@, Elastic Transcoder sets @BufferSize@ to 10 times
-- the value of @MaxBitRate@.
--
-- __InterlacedMode (Optional, H.264\/MPEG2 Only)__
--
-- The interlace mode for the output video.
--
-- Interlaced video is used to double the perceived frame rate for a video
-- by interlacing two fields (one field on every other line, the other
-- field on the other lines) so that the human eye registers multiple
-- pictures per frame. Interlacing reduces the bandwidth required for
-- transmitting a video, but can result in blurred images and flickering.
--
-- Valid values include @Progressive@ (no interlacing, top to bottom),
-- @TopFirst@ (top field first), @BottomFirst@ (bottom field first), and
-- @Auto@.
--
-- If @InterlaceMode@ is not specified, Elastic Transcoder uses
-- @Progressive@ for the output. If @Auto@ is specified, Elastic Transcoder
-- interlaces the output.
--
-- __ColorSpaceConversionMode (Optional, H.264\/MPEG2 Only)__
--
-- The color space conversion Elastic Transcoder applies to the output
-- video. Color spaces are the algorithms used by the computer to store
-- information about how to render color. @Bt.601@ is the standard for
-- standard definition video, while @Bt.709@ is the standard for high
-- definition video.
--
-- Valid values include @None@, @Bt709toBt601@, @Bt601toBt709@, and @Auto@.
--
-- If you chose @Auto@ for @ColorSpaceConversionMode@ and your output is
-- interlaced, your frame rate is one of @23.97@, @24@, @25@, @29.97@,
-- @50@, or @60@, your @SegmentDuration@ is null, and you are using one of
-- the resolution changes from the list below, Elastic Transcoder applies
-- the following color space conversions:
--
-- -   /Standard to HD, 720x480 to 1920x1080/ - Elastic Transcoder applies
--     @Bt601ToBt709@
--
-- -   /Standard to HD, 720x576 to 1920x1080/ - Elastic Transcoder applies
--     @Bt601ToBt709@
--
-- -   /HD to Standard, 1920x1080 to 720x480/ - Elastic Transcoder applies
--     @Bt709ToBt601@
--
-- -   /HD to Standard, 1920x1080 to 720x576/ - Elastic Transcoder applies
--     @Bt709ToBt601@
--
-- Elastic Transcoder may change the behavior of the
-- @ColorspaceConversionMode@ @Auto@ mode in the future. All outputs in a
-- playlist must use the same @ColorSpaceConversionMode@.
--
-- If you do not specify a @ColorSpaceConversionMode@, Elastic Transcoder
-- does not change the color space of a file. If you are unsure what
-- @ColorSpaceConversionMode@ was applied to your output file, you can
-- check the @AppliedColorSpaceConversion@ parameter included in your job
-- response. If your job does not have an @AppliedColorSpaceConversion@ in
-- its response, no @ColorSpaceConversionMode@ was applied.
--
-- __ChromaSubsampling__
--
-- The sampling pattern for the chroma (color) channels of the output
-- video. Valid values include @yuv420p@ and @yuv422p@.
--
-- @yuv420p@ samples the chroma information of every other horizontal and
-- every other vertical line, @yuv422p@ samples the color information of
-- every horizontal line and every other vertical line.
--
-- __LoopCount (Gif Only)__
--
-- The number of times you want the output gif to loop. Valid values
-- include @Infinite@ and integers between @0@ and @100@, inclusive.
videoParameters_codecOptions :: Lens.Lens' VideoParameters (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
videoParameters_codecOptions = Lens.lens (\VideoParameters' {codecOptions} -> codecOptions) (\s@VideoParameters' {} a -> s {codecOptions = a} :: VideoParameters) Prelude.. Lens.mapping Lens.coerced

-- | The value that Elastic Transcoder adds to the metadata in the output
-- file.
videoParameters_displayAspectRatio :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_displayAspectRatio = Lens.lens (\VideoParameters' {displayAspectRatio} -> displayAspectRatio) (\s@VideoParameters' {} a -> s {displayAspectRatio = a} :: VideoParameters)

-- | Applicable only when the value of Video:Codec is one of @H.264@,
-- @MPEG2@, or @VP8@.
--
-- Whether to use a fixed value for @FixedGOP@. Valid values are @true@ and
-- @false@:
--
-- -   @true@: Elastic Transcoder uses the value of @KeyframesMaxDist@ for
--     the distance between key frames (the number of frames in a group of
--     pictures, or GOP).
--
-- -   @false@: The distance between key frames can vary.
--
-- @FixedGOP@ must be set to @true@ for @fmp4@ containers.
videoParameters_fixedGOP :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_fixedGOP = Lens.lens (\VideoParameters' {fixedGOP} -> fixedGOP) (\s@VideoParameters' {} a -> s {fixedGOP = a} :: VideoParameters)

-- | The frames per second for the video stream in the output file. Valid
-- values include:
--
-- @auto@, @10@, @15@, @23.97@, @24@, @25@, @29.97@, @30@, @60@
--
-- If you specify @auto@, Elastic Transcoder uses the detected frame rate
-- of the input source. If you specify a frame rate, we recommend that you
-- perform the following calculation:
--
-- @Frame rate = maximum recommended decoding speed in luma samples\/second \/ (width in pixels * height in pixels)@
--
-- where:
--
-- -   /width in pixels/ and /height in pixels/ represent the Resolution of
--     the output video.
--
-- -   /maximum recommended decoding speed in Luma samples\/second/ is less
--     than or equal to the maximum value listed in the following table,
--     based on the value that you specified for Level.
--
-- The maximum recommended decoding speed in Luma samples\/second for each
-- level is described in the following list (/Level - Decoding speed/):
--
-- -   1 - 380160
--
-- -   1b - 380160
--
-- -   1.1 - 76800
--
-- -   1.2 - 1536000
--
-- -   1.3 - 3041280
--
-- -   2 - 3041280
--
-- -   2.1 - 5068800
--
-- -   2.2 - 5184000
--
-- -   3 - 10368000
--
-- -   3.1 - 27648000
--
-- -   3.2 - 55296000
--
-- -   4 - 62914560
--
-- -   4.1 - 62914560
videoParameters_frameRate :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_frameRate = Lens.lens (\VideoParameters' {frameRate} -> frameRate) (\s@VideoParameters' {} a -> s {frameRate = a} :: VideoParameters)

-- | Applicable only when the value of Video:Codec is one of @H.264@,
-- @MPEG2@, or @VP8@.
--
-- The maximum number of frames between key frames. Key frames are fully
-- encoded frames; the frames between key frames are encoded based, in
-- part, on the content of the key frames. The value is an integer
-- formatted as a string; valid values are between 1 (every frame is a key
-- frame) and 100000, inclusive. A higher value results in higher
-- compression but may also discernibly decrease video quality.
--
-- For @Smooth@ outputs, the @FrameRate@ must have a constant ratio to the
-- @KeyframesMaxDist@. This allows @Smooth@ playlists to switch between
-- different quality levels while the file is being played.
--
-- For example, an input file can have a @FrameRate@ of 30 with a
-- @KeyframesMaxDist@ of 90. The output file then needs to have a ratio of
-- 1:3. Valid outputs would have @FrameRate@ of 30, 25, and 10, and
-- @KeyframesMaxDist@ of 90, 75, and 30, respectively.
--
-- Alternately, this can be achieved by setting @FrameRate@ to auto and
-- having the same values for @MaxFrameRate@ and @KeyframesMaxDist@.
videoParameters_keyframesMaxDist :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_keyframesMaxDist = Lens.lens (\VideoParameters' {keyframesMaxDist} -> keyframesMaxDist) (\s@VideoParameters' {} a -> s {keyframesMaxDist = a} :: VideoParameters)

-- | If you specify @auto@ for @FrameRate@, Elastic Transcoder uses the frame
-- rate of the input video for the frame rate of the output video. Specify
-- the maximum frame rate that you want Elastic Transcoder to use when the
-- frame rate of the input video is greater than the desired maximum frame
-- rate of the output video. Valid values include: @10@, @15@, @23.97@,
-- @24@, @25@, @29.97@, @30@, @60@.
videoParameters_maxFrameRate :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_maxFrameRate = Lens.lens (\VideoParameters' {maxFrameRate} -> maxFrameRate) (\s@VideoParameters' {} a -> s {maxFrameRate = a} :: VideoParameters)

-- | The maximum height of the output video in pixels. If you specify @auto@,
-- Elastic Transcoder uses 1080 (Full HD) as the default value. If you
-- specify a numeric value, enter an even integer between 96 and 3072.
videoParameters_maxHeight :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_maxHeight = Lens.lens (\VideoParameters' {maxHeight} -> maxHeight) (\s@VideoParameters' {} a -> s {maxHeight = a} :: VideoParameters)

-- | The maximum width of the output video in pixels. If you specify @auto@,
-- Elastic Transcoder uses 1920 (Full HD) as the default value. If you
-- specify a numeric value, enter an even integer between 128 and 4096.
videoParameters_maxWidth :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_maxWidth = Lens.lens (\VideoParameters' {maxWidth} -> maxWidth) (\s@VideoParameters' {} a -> s {maxWidth = a} :: VideoParameters)

-- | When you set @PaddingPolicy@ to @Pad@, Elastic Transcoder may add black
-- bars to the top and bottom and\/or left and right sides of the output
-- video to make the total size of the output video match the values that
-- you specified for @MaxWidth@ and @MaxHeight@.
videoParameters_paddingPolicy :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_paddingPolicy = Lens.lens (\VideoParameters' {paddingPolicy} -> paddingPolicy) (\s@VideoParameters' {} a -> s {paddingPolicy = a} :: VideoParameters)

-- | To better control resolution and aspect ratio of output videos, we
-- recommend that you use the values @MaxWidth@, @MaxHeight@,
-- @SizingPolicy@, @PaddingPolicy@, and @DisplayAspectRatio@ instead of
-- @Resolution@ and @AspectRatio@. The two groups of settings are mutually
-- exclusive. Do not use them together.
--
-- The width and height of the video in the output file, in pixels. Valid
-- values are @auto@ and /width/ x /height/:
--
-- -   @auto@: Elastic Transcoder attempts to preserve the width and height
--     of the input file, subject to the following rules.
--
-- -   @ @/@width@/@ x @/@height@/@ @: The width and height of the output
--     video in pixels.
--
-- Note the following about specifying the width and height:
--
-- -   The width must be an even integer between 128 and 4096, inclusive.
--
-- -   The height must be an even integer between 96 and 3072, inclusive.
--
-- -   If you specify a resolution that is less than the resolution of the
--     input file, Elastic Transcoder rescales the output file to the lower
--     resolution.
--
-- -   If you specify a resolution that is greater than the resolution of
--     the input file, Elastic Transcoder rescales the output to the higher
--     resolution.
--
-- -   We recommend that you specify a resolution for which the product of
--     width and height is less than or equal to the applicable value in
--     the following list (/List - Max width x height value/):
--
--     -   1 - 25344
--
--     -   1b - 25344
--
--     -   1.1 - 101376
--
--     -   1.2 - 101376
--
--     -   1.3 - 101376
--
--     -   2 - 101376
--
--     -   2.1 - 202752
--
--     -   2.2 - 404720
--
--     -   3 - 404720
--
--     -   3.1 - 921600
--
--     -   3.2 - 1310720
--
--     -   4 - 2097152
--
--     -   4.1 - 2097152
videoParameters_resolution :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_resolution = Lens.lens (\VideoParameters' {resolution} -> resolution) (\s@VideoParameters' {} a -> s {resolution = a} :: VideoParameters)

-- | Specify one of the following values to control scaling of the output
-- video:
--
-- -   @Fit@: Elastic Transcoder scales the output video so it matches the
--     value that you specified in either @MaxWidth@ or @MaxHeight@ without
--     exceeding the other value.
--
-- -   @Fill@: Elastic Transcoder scales the output video so it matches the
--     value that you specified in either @MaxWidth@ or @MaxHeight@ and
--     matches or exceeds the other value. Elastic Transcoder centers the
--     output video and then crops it in the dimension (if any) that
--     exceeds the maximum value.
--
-- -   @Stretch@: Elastic Transcoder stretches the output video to match
--     the values that you specified for @MaxWidth@ and @MaxHeight@. If the
--     relative proportions of the input video and the output video are
--     different, the output video will be distorted.
--
-- -   @Keep@: Elastic Transcoder does not scale the output video. If
--     either dimension of the input video exceeds the values that you
--     specified for @MaxWidth@ and @MaxHeight@, Elastic Transcoder crops
--     the output video.
--
-- -   @ShrinkToFit@: Elastic Transcoder scales the output video down so
--     that its dimensions match the values that you specified for at least
--     one of @MaxWidth@ and @MaxHeight@ without exceeding either value. If
--     you specify this option, Elastic Transcoder does not scale the video
--     up.
--
-- -   @ShrinkToFill@: Elastic Transcoder scales the output video down so
--     that its dimensions match the values that you specified for at least
--     one of @MaxWidth@ and @MaxHeight@ without dropping below either
--     value. If you specify this option, Elastic Transcoder does not scale
--     the video up.
videoParameters_sizingPolicy :: Lens.Lens' VideoParameters (Prelude.Maybe Prelude.Text)
videoParameters_sizingPolicy = Lens.lens (\VideoParameters' {sizingPolicy} -> sizingPolicy) (\s@VideoParameters' {} a -> s {sizingPolicy = a} :: VideoParameters)

-- | Settings for the size, location, and opacity of graphics that you want
-- Elastic Transcoder to overlay over videos that are transcoded using this
-- preset. You can specify settings for up to four watermarks. Watermarks
-- appear in the specified size and location, and with the specified
-- opacity for the duration of the transcoded video.
--
-- Watermarks can be in .png or .jpg format. If you want to display a
-- watermark that is not rectangular, use the .png format, which supports
-- transparency.
--
-- When you create a job that uses this preset, you specify the .png or
-- .jpg graphics that you want Elastic Transcoder to include in the
-- transcoded videos. You can specify fewer graphics in the job than you
-- specify watermark settings in the preset, which allows you to use the
-- same preset for up to four watermarks that have different dimensions.
videoParameters_watermarks :: Lens.Lens' VideoParameters (Prelude.Maybe [PresetWatermark])
videoParameters_watermarks = Lens.lens (\VideoParameters' {watermarks} -> watermarks) (\s@VideoParameters' {} a -> s {watermarks = a} :: VideoParameters) Prelude.. Lens.mapping Lens.coerced

instance Data.FromJSON VideoParameters where
  parseJSON =
    Data.withObject
      "VideoParameters"
      ( \x ->
          VideoParameters'
            Prelude.<$> (x Data..:? "AspectRatio")
            Prelude.<*> (x Data..:? "BitRate")
            Prelude.<*> (x Data..:? "Codec")
            Prelude.<*> (x Data..:? "CodecOptions" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..:? "DisplayAspectRatio")
            Prelude.<*> (x Data..:? "FixedGOP")
            Prelude.<*> (x Data..:? "FrameRate")
            Prelude.<*> (x Data..:? "KeyframesMaxDist")
            Prelude.<*> (x Data..:? "MaxFrameRate")
            Prelude.<*> (x Data..:? "MaxHeight")
            Prelude.<*> (x Data..:? "MaxWidth")
            Prelude.<*> (x Data..:? "PaddingPolicy")
            Prelude.<*> (x Data..:? "Resolution")
            Prelude.<*> (x Data..:? "SizingPolicy")
            Prelude.<*> (x Data..:? "Watermarks" Data..!= Prelude.mempty)
      )

instance Prelude.Hashable VideoParameters where
  hashWithSalt _salt VideoParameters' {..} =
    _salt
      `Prelude.hashWithSalt` aspectRatio
      `Prelude.hashWithSalt` bitRate
      `Prelude.hashWithSalt` codec
      `Prelude.hashWithSalt` codecOptions
      `Prelude.hashWithSalt` displayAspectRatio
      `Prelude.hashWithSalt` fixedGOP
      `Prelude.hashWithSalt` frameRate
      `Prelude.hashWithSalt` keyframesMaxDist
      `Prelude.hashWithSalt` maxFrameRate
      `Prelude.hashWithSalt` maxHeight
      `Prelude.hashWithSalt` maxWidth
      `Prelude.hashWithSalt` paddingPolicy
      `Prelude.hashWithSalt` resolution
      `Prelude.hashWithSalt` sizingPolicy
      `Prelude.hashWithSalt` watermarks

instance Prelude.NFData VideoParameters where
  rnf VideoParameters' {..} =
    Prelude.rnf aspectRatio
      `Prelude.seq` Prelude.rnf bitRate
      `Prelude.seq` Prelude.rnf codec
      `Prelude.seq` Prelude.rnf codecOptions
      `Prelude.seq` Prelude.rnf displayAspectRatio
      `Prelude.seq` Prelude.rnf fixedGOP
      `Prelude.seq` Prelude.rnf frameRate
      `Prelude.seq` Prelude.rnf keyframesMaxDist
      `Prelude.seq` Prelude.rnf maxFrameRate
      `Prelude.seq` Prelude.rnf maxHeight
      `Prelude.seq` Prelude.rnf maxWidth
      `Prelude.seq` Prelude.rnf paddingPolicy
      `Prelude.seq` Prelude.rnf resolution
      `Prelude.seq` Prelude.rnf sizingPolicy
      `Prelude.seq` Prelude.rnf watermarks

instance Data.ToJSON VideoParameters where
  toJSON VideoParameters' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("AspectRatio" Data..=) Prelude.<$> aspectRatio,
            ("BitRate" Data..=) Prelude.<$> bitRate,
            ("Codec" Data..=) Prelude.<$> codec,
            ("CodecOptions" Data..=) Prelude.<$> codecOptions,
            ("DisplayAspectRatio" Data..=)
              Prelude.<$> displayAspectRatio,
            ("FixedGOP" Data..=) Prelude.<$> fixedGOP,
            ("FrameRate" Data..=) Prelude.<$> frameRate,
            ("KeyframesMaxDist" Data..=)
              Prelude.<$> keyframesMaxDist,
            ("MaxFrameRate" Data..=) Prelude.<$> maxFrameRate,
            ("MaxHeight" Data..=) Prelude.<$> maxHeight,
            ("MaxWidth" Data..=) Prelude.<$> maxWidth,
            ("PaddingPolicy" Data..=) Prelude.<$> paddingPolicy,
            ("Resolution" Data..=) Prelude.<$> resolution,
            ("SizingPolicy" Data..=) Prelude.<$> sizingPolicy,
            ("Watermarks" Data..=) Prelude.<$> watermarks
          ]
      )