| Ocalt Query Language
Pricing Dashboard ocalt.com v1.0

Audio / Video

A full server-side media editing suite powered by FFmpeg. Every verb takes input paths from /root/ and writes output to /root/. All operations return the output path as text.

Probing

VerbModifiersDescription
PROBE MEDIA "/root/v.mp4"Full media metadata — duration, codec, resolution, fps, bitrate, audio streams. Also accepts PROBE VIDEO and PROBE AUDIO.
PROBE MEDIA "/root/input.mp4" SET ?info AFTER EMIT ?info(format)(duration) & "s, " & ?info(streams)(0)(codec_name)
Try it ›

Transcoding & Scaling

VerbModifiersDescription
TRANSCODE "/root/src"AS "format" INTO "/root/dst"Convert container/codec. Formats: mp4, webm, avi, mkv, mov, gif, mp3, wav, ogg, flac, aac
SCALE VIDEO "/root/v"WITH "1920x1080" INTO "/root/out"Resize resolution. WITH "1280" scales width only, height auto.
SPEED VIDEO "/root/v"WITH "2.0" INTO "/root/out"Change playback speed. 2.0 = double, 0.5 = half. Audio pitch-corrected automatically.
TRANSCODE "/root/upload.mov" AS "mp4" INTO "/root/ready.mp4" SET ?out AFTER EMIT ?out
Try it ›
SCALE VIDEO "/root/4k.mp4" WITH "1920x1080" INTO "/root/1080p.mp4" SET ?out AFTER EMIT ?out
(* Scale width only — height auto to preserve aspect ratio *) SCALE VIDEO "/root/video.mp4" WITH "1280" INTO "/root/scaled.mp4" SET ?out AFTER EMIT ?out
SPEED VIDEO "/root/video.mp4" WITH "0.5" INTO "/root/slow.mp4" SET ?out AFTER EMIT ?out

Trimming

VerbModifiersDescription
TRIM VIDEO "/root/v"FROM "HH:MM:SS" TO "HH:MM:SS" INTO "/root/out"Cut a time range from a video
TRIM AUDIO "/root/a"FROM "HH:MM:SS" TO "HH:MM:SS" INTO "/root/out"Cut a time range from an audio file
TRIM VIDEO "/root/interview.mp4" FROM "00:01:30" TO "00:03:00" INTO "/root/clip.mp4" SET ?out AFTER EMIT ?out
Try it ›
TRIM AUDIO "/root/podcast.mp3" FROM "00:00:00" TO "00:05:00" INTO "/root/intro.mp3" SET ?out AFTER EMIT ?out

Joining

VerbModifiersDescription
SPLICE "/root/a"WITH "/root/b" INTO "/root/out"Join two clips end to end
CONCAT MEDIA "/root/a"WITH "/root/b" INTO "/root/out"Alias for SPLICE
SPLICE "/root/clip1.mp4" WITH "/root/clip2.mp4" INTO "/root/joined.mp4" SET ?out AFTER EMIT ?out
Try it ›
(* Join three clips — chain two SPLICEs *) SPLICE "/root/a.mp4" WITH "/root/b.mp4" INTO "/root/tmp_ab.mp4" SET ?ab AFTER SPLICE ?ab WITH "/root/c.mp4" INTO "/root/final.mp4" SET ?out AFTER EMIT ?out

Frame & clip operations

