
Convert any media file with just a few keystrokes
| Media Type | Supported Input Formats | Supported Output Formats |
|---|---|---|
| Video | MOV, MP4, AVI, MKV, MPG, WEBM, TS, MPEG, VOB, M2TS, MTS, M4V, FLV, 3GP, ASF, WMV, RMVB, OGV, MXF, NUT, DV, GXF, RM, CDXL, WTV, M3U8, MPD, SEG, TXD | MP4, AVI, MKV, MOV, MPG, WEBM, GIF |
| Image | JPG, JPEG, PNG, WEBP, HEIC (MacOS), TIFF, TIF, AVIF, BMP, PCX, TGA, RAS, SGI, PPM, PGM, PBM, PNM, XBM, XPM, ICO, JP2, J2K, PCD, CIN, WBMP, XFACE | JPG, PNG, WEBP, HEIC (MacOS), TIFF, AVIF |
| Audio | MP3, AAC, WAV, M4A, FLAC, AIF, AIFF, OGG, OGA, ALAC, WMA, OPUS, AMR, CAF, AU, SND, APE, DSF, DFF, MPC, WV, SPX, XA, RA | MP3, AAC, WAV, FLAC, M4A |
Long-running conversions can be cancelled from the progress toast or with ⌘..
Select any video file, pick .gif as the output format, then choose frame rate (10/15/24/30 fps), width, and whether the GIF should loop. The extension uses FFmpeg's palettegen + paletteuse pipeline for high-quality GIF output.
Open Inspect Media with files selected in Finder, or choose files in the command. The inspector shows file size, container, duration, bitrate, video and audio stream details, subtitle streams, and embedded metadata.
Use Add to Conversion Queue from Convert Media, then keep the Conversion Queue command open while jobs run. Jobs are stored between launches and run one at a time. You can reorder pending jobs, cancel the active job, retry failed/cancelled/interrupted jobs, open completed outputs, and clear finished entries.
Raycast extensions cannot run as permanent background daemons. If Raycast or the extension process stops, the active job is marked interrupted the next time the queue opens and can be retried; pending jobs remain queued.
Open Edit Media, choose one file, and select an operation:
You can also set defaults in extension preferences:
0 to 100, step 5).Lossless (when supported) or 0 to 100, step 5).PNG-24 or PNG-8).0 to 100, step 5).Deflate or LZW).0 to 100, step 5).lowest, low, medium, high, highest).lowest, low, medium, high, highest).10, 15, 24, 30).original, 480, 720, 1080).Same folder as input or Custom folder (see next).Default Output Location is set to Custom folder.-map_metadata -1 applied so EXIF/GPS/tags are removed.You can still override all values in the Convert Media form every time you run a conversion.
Already have FFmpeg on your system but the extension didn't automatically detect it? Open the extension preferences and set the path to your FFmpeg executable.
By default, audio and video formats will only propose 5 quality levels. Want more granular control, like encoding method, bitrate, bit depth, etc? Open the extension preferences and turn on "More Conversion Settings (Advanced)".
Image preference definitions are maintained in src/config/image-preferences.json and synced into package.json.
npm run generate:image-preferences to write image preference entries into package.json.npm run check:image-preferences to verify package.json is in sync with src/config/image-preferences.json.MIT License
Created by @leandro.maia
Converts a media file to a different file format
Concatenate multiple video or audio files into a single output file
Browse, re-run or clear your recent conversions
Create, edit and delete conversion presets
Inspect codecs, streams, dimensions, bitrate and metadata
Run, monitor, cancel and retry queued conversions
Resize, crop, change speed or frame rate, remove or extract audio, normalize loudness, or edit subtitles
convert-media AI tool.HH:MM:SS[.mmm] or bare seconds, with validation and live preview of the resulting duration.-map_metadata -1 through for video/audio/image (and a best-effort strip for HEIC via sips)..gif when converting a video and choose fps, width, and loop behaviour. Uses FFmpeg's palettegen + paletteuse pipeline for clean, low-size GIFs.merge-media) and extended convert-media tool with outputDir, stripMetadata, trimStart, trimEnd, presetId, gifFps, gifWidth, gifLoop parameters.Default GIF FPSDefault GIF WidthDefault Output Location (Same folder as input / Custom folder)Custom Output FolderStrip Metadata By DefaultconvertMedia now takes an options bag as its fourth argument ({ returnCommandString?, outputDir?, stripMetadata?, trim?, onProgress? }) instead of a boolean. The simple 3-argument form still works with the same defaults.src/utils/ffmpegRun.ts with runFFmpegWithProgress (spawns FFmpeg and streams -progress pipe:1 updates back) and probeDurationSec (parses ffmpeg -i stderr).src/utils/convertBatch.ts — shared batch orchestrator that owns history logging, size tracking, progress reporting, and the success summary toast. Consumed by both the Convert Media form and future programmatic callers.src/utils/history.ts, src/utils/presets.ts, src/utils/merge.ts, src/utils/time.ts, src/utils/format.ts.types/media.ts with GifQuality, TrimOptions, Preset, OutputGifExtension, OutputCategory, and getOutputCategory().src/config/built-in-presets.json.Stream specifier ':v:0' matches no streams because the filter graph always requested a video stream, even for WAV/MP3/FLAC inputs. The re-encode merge now emits an audio-only filter graph when the output format is audio.tsx) covering time parsing, byte/size formatting, FFmpeg stdout/stderr parsers, merge stream-info helpers, media type helpers, and built-in preset validation.npm run test:smoke — generates tiny fixtures with FFmpeg itself and exercises convertMedia/mergeMedia end-to-end (webm, GIF, trim, strip-metadata, stream-copy merge, re-encode merge, audio merge, progress callbacks).TESTING.md with the manual UI checklist for every command.ai.evals with cases covering GIF parameters, trim, strip-metadata, audio merge, video merge, and the forceReencode flag.Default Image Output FormatDefault JPG QualityDefault WEBP QualityDefault PNG VariantDefault HEIC Quality (macOS only)Default TIFF CompressionDefault AVIF QualityDefault Audio Output FormatDefault Audio Quality Preset (Simple Mode)Default Video Output FormatDefault Video Quality Preset (Simple Mode).heic to .jpg to avoid invalid dropdown states.src/config/image-preferences.json as the single source of truth for image preference metadata and value domains.scripts/generate-image-preferences.mjs to generate/check image preferences in package.json.getDefaultImageQuality() to resolve defaults by output format (.jpg, .webp, .png, .heic, .tiff, .avif) and validate configured values against shared domains.Default Image Output FormatDefault Image QualityDefault Video Output FormatDefault Video Quality Preset (Simple Mode)Default Image Quality now supports detailed values (Lossless (when supported), 100 to 0, PNG-24, PNG-8, TIFF Deflate, TIFF LZW) to better match the in-form quality choices..heic to .jpg to avoid invalid dropdown states.DEFAULT_QUALITIES when the selected value is not applicable to the current output format.getDefaultImageQuality() to map preference values into format-specific quality settings while preserving legacy preset compatibility (lowest to highest).Copy FFmpeg Command action in the Converter Form, to allow the user to inspect the command or run it by themselves in terminal.-pix_fmt yuv420p to all videos except .mov to broaden support when converting from specific/unsupported video codecsbuildVideoQuality factory for the AI toolconvert-media.ts (the AI tool)Publish on windows
Major rework of the installation of FFmpeg (way more streamline for non-brew users), future-proof (for when Raycast will support more platforms than MacOS)