
Terminal & Command Prompt Basics For Media Workflows
Beginner-friendly terminal primer for creators—organize files, rename clips, convert audio/video, and run safe overnight jobs with simple commands.
Gentle introduction for creators — no coding degree required.
What this article is (and isn’t)
This is a practical, beginner-friendly introduction to the terminal — Command Prompt or PowerShell on Windows. You’ll copy-paste tiny commands, learn what they do in plain English, and use them to speed up everyday media work.
What it’s not: a deep dive into programming, server administration, or anything “hacker-y.”
By the end of part one you’ll be able to: open a terminal, install a couple of tools, move around folders confidently, run programs like ffmpeg and yt-dlp, and keep long jobs running while you do something else. (Part two builds on this with batching, loops, and checklists.)
Why creators should care
Creators repeat lots of small chores: renaming files, pulling subtitles, exporting audio, resizing for Shorts, moving finished renders into neat folders. Doing it with clicks is fine — until you have 50 items. The terminal turns those 50 clicks into one reliable command.
Benefits
- Batch tasks: do the same operation to many files at once
- Reproducible steps: save working commands and reuse them tomorrow
- Fewer mistakes: computers are great at boring, precise work
Concrete examples you’ll use soon
- Rename 50 clips from
IMG_0001.mp4
→interview_A_0001.mp4
in seconds - Transcode overnight: convert a folder of
.mov
files to.mp4
while you sleep - Organize downloads: move today’s assets into a tidy project folder with one command
- Quick checks: ask “what format is this?” or “how long is this clip?” without opening an editor

Getting a terminal on your computer
macOS
- Open Terminal (Spotlight → type “Terminal”). Optional later: iTerm2 for nicer tabs/search (works the same).
- Copy/paste:
⌘C / ⌘V
. - The prompt (where you type) usually ends with
$
or%
. - ↑ / ↓ cycle through previous commands. Tab auto-completes file and folder names.
Windows
- Use Windows Terminal (recommended) or PowerShell from Start.
- Copy/paste in Windows Terminal:
Ctrl+C / Ctrl+V
. In classic PowerShell, right-click to paste on older builds. - The prompt often ends with
>
and shows your current folder. - ↑ / ↓ cycle your history; Tab auto-completes names.
A quick comfort tour
- You’ll always have a current folder (working directory). Commands act there unless you point them elsewhere.
- If a command prints a lot, don’t panic. You can stop it with Ctrl+C (Windows & macOS).
- If you see “command not found,” the program isn’t installed or your system can’t find it yet.
💡 Tip: Keep a “Terminal Testing” folder on your Desktop. You can’t break anything important while you’re practicing.
Package managers in one minute
Installing apps with clicks is fine; installing tools (like ffmpeg) is faster and safer with a package manager — an app that installs other apps correctly.