VerbModifiersDescription
EXTRACT FRAME "/root/v"AT "HH:MM:SS" INTO "/root/frame.jpg"Extract one frame as image
INSERT FRAME "/root/img"INTO "/root/base.mp4" AT "HH:MM:SS" FROM "3" TO "/root/out"Insert a still image at timestamp. FROM = display duration in seconds. TO = output path.
INSERT CLIP "/root/clip"INTO "/root/base.mp4" AT "HH:MM:SS" FROM "5" TO "/root/out"Insert a clip at timestamp. FROM = max duration. Add USING "loop" to loop the clip.
REPLACE FRAME "/root/v"WITH "/root/img" FROM "HH:MM:SS" TO "HH:MM:SS" INTO "/root/out"Replace a time range with a still image
REPLACE CLIP "/root/base"WITH "/root/clip" FROM "HH:MM:SS" TO "HH:MM:SS" INTO "/root/out"Replace a time range with another clip
EXTRACT FRAME "/root/video.mp4" AT "00:00:05" INTO "/root/thumb.jpg" SET ?frame AFTER EMIT ?frame
Try it ›
(* Insert a title card image at the start for 3 seconds *) INSERT FRAME "/root/title.jpg" INTO "/root/video.mp4" AT "00:00:00" FROM "3" TO "/root/out.mp4" SET ?out AFTER EMIT ?out
(* Replace a time range with another clip *) REPLACE CLIP "/root/base.mp4" WITH "/root/correction.mp4" FROM "00:01:00" TO "00:01:30" INTO "/root/fixed.mp4" SET ?out AFTER EMIT ?out

Audio operations

VerbModifiersDescription
EXTRACT AUDIO "/root/v"INTO "/root/out.mp3"Extract audio track from video as MP3
REPLACE AUDIO "/root/v"WITH "/root/audio" INTO "/root/out"Swap video audio track with a new audio file
NORMALIZE AUDIO "/root/a"INTO "/root/out"Normalise loudness (EBU R128)
SET VOLUME "/root/a"WITH "1.5" INTO "/root/out"Adjust volume. 1.0 = original, 1.5 = 50% louder, 0.5 = half
PITCH AUDIO "/root/a"WITH "1.2" INTO "/root/out"Change pitch. 1.0 = unchanged, 1.2 = higher, 0.8 = lower
MIX AUDIO "/root/a"WITH "/root/b" INTO "/root/out"Mix two audio tracks together
FADE AUDIO "/root/a"AS "in"|"out" WITH "1.0" FROM "0" INTO "/root/out"Fade in or out. WITH = duration in seconds. FROM = start offset.
MUTE VIDEO "/root/v"INTO "/root/out"Remove audio track from video
EXTRACT AUDIO "/root/video.mp4" INTO "/root/audio.mp3" SET ?out AFTER NORMALIZE AUDIO ?out INTO "/root/clean.mp3" SET ?clean AFTER EMIT ?clean
Try it ›
MIX AUDIO "/root/voiceover.mp3" WITH "/root/bgmusic.mp3" INTO "/root/mixed.mp3" SET ?out AFTER EMIT ?out
FADE AUDIO "/root/music.mp3" AS "in" WITH "3.0" FROM "0" INTO "/root/out.mp3" SET ?out AFTER EMIT ?out
PITCH AUDIO "/root/voice.mp3" WITH "1.15" INTO "/root/pitched.mp3" SET ?out AFTER EMIT ?out
(* Replace a video's audio with a new track *) REPLACE AUDIO "/root/video.mp4" WITH "/root/newtrack.mp3" INTO "/root/final.mp4" SET ?out AFTER EMIT ?out

Video effects

VerbModifiersDescription
OVERLAY "/root/base"WITH "/root/img" INTO "/root/out" AT "x:y"Composite an image over video at pixel position. Default: bottom-right 10px margin.
SUBTITLE "/root/v"WITH "/root/subs.srt" INTO "/root/out"Burn in SRT subtitles
TEXT ON VIDEO "/root/v"WITH "text" INTO "/root/out" AT "x:y" FROM "36" AS "white" USING "/root/font.ttf"Burn text. AT = position, FROM = font size, AS = colour, USING = font file (optional)
BLUR VIDEO "/root/v"WITH "5" INTO "/root/out"Box blur. WITH = radius.
COLOR GRADE "/root/v"WITH "contrast=1.2:saturation=1.3" INTO "/root/out"Adjust eq filter params: brightness, contrast, saturation, gamma
MIRROR VIDEO "/root/v"AS "horizontal"|"vertical" INTO "/root/out"Flip. Default: horizontal.
REVERSE VIDEO "/root/v"INTO "/root/out"Play backwards (video and audio)
FREEZE FRAME "/root/v"AT "HH:MM:SS" WITH "3.0" INTO "/root/out"Freeze at timestamp for N seconds, then continue. WITH = freeze duration.
BOOMERANG VIDEO "/root/v"INTO "/root/out"Forward then reverse — Instagram Boomerang effect
LOOP VIDEO "/root/v"WITH "3" INTO "/root/out"Loop N times. WITH = loop count.
STABILIZE VIDEO "/root/v"INTO "/root/out"Two-pass motion stabilisation (vidstab)
FADE VIDEO "/root/v"AS "in"|"out" WITH "2.0" FROM "0" INTO "/root/out"Video fade. AS = direction, WITH = duration, FROM = start offset.
GREEN SCREEN "/root/v"WITH "/root/bg" INTO "/root/out" AS "0x00FF00" FROM "0.1" TO "0.05"Chroma key. AS = key colour, FROM = similarity, TO = blend edge.
SPLIT SCREEN "/root/a"WITH "/root/b" INTO "/root/out" AS "horizontal"|"vertical"Side-by-side or top-bottom split
TRANSITION VIDEO "/root/a"WITH "/root/b" INTO "/root/out" FROM "1.0"Crossfade transition between two clips. FROM = transition duration in seconds.
OVERLAY "/root/video.mp4" WITH "/root/logo.png" INTO "/root/branded.mp4" AT "10:10" SET ?out AFTER EMIT ?out
Try it ›
TEXT ON VIDEO "/root/video.mp4" WITH "Engineering Magic" INTO "/root/titled.mp4" AT "x=(w-text_w)/2:y=h-80" FROM "42" AS "white" SET ?out AFTER EMIT ?out
COLOR GRADE "/root/raw.mp4" WITH "contrast=1.3:saturation=1.4:brightness=0.05" INTO "/root/graded.mp4" SET ?out AFTER EMIT ?out
GREEN SCREEN "/root/shoot.mp4" WITH "/root/background.jpg" INTO "/root/composited.mp4" SET ?out AFTER EMIT ?out
SPLIT SCREEN "/root/cam1.mp4" WITH "/root/cam2.mp4" INTO "/root/dual.mp4" AS "horizontal" SET ?out AFTER EMIT ?out
TRANSITION VIDEO "/root/scene1.mp4" WITH "/root/scene2.mp4" INTO "/root/final.mp4" FROM "1.5" SET ?out AFTER EMIT ?out
BOOMERANG VIDEO "/root/clip.mp4" INTO "/root/boomclip.mp4" SET ?out AFTER EMIT ?out
FREEZE FRAME "/root/video.mp4" AT "00:00:03" WITH "5.0" INTO "/root/frozen.mp4" SET ?out AFTER EMIT ?out
STABILIZE VIDEO "/root/shaky.mp4" INTO "/root/stable.mp4" SET ?out AFTER EMIT ?out

Full production pipeline

(* Trim, add title card, grade, add subtitle, watermark, export *) TRIM VIDEO "/root/raw.mp4" FROM "00:00:10" TO "00:05:00" INTO "/root/trimmed.mp4" SET ?trimmed AFTER INSERT FRAME "/root/title.jpg" INTO ?trimmed AT "00:00:00" FROM "3" TO "/root/with_title.mp4" SET ?titled AFTER COLOR GRADE ?titled WITH "contrast=1.2:saturation=1.3" INTO "/root/graded.mp4" SET ?graded AFTER SUBTITLE ?graded WITH "/root/subs.srt" INTO "/root/subbed.mp4" SET ?subbed AFTER OVERLAY ?subbed WITH "/root/logo.png" INTO "/root/final.mp4" AT "10:10" SET ?final AFTER SHARE ?final SET ?url AFTER EMIT ?url