3.8 KiB
Get-Frame.ps1
Extracts a specific frame of a video file to a PNG image by calling Get-LastFrame.ps1 with an automatically derived output filename. The image path is generated from the -Video filename by appending a dash and the resolved frame index zero-padded to at least four digits — for example, P01.mp4 at frame 10 becomes P01-0010.png saved alongside the source video.
Parameters
-Video(required): Path to the input video file. Can be absolute or relative to current directory.-Frame(required): 0-based frame index to extract.- Positive values: Direct frame index (e.g.,
0= first frame,100= frame 100) - Negative values: Count from the end (e.g.,
-1= last frame,-2= second-to-last) - Values are automatically clamped to the valid range (0 to total frames − 1)
- Positive values: Direct frame index (e.g.,
Image Filename Derivation
The output filename is derived from the resolved (always positive) frame index:
| Video | -Frame |
Total frames | Output image |
|---|---|---|---|
P01.mp4 |
10 |
any | P01-0010.png |
P01.mp4 |
0 |
any | P01-0000.png |
P01.mp4 |
-1 |
300 | P01-0299.png |
P01.mp4 |
-2 |
300 | P01-0298.png |
render/shot.mp4 |
42 |
any | render/shot-0042.png |
C:\Videos\take01.mp4 |
100 |
any | C:\Videos\take01-0100.png |
Negative indices are resolved to the actual frame index before building the filename, so the output always reflects the exact frame that was extracted.
Output Name Digits
The frame index is padded with zeros to at least four digits. Frames 0 to 9999 give exactly four digits (0010). Larger numbers are written in full: frame 12345 gives P01-12345.png.
Existing Files
An existing PNG with the same name is replaced. The image is written by Get-LastFrame.ps1, which overwrites its output.
Command Wrapper
Get-Frame.cmd takes the video and the frame as positional arguments. It calls Get-Frame.ps1 found on PATH, so the script folder must be on PATH. Arguments after the frame are passed to Get-Frame.ps1 unchanged. Only -WhatIf and -Confirm are accepted there. Other options are rejected.
Get-Frame.cmd "P01.mp4" 10
This is the same call as .\Get-Frame.ps1 -Video P01.mp4 -Frame 10.
Limitations
-Imageis not a parameter ofGet-Frame.ps1, so it cannot choose the output name. To use a custom name or a numbering pattern, call Get-LastFrame.ps1 with-Image:
.\Get-LastFrame.ps1 -Video P01.mp4 -Frame 10 -Image "P01-%04d.png"
Examples
Extract a specific frame:
.\Get-Frame.ps1 -Video P01.mp4 -Frame 10
# Creates: P01-0010.png
Extract the first frame:
.\Get-Frame.ps1 -Video P01.mp4 -Frame 0
# Creates: P01-0000.png
Extract the last frame:
.\Get-Frame.ps1 -Video P01.mp4 -Frame -1
# If video has 300 frames, creates: P01-0299.png
Extract the second-to-last frame:
.\Get-Frame.ps1 -Video P01.mp4 -Frame -2
# If video has 300 frames, creates: P01-0298.png
Extract the 10th frame from the end:
.\Get-Frame.ps1 -Video P01.mp4 -Frame -10
# If video has 300 frames, creates: P01-0290.png
Using absolute paths:
.\Get-Frame.ps1 -Video "C:\Videos\P01.mp4" -Frame 50
# Creates: C:\Videos\P01-0050.png
Safe Execution
This script supports -WhatIf and -Confirm for safe execution (forwarded to Get-LastFrame.ps1):
-WhatIf: Simulate the operation without extracting the frame. Shows what would be done.-Confirm: Prompt for confirmation before extracting the frame.
Simulate without extracting:
.\Get-Frame.ps1 -Video P01.mp4 -Frame 10 -WhatIf
Prompt before extraction:
.\Get-Frame.ps1 -Video P01.mp4 -Frame 10 -Confirm