ffmpeg clib Multimedia

FFmpeg media processing. Transcode, extract frames, audio, probe info, convert formats.

ppm install ffmpeg

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