🎬 Execute ffmpeg command
Executes raw FFmpeg commands for advanced video/audio processing. Returns a Cloudinary URL of the processed file.
CONSTRAINTS:
- Command starts with 'ffmpeg'
- No chaining (&&, ||, $(), >, eval, exec)
- No system access (rm, wget, curl, /etc/, /bin/)
- Max: 2048px width, 200M bitrate, 1200s duration
- Output: .mp4 (video), .png/.jpg (image), .mp3 (audio)
SPEED OPTIMIZATION:
For faster encoding, add: -preset veryfast -tune zerolatency
- Yields 3-10x speedup over defaults
- Trade-off: slightly larger file size, minimal quality loss
WHEN TO USE:
Use only when template functions cannot achieve the effect:
- stitch_videos → video concatenation
- trim_video → cutting video segments
- add_subtitles_to_video → captions
- create_video_from_assets → combining images/videos
VIDEO CONCATENATION:
If you must concatenate manually instead of using stitch_videos:
1. Don't assume all inputs have audio. Use a=0 in concat, then handle audio separately:
- For passthrough (no manipulation): -map 1:a? makes audio optional
- For manipulation (apad, etc): [1:a]apad[outa] - but fails if no audio exists
- If unsure whether source has audio, use -map 1:a? without filter_complex audio processing
2. Always normalize resolution, fps, pixel format, AND SAR before concat:
[0:v]scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720,fps=30,format=yuv420p,setsar=1[v0];
[1:v]scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720,fps=30,format=yuv420p,setsar=1[v1];
[v0][v1]concat=n=2:v=1:a=0:unsafe=1[outv]
3. Never change aspect ratio. Use crop to fill frame, not pad/stretch.
SAFE CROPPING:
Crop formulas can fail if assumptions about input orientation are wrong.
BAD - Assumes landscape, fails on portrait (width becomes larger than source):
crop=in_h*9/16:in_h → Error: "Invalid too big or non positive size"
GOOD - Use min() to clamp dimensions safely:
crop=min(in_w,in_h*9/16):min(in_h,in_w*16/9)
For 9:16 vertical crop (works on any input):
crop=min(in_w,in_h*9/16):min(in_h,in_w*16/9):(in_w-min(in_w,in_h*9/16))/2:(in_h-min(in_h,in_w*16/9))/2
For 16:9 horizontal crop (works on any input):
crop=min(in_w,in_h*16/9):min(in_h,in_w*9/16):(in_w-min(in_w,in_h*16/9))/2:(in_h-min(in_h,in_w*9/16))/2
EXAMPLES:
Fast color correction + resize:
ffmpeg -i input.mp4 -vf "eq=brightness=0.1:saturation=1.2,scale=1280:720" -preset veryfast output.mp4
Extract audio:
ffmpeg -i video.mp4 -vn -acodec libmp3lame -ab 192k audio.mp3
Fade effect:
ffmpeg -i input.mp4 -vf "fade=t=in:st=0:d=2,fade=t=out:st=8:d=2" output.mp4
Last frame extraction:
ffmpeg -sseof -3 -i "https://..." -vsync 0 -update 1 output.png
Fast multi-video concat with crop:
ffmpeg -i v1.mp4 -i v2.mp4 -filter_complex "[0:v]scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720,fps=30,format=yuv420p,setsar=1[a];[1:v]scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720,fps=30,format=yuv420p,setsar=1[b];[a][b]concat=n=2:v=1:a=0:unsafe=1[v]" -map "[v]" -preset veryfast output.mp4
Public
14.8k