Overview
ffmpeg wraps the FFmpeg libraries (libavcodec, libavformat, libswscale, libswresample) — the universal multimedia toolkit. It can decode, encode, transcode, mux, demux, stream, filter, and play virtually any audio/video format.
CLib package
Ubuntu/Debian: sudo apt install libavcodec-dev libavformat-dev libavfilter-dev libswscale-dev libswresample-dev
Probe Media Info
uses ffmpeg;
var info := Probe('/videos/movie.mp4');
WriteLn('Format: ', info.Format);
WriteLn('Duration: ', FormatTime(info.Duration));
WriteLn('Size: ', info.Size div 1024 div 1024, ' MB');
WriteLn('Streams: ', info.StreamCount);
for I := 0 to info.StreamCount - 1 do begin
var s := info.Streams[I];
WriteLn(' [', s.Index, '] ', s.CodecType, ' — ', s.CodecName);
if s.CodecType = 'video' then
WriteLn(' ', s.Width, 'x', s.Height, ' @ ', s.FPS:0:2, ' fps');
if s.CodecType = 'audio' then
WriteLn(' ', s.SampleRate, 'Hz ', s.Channels, 'ch');
end;
// Quick helpers
WriteLn(VideoSize('/videos/movie.mp4')); // "1920x1080"
WriteLn(FPS('/videos/movie.mp4'):0:2); // "29.97"
WriteLn(Duration('/videos/clip.mp4'):0:1); // "142.6"
Transcode
// Convert MKV → MP4 (auto codec selection)
Transcode('/in/movie.mkv', '/out/movie.mp4', '');
// Convert with quality options
Transcode('/in/4k.mp4', '/out/1080p.mp4', '-vf scale=1920:-1 -crf 23 -preset fast');
// Specific codecs
TranscodeVideo('/in/video.avi', '/out/video.mp4', 'libx264', 'aac');
// Fast remux (no re-encoding)
Remux('/in/video.mkv', '/out/video.mp4');
Extract Frames
// Single frame at 30 seconds
ExtractFrame('/videos/movie.mp4', '/out/frame.jpg', 30.0);
// 10 evenly-spaced thumbnails
ExtractThumbnails('/videos/movie.mp4', '/out/thumb_%04d.jpg', 10);
// 1 frame per second
ExtractFrames('/videos/timelapse.mp4', '/out/frame_%05d.png', 1.0);
// 30 fps — every frame
ExtractFrames('/videos/clip.mp4', '/out/frame_%05d.png', 30.0);
Audio Operations
// Extract audio track from video
ExtractAudio('/videos/movie.mp4', '/out/soundtrack.mp3');
ExtractAudio('/videos/movie.mp4', '/out/soundtrack.wav');
// Convert audio format
ConvertAudio('/audio/song.wav', '/audio/song.mp3', 192000); // 192 kbps
ConvertAudio('/audio/podcast.mp3', '/audio/podcast.aac', 128000);
// Trim to a segment (no re-encoding)
Trim('/videos/long.mp4', '/out/clip.mp4', 60.0, 120.0); // 60s–120s
// Mix audio tracks
MixAudio(['/audio/voice.wav', '/audio/bg.mp3'], '/out/mixed.mp3');
Video Operations
// Scale — keep aspect ratio
Scale('/in/4k.mp4', '/out/720p.mp4', 1280, -1);
// Concatenate clips
Concat(['/clips/intro.mp4', '/clips/main.mp4', '/clips/outro.mp4'], '/out/final.mp4');
// Change speed (2x faster)
SetSpeed('/in/clip.mp4', '/out/fast.mp4', 2.0);
// Slideshow from images
ImagesToVideo('/imgs/frame_%04d.jpg', '/out/timelapse.mp4', 24.0);
// Add watermark
AddWatermark('/in/video.mp4', '/assets/logo.png', '/out/branded.mp4', 20, 20);
Raw FFmpeg Command
// Run any FFmpeg operation
var out := FFmpegRun('-i /in/video.mp4 -vf "hflip" -c:a copy /out/flipped.mp4');
if FFmpegLastCode = 0 then
WriteLn('Done')
else
WriteLn('Error: ', out);
Package Info
Version1.0.0
Typeclib
Librarieslibav* + libsw*
Authorgustavo
Functions
- Probe
- Duration / FPS
- VideoSize
- Transcode
- TranscodeVideo
- Remux
- ExtractFrame
- ExtractThumbnails
- ExtractFrames
- ExtractAudio
- ConvertAudio
- MixAudio
- Trim
- Scale
- Concat
- SetSpeed
- ImagesToVideo
- AddWatermark
- FFmpegRun
- FFmpegLastCode
- FormatTime
- HasVideo / HasAudio
- FFmpegVersion