Extension/ShufflePixels.RoughDraft.Extension.ps1

<#
.Synopsis
    Shuffles frames in video
.Description
    Shuffles frames in a video stream.
#>

# It's an extension
[Runtime.CompilerServices.Extension()]
# that extends Edit-Media
[Management.Automation.Cmdlet("Edit","Media")]
# that is not inherited
[ComponentModel.Inheritance("Inherited")]
param(
# Set the destination indexes of input frames.
# Number of indexes also sets maximal value that each index may have.
# ’-1’ index have special meaning and that is to drop frame.
[Parameter(Mandatory)]
[Alias('ShufflePixels')]
[switch]
$ShufflePixel,

[ValidateSet('forward','inverse')]
[string]
$ShufflePixelDirection,

[ValidateSet('horizontal','vertical','block')]
[string]
$ShufflePixelMode,

[int]
$ShufflePixelWidth,

[int]
$ShufflePixelHeight,

[int]
$ShufflePixelSeed
)

$filterArgs = @(
    if ($ShufflePixelDirection) {
        "direction=$($ShufflePixelDirection.ToLower())"
    }
    if ($ShufflePixelMode) {
        "mode=$($ShufflePixelMode.ToLower())"
    }
    if ($ShufflePixelWidth) {
        "width=$ShufflePixelWidth"
    }
    if ($ShufflePixelHeight) {
        "height=$ShufflePixelHeight"
    }
    if ($ShufflePixelSeed) {
        "seed=$ShufflePixelSeed"
    }
) -join ':'
"-vf"
"shufflepixels=$filterArgs"