macOS (Homebrew)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install ffmpeg yt-dlp
Windows (Chocolatey)
Set-ExecutionPolicy Bypass -Scope Process -Force; `
[System.Net.ServicePointManager]::SecurityProtocol = `
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072; `
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
choco install ffmpeg yt-dlp -y
Safety notes
- Always use official install commands like the above.
- You can uninstall later:
brew uninstall <tool>
orchoco uninstall <tool>
. - Confirm installs:
ffmpeg -version
andyt-dlp --version
. If you see version text, you’re set.
How folders and paths work
Commands act on paths — addresses to files/folders. Understanding these ideas will prevent 90% of newbie issues.
Working directory (“Where am I?”)
- macOS:
pwd
(print working directory) - Windows:
Get-Location
- List what’s here:
ls
(macOS) ordir
(Windows)
Absolute vs relative paths
- Absolute: full address from the top of your drive.
- macOS:
/Users/you/Desktop/Terminal Testing/video.mp4
- Windows:
C:\Users\you\Desktop\Terminal Testing\video.mp4
- macOS:
- Relative: start from where you are.
If you’re already inTerminal Testing
, the same file is justvideo.mp4
.
Spaces in names
- Paths with spaces must be quoted or escaped.
- macOS:
cd "Terminal Testing"
orcd Terminal\ Testing
- Windows:
cd "Terminal Testing"
- macOS:
Path separators
- macOS uses
/
; Windows uses\
. - When in doubt, drag a file into the terminal — it often pastes the full path for you.
If you get “No such file or directory,” check:
- spelling, 2) quotes for spaces, 3) your folder (
pwd
/Get-Location
).

Commands you’ll actually use
Below are everyday commands you’ll reuse. Each has a macOS and a Windows version that do the same thing.
Navigation
# macOS
pwd
ls
cd Projects
cd ..
open .
# Windows
Get-Location
dir
cd Projects
cd ..
start .
Files (copy / move / delete / make folder)
# macOS
cp input.mp4 copy.mp4
mv copy.mp4 clips/
rm old.mp3
mkdir assets
# Windows
Copy-Item input.mp4 copy.mp4
Move-Item copy.mp4 .\clips\
Remove-Item old.mp3
New-Item -ItemType Directory assets
Run programs & get help
# macOS
ffmpeg -version
yt-dlp --version
yt-dlp --help | less
# Windows
ffmpeg -version
yt-dlp --version
yt-dlp --help | more
History, tab-complete, clear screen
- Up/Down arrows: cycle history
- Tab: auto-complete names
# macOS
clear
# Windows
cls
Open the current folder in your GUI
open . # macOS Finder
start . # Windows Explorer
Quick “what is this file?” check
ffprobe -hide_banner -i "My Clip.mp4" # macOS or Windows (ffprobe ships with ffmpeg)
Save output to a file (logging)
# macOS
yt-dlp https://… > download_log.txt
yt-dlp https://… >> download_log.txt
# Windows
yt-dlp https://… > download_log.txt
yt-dlp https://… >> download_log.txt
Batch renaming & simple loops
Renaming files one-by-one is painful. Here are safe, repeatable patterns.

Add a prefix to every .mp4
# macOS (dry run, then do it)
for f in *.mp4; do echo mv -- "$f" "clip_$f"; done
for f in *.mp4; do mv -- "$f" "clip_$f"; done
# Windows (preview with -WhatIf, then run)
Get-ChildItem *.mp4 | Rename-Item -NewName { "clip_$($_.Name)" } -WhatIf
Get-ChildItem *.mp4 | Rename-Item -NewName { "clip_$($_.Name)" }
Change extensions (e.g., .mov
→ .mp4
names only)
This just renames the file; it doesn’t convert media. Use ffmpeg to transcode.
# macOS
for f in *.mov; do mv -- "$f" "${f%.mov}.mp4"; done
# Windows
Get-ChildItem *.mov | Rename-Item -NewName { $_.BaseName + ".mp4" } -WhatIf
# then run again without -WhatIf
Replace spaces with dashes (good for scripts)
# macOS
for f in *\ *; do new="${f// /-}"; echo mv -- "$f" "$new"; done
for f in *\ *; do new="${f// /-}"; mv -- "$f" "$new"; done
# Windows
Get-ChildItem | Where-Object Name -match " " |
Rename-Item -NewName { $_.Name -replace ' ','-' } -WhatIf
# then without -WhatIf
Safety tips
- Dry-run first. On macOS, put
echo
beforemv
. In PowerShell, use-WhatIf
. - Create an undo map before renaming:
# macOS
: > rename_map.csv
for f in *.mp4; do echo "$f,clip_$f" >> rename_map.csv; done
# Windows
Get-ChildItem *.mp4 |
Select-Object @{n='Old';e={$_.Name}}, @{n='New';e={"clip_$($_.Name)"}} |
Export-Csv rename_map.csv -NoTypeInformation
Pipes & redirection
Terminals shine when you chain small tools so the output of one becomes the input of another.
- Pipe (
|
): send output of command A into command B - Redirection (
>
,>>
): write output to a file (overwrite or append) - Errors only (
2>
): write just errors to a file
# Show output on screen and save it
# macOS
yt-dlp "AUTHORIZED_OR_CC_URL" | tee log.txt
yt-dlp "AUTHORIZED_OR_CC_URL" | tee -a log.txt
# Windows
yt-dlp "AUTHORIZED_OR_CC_URL" | Tee-Object -FilePath log.txt
yt-dlp "AUTHORIZED_OR_CC_URL" | Tee-Object -FilePath log.txt -Append
# Keep errors separate (useful for debugging)
ffmpeg -i input.mp4 2> errors.txt # macOS or Windows
Chaining is how you build mini-assembly lines: download → log → convert → move — each step simple and visible.
A tiny script, explained
Scripts are just saved commands. Start tiny: one script for macOS, one for Windows.
# macOS (convert_audio.sh)
#!/usr/bin/env bash
set -euo pipefail
in="$1"
out_folder="Audio"
mkdir -p "$out_folder"
# extract audio as high-quality AAC
ffmpeg -y -i "$in" -vn -acodec aac -b:a 192k "$out_folder/${in%.*}.m4a"
echo "Saved to $out_folder/${in%.*}.m4a"
# Run it:
# chmod +x convert_audio.sh
# ./convert_audio.sh "My Clip.mp4"
# Windows (Convert-Audio.ps1)
param(
[Parameter(Mandatory=$true)][string]$In
)
$OutFolder = "Audio"
New-Item -ItemType Directory -Force -Path $OutFolder | Out-Null
# extract audio as high-quality AAC
ffmpeg -y -i "$In" -vn -acodec aac -b:a 192k (Join-Path $OutFolder ("{0}.m4a" -f [System.IO.Path]::GetFileNameWithoutExtension($In)))
Write-Host "Saved to $OutFolder"
# Run it:
# Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
# .\Convert-Audio.ps1 -In "My Clip.mp4"

Day-one practice lab
Goal: run a four-step mini-pipeline on a file you’re allowed to use (your clip).
-
Prepare a sandbox
CreateDesktop/Terminal Testing/
and putsample.mp4
inside. -
Inspect the media
ffprobe -hide_banner -i "sample.mp4"
Look for resolution, duration, and audio stream info.
- Extract audio
# macOS
./convert_audio.sh "sample.mp4"
# Windows
.\Convert-Audio.ps1 -In "sample.mp4"
- Rename & organize
# macOS
mv -- "sample.mp4" "clip_sample.mp4"
mkdir -p Assets && mv -- Audio "clip_sample.mp4" Assets/
# Windows
Rename-Item "sample.mp4" "clip_sample.mp4"
New-Item -ItemType Directory -Force -Path Assets | Out-Null
Move-Item -Path Audio, "clip_sample.mp4" -Destination Assets
Checklist (expected outputs)
Assets/clip_sample.mp4
Assets/Audio/clip_sample.m4a
- A few lines of
ffprobe
output confirming streams
Printable cheat sheet
NAVIGATION
macOS: pwd | ls | cd <folder> | cd .. | open .
Win: Get-Location | dir | cd <folder> | cd .. | start .
FILES
macOS: cp a b | mv a b | rm a | mkdir new
Win: Copy-Item a b | Move-Item a b | Remove-Item a | New-Item -ItemType Directory new
RUN PROGRAMS & HELP
ffmpeg -version | yt-dlp --version | <command> --help
CLEAR SCREEN
macOS: clear
Win: cls
LOGGING
Overwrite: > log.txt Append: >> log.txt Errors only: 2> errors.txt
BACKGROUND/LONG JOBS
macOS: command & nohup command >> log.txt 2>&1 &
Win: Start-Process <exe> -ArgumentList "<args>"
SAFE BATCH RENAME
macOS: for f in *.mp4; do mv "$f" "clip_$f"; done
Win: Get-ChildItem *.mp4 | Rename-Item -NewName { "clip_$($_.Name)" } -WhatIf
Troubleshooting & confidence builders
- “command not found” — tool isn’t installed or not on PATH. Install with Homebrew/Chocolatey, then open a new terminal and try
ffmpeg -version
again. - “No such file or directory” — wrong folder or the path has spaces. Check with
pwd
/Get-Location
. Wrap paths in quotes:"My Video.mp4"
. - Permissions / script blocked — macOS:
chmod +x script.sh
. Windows:Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
. - Access denied / file in use (Windows) — close apps using the file (Explorer preview, editor), then run again.
- PATH issues after install — close and reopen the terminal so new PATH settings load.
- Too much output — on macOS use
| tee log.txt
; on Windows use| Tee-Object log.txt
to save and read later.
Search errors by pasting the exact message into a search engine with the tool name (e.g., “ffmpeg Invalid data found”). Someone has had this problem before.
Glossary
- Terminal / PowerShell — the text window where you run commands
- Command — a tiny program you run by name (e.g.,
ffmpeg
) - Working directory — the folder your commands act on by default
- Path — the “address” to a file/folder (e.g.,
C:\Videos\clip.mp4
) - Pipe (
|
) — send the output of one command into another - Redirection (
>
,>>
,2>
) — save output (or errors) into a file - Script — a saved list of commands you can run again
- Log — a text file recording what happened during a run
- Package manager — an app that installs other tools (Homebrew, Chocolatey)