en-us/about_RoughDraft.help.txt
RoughDraft is a fun PowerShell Module for Multimedia. It provides pipeline-aware command to create, convert, query, edit, and join multimedia files. ## RoughDraft -Media Commands The core of RoughDraft are the -Media commands: |Name |Description | |:------------|-------------------------------| |Convert-Media|Converts media between formats | |Edit-Media |Edits media files | |Get-Media |Gets media metadata | |Join-Media |Joins media files | |New-Media |Creates media files | |Set-Media |Sets media metadata | |Show-Media |Shows media files | |Split-Media |Splits media files | These commands are built atop of [FFMpeg](https://ffmpeg.org) ### Examples #### Convert-Media ~~~PowerShell # Converts a Movie.mkv to MP4 Convert-Media .\Movie.mkv mp4 # Converts an .mp4 file to an .mp3 Convert-Media .\Movie.mp4 .\Soundtrack.mp3 # Get rid of flac files Convert-Media .\Song.flac .mp3 # Convert all .flac files to .mp3 Get-ChildItem -Path $home\Music -Recurse | Where-Object Extension -eq '.flac' | Convert-Media .mp3 ~~~ #### Edit-Media ~~~PowerShell # Adds a sepia effect to an .mp4 Edit-Media .\Movie.mp4 -Sepia # Increases the audio by 4 decibals. Edit-Media .\Song.mp3 -AudioGain 4db ~~~ #### Get-Media ~~~PowerShell # Get metadata about an mp3 Get-Media .\Song.mp3 # Detect silences within a song Get-Media .\Song.mp3 -SilenceDetect # Gets metadata about a movie. Get-Media .\Movie.mp4 ~~~ #### Join-Media ~~~PowerShell # Make a timelapse from a directory of pictures dir *.jpg | Join-Media -OutputPath .\Timelapse.mp4 -Timelapse # Join an audio and video file Join-Media -InputPath .\Silent.mp4, .\Soundtrack.mp3 -OutputPath .\Movie.mp4 # Join mp3s into an album dir *.mp3 | Join-Media -Output ..\Album.mp3 # Join various video files into a longer movie dir | Where-Object Extension -in '.mkv', '.mp4' | Join-Media -Output ..\Movie.mp4 ~~~ #### New-Media ~~~PowerShell # Create a red jpg New-Media -Color Red -OutputPath .\Red.jpg # Create a 15 second cyan mp4 at 1080p New-Media -Color Cyan -OutputPath .\Cyan.mp4 -Duration '00:00:05' -Resolution '1920x1080' # Create an RGB test source New-Media -TestSource rgbtestsrc -OutputPath .\rgbtestsrc.mp4 -Duration '00:00:10' ~~~ #### Set-Media ~~~PowerShell # Set metadata about a video Set-Media .\Movie.mp4 -Property @{title='My Movie'} # Sets metadata about a music file. Set-Media .\Song.mp3 -Property @{title='My Song';artist='me';'lyrics-eng' = 'My Lyrics'} # Sets album artwork Set-Media .\Song.mp3 -AlbumArt .\Cover.jpg ~~~ ## Additional RoughDraft commands: |Name |Description | |-----------------------|-----------------------------------| |ConvertTo-Gif |Converts video to high-quality GIFs| |ConvertTo-Waveform |Converts audio to visualizations | |Get-FFMpeg |Gets FFMpeg | |Get-FFPlay |Gets FFPlay | |Get-FFProbe |Gets FFProbe | |Get-FFProbe |Uses FFProbe directly | |Get-RoughDraftExtension|Gets RoughDraftExtensions | |Use-FFMpeg |Uses FFMpeg directly | |Use-FFPlay |Uses FFPlay directly | |Use-FFProbe |Uses FFProbe directly | |Use-RoughDraftExtension|Uses RoughDraftExtensions | ### Additional examples: ~~~PowerShell # List available codecs Get-FFMpeg -ListCodec # List available codecs Get-FFMpeg -ListCaptureDevice # List available filters Get-FFMpeg -ListFilter # Get information about a filter Get-FFMpeg -FilterName ~~~ ## Extending RoughDraft RoughDraft is built extensibly. This is so that complex FFMpeg operations can be abstracted into small amounts of code. You can see the current set of extensions with: ~~~PowerShell Get-RoughDraftExtension ~~~ ### Extension Scripts Extensions are simple scripts files named with the regular expression ```\.(rd|RoughDraft)\.(ext|extension)\.ps1$```. They can exist in any module that adds the tag "RoughDraft". Extensions should include the following attributes above their parameter block: ~~~PowerShell # It's an extension [Runtime.CompilerServices.Extension()] # that extends Edit-Media # (Change this to indicate which command you'd like to extend) # (Add additional Cmdlet attributes one to extend more commands) [Management.Automation.Cmdlet("Edit","Media")] # that is inherited (this is the default). # (an extension that is 'Inherited' will return control to the main function when it is done.) # (an extension that is 'NotInherited' will run and return directly) [ComponentModel.Inheritance("Inherited")] param( # At least one parameter of the extension should be mandatory. [switch] $MyEditExtension ) ~~~ ### Commands that can be extended: The following commands can currently be extended: * Convert-Media * Edit-Media * Get-FFMpeg * Get-Media * Join-Media * New-Media * Show-Media * Split-Media |