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 |
 
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
 
# List available codecs
Get-Media -ListCodec
 
# List available codecs
Get-Media -ListCaptureDevice
~~~
 
#### 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 |
 
## 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
* Get-Media
* Edit-Media