The fastest way to transform your audio, video, and image files
MediaSwap is a robust wrapper designed to bring the power of FFmpeg and ImageMagick to your desktop. The GUI is familiar because itโs yours: the shell and file manager you are already using. If you can select and right click on files with your mouse or trackpad, you already know how to use MediaSwap to bulk transform your media files.
- Images: Convert .heic and .raw to .png, .webp, .avif, or .jpg. Create icons for your web app, apply bevels, drop-shadows, remove backgrounds, animate, resize, and more.
- Video: Convert proprietary formats to VP9, AV1, VP8. Smart defaults for current best practice.
- Audio: Convert to and from WAV, FLAC, AAC, Opus, OGG, MP3. Remix, remaster, rip bit perfect audio from video files create spectrogram charts, normalize voice notes for Whisper AI, amd more.
- Workflow: Right click on or more files in your file manager, choose what you want ot do. Or use the CLI. Convert a directory of MP4 video files to royalty free AV1 WebM? Easy as
m v av1 *mp4.
Essentially a Zenity powered non-app, thereโs no big programs to load or learn. MediaSwap attaches to your shell, integrating seamlessly into your environment, and organically into your workflow.
So natural and intuitive your great grandfather could figure out remastering his Glenn Miller Orchestra records in 3 minutes. The shell extension is composed of wrapper scripts in your GTK system you interact with via normal menus plus some new dialogues and slider elements that extend functionality with a native feel.
These components pass commands back to a master CLI app. Thatโs right, MediaSwap has a smart terminal mode.
And yes you can absolutely use on your remote server, with no desktop installed.
Even the console on your Android phone.
Stop it Ray! ๐คฌ
No joke I do it all the time ๐
Right-click any file in Nautilus:
- Go to Scripts.
- Select Convert Image, Convert Audio, or Convert Video.
- A dialog appears with interactive choices.
Launch Mediaswap interactive GUI from console.
m v video.mp4
# Opens a dialog asking: "Convert to: VP9, AV1, H264...?"
The core command is mediaswap. The syntax follows a simple pattern: mediaswap [category] [function] [input file].
Examples:
# Convert a video to WebM (VP9)
mediaswap video vp9 input.mp4
# Convert an image to JPG
mediaswap image jpg photo.png
# Convert audio to FLAC
mediaswap audio flac recording.wav
Faster and easier? We include a shorthand alias m mapped to the main script. The shortened CLI:
# Convert video to VP9
m v vp9 [inputfile]
# Convert image to JPG
m i jpg [inputfile]
# Rip audio from video (no transcoding)
m a rip [inputfile]
The output file is the same or a variation of the input filename and the new extension. so you dont have to type things twice or have a confusing process for handling batches of files. In fact batches wold be this easy:
# Bulk convert a directory of wav files to opus
m a opus *.wav
# Rip audio streams in bulk
m a rip my-videos/*
# Shrink your website graphics
m i webp *png
# make a animated webp gif-style
m i animate travel-photos/*png
Handles conversion, effects, and web optimization.
- webp: Convert to WebP (default quality 75).
- avif: Convert to AVIF (high efficiency).
- png: Convert to PNG.
- jpg: Convert to JPG.
- resize: resize image by percent or WxH.
- anim: Combine multiple selected images into an animated WebP.
- edge: Add a transparent 3D raised border.
- shadow: Add a floating โglassโ shadow effect (great for screenshots).
- bg: Remove background (white/black detection with threshold slider).
- icons: Generate a folder containing standard PWA/Favicon sizes + manifests.
- ascii: Generate a text file with ASCII art representation.
- strip: Remove EXIF/Metadata without re-encoding.
Convert audio with smarter transcoding and ripping.
- flac: Lossless conversion.
- wav: Convert to PCM WAV (16-bit).
- opus: Convert to Opus (Default: 256k).
- m4a: Convert to AAC/M4A (Default: 320k).
- ogg: Convert to Ogg (Default: 256k).
- mp3: Convert to MP3 (Default: 320k).
- spec: Create spectrogram image of audio
- norm,whisper: Normalize a voice recording for transcription (optimize for Whisper).
- whisper_quiet: Boost Quiet Audio (Dynamic Norm) for transcription (optimize for Whisper).
- whisper_noisy: Fix Noisy/Mumbled (Denoise + EQ) for transcription (optimize for Whisper).
- mix_headphone: Rich Headphone (Warmth + Width).
- mix_clear: Enhance detail/pop ("Notmos")
- mix_wide: Simple Stereo Widening.
- rip: Extract audio stream from video without re-encoding (copy stream). If the container format doesnโt match, it prompts to transcode.
Convert and transcode for modern web standards with ease.
- av1: Convert to WebM AV1 (High efficiency, slower encode).
- vp9, webm: Convert to WebM VP9 (Best balance of size/quality, default).
- vp8: Convert to WebM VP8.
- mp4_av1: Convert to MP4 AV1.
- h266, vvc: Convert to H.266 in MP4 (Latest, experimental).
- h265, hevc, mp4: Convert to H.265 in MP4 (MP4 default)
- h264, avc: Convert to H.264 in MP4 (Universal compatibility).
- mov: Convert to MOV (ProRes for editing).
- webp: Convert video clip to high-quality animated WebP.
- rip: extract audio track without transcode, attempts bit for bit copy.
Not residing in memory and being only around 500 lines, itโs like itโs not even there. When functions are requested menus and dialogues are instantiated and close when task is complete. You are always a couple clicks away from converting 100s of movies to the latest video codec, web friendly formats, extracting bit perfect audio streams, converting the format of those tracks, optimizing all your web graphics, adding shadows, making GIF animations using WebP. Use mediaswap to handle bulk conversions or single file be it sound, videos, static or animated images.
You can launch and interact with MediaSwap starting from the CLI, like a hybrid. Or you can never use the GUI or even know it exists as the console app has the same powers. And like mouse click based experience, MediaSwap on a terminal is fast, fun, intuitive. It had to be or you would just use FFMpeg directly!
The objective is to give console users a simpler, faster way to call on the most common functions. The power of FFMpeg extended to all experience levels including novice user who should be able to rip bit perfect audio, migrate their videos to av1, while knowing almost nothing about ffmpeg. With commands that are,
- too simple to confuse
- too sensible to forget
- too short to typo
- a simple help guide you can grasp in under a minute
Right click a media file or batch of files and convert PNG to WebP, or batch of MP4 to WebM, optimize a batch of voice notes for upload to transcription like Whisper AI by downsampling and normalizing or de-noise filtering. Select all your WebM music videos and extract the audio streams to Matroska containers. Drag select those and apply sound effects like clarity, or stereo widening.
Give your screenshots a nice 3d hover shadow effect Make your selfie an ascii text for fun. Generate all website and web app favicon icons fom a single starter image in a click. Resizing images is so easy itโs absurd, by dimensions or percent. Convert movies to av1 video codec in a click and adjust slider for more compression control.
Problematic meeting notes? Fix noisy ones and even repair those too quiet by boost certain ranges, before encode as 1 channel 16bit 16kHz PCM WAV; to the liking of Whisper for more ccurate transcription and subtitle generation. Want to see what your files soudn like so you know which ones need which kind of filter or cleanup? Try asking mediaswap for a PNG image spectrogram for each audio file.
Mediaswap relies on standard, powerful Linux tools:
ffmpegimagemagickzenity(for GUI dialogs)filechafa(optional, for ASCII art)exiftool(optional, for metadata scrubbing)zip(optional, for iconset packing)
Install them on Ubuntu/Debian:
sudo apt install ffmpeg imagemagick zenity file chafa jp2a exiftool zip
-
Clone the repository:
git clone https://github.com/deadflowers/mediaswap.git cd mediaswap -
Install the core script: Move the master script to your binary path and create the short alias
m.mkdir -p ~/.local/bin cp -a bin/mediaswap ~/.local/bin/ chmod +x ~/.local/bin/mediaswap ln -s ~/.local/bin/mediaswap ~/.local/bin/m -
Install Nautilus/Nemo integration: Move the wrapper scripts to the file manager scripts folder.
mkdir -p ~/.local/share/nautilus/scripts/ mv "Convert Image" "Convert Audio" "Convert Video" ~/.local/share/nautilus/scripts/ chmod +x ~/.local/share/nautilus/scripts/* -
Restart Nautilus (optional, if scripts donโt appear immediately):
nautilus -q
| Type | Command | Available Actions & Formats | Notes |
|---|---|---|---|
| Image | m i |
webp, avif, png, jpg, anim, icons, edge, shadow, bg, resize, ascii, strip |
anim creates an animated WebP from multiple selected images. strip removes metadata. |
| Audio | m a |
opus, m4a, mp3, flac, wav, ogg, norm, rip, spec |
rip extracts the audio stream from a video file without re-encoding. norm optimize a recording for transcription |
| Video | m v |
vp9, vp8, av1, h264, h265, h266, avc, hevc, vvc, webm, mov, mp4, webp, rip |
webp converts video input to an animated WebP. rip is a shortcut to extract audio. Supports --gpu. |
Running m i icons logo.png creates a folder structure ready for web deployment:
logo_iconset/
โโโ 32.png
โโโ 48.png
...
โโโ favicon.ico
โโโ manifest.json
โโโ meta.html
<figure>
<img src="https://github.com/deadflowers/mediaswap/blob/main/demo/example-animation.webp?raw=true" alt="Demo Animation" />
<figcaption>Demo animation </figcaption>
</figure>
<figure>
<iframe width="560" height="315" src="https://www.youtube.com/embed/xyz" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<figcaption>Video demo on YouTube by @raykooyenga</figcaption>
</figure>
Mediaswap is an open-source experiment created by Ray Kooyenga.
.