Skip to content
CAI
Software that uses CAICheck a score

talklittle/ffmpex

66.3

Adequate · 18 September 2026

862

lines of production code

Elixir

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

FFmpex is an Elixir library that provides a structured wrapper for executing FFmpeg and FFprobe commands. It enables users to construct media processing pipelines by defining per-file, per-stream, and global options with explicit context validation. The system handles command preparation and execution, returning standardized results for successful operations or detailed error information.

Features

Added libavformat options and documented libx264 module

The library now supports FFmpeg's libavformat format options (such as probesize, packetsize, and fflags) for both input and output contexts, allowing users to control demuxing and muxing behavior. Additionally, the libx264 encoder options module has been updated to include documentation linking to the official FFmpeg libx264 reference.

lib/ffmpex/options/video · high confidence

Initial release of FFmpex 0.1.0

This entry marks the initial release of FFmpex, an Elixir wrapper for the FFmpeg command line interface. The diff establishes the project's foundational structure, including the first version (0.1.0) in the changelog, a \.formatter.exs\ for code formatting, and a \README.md\ detailing installation and basic usage. The library supports specifying per-file and per-stream options to execute FFmpeg commands.

(repo-wide) · high confidence

Behavioural changes

Adds context restrictions and documentation to FFmpeg options

The options modules (main, audio, video, subtitle, advanced, and the new muxers module) now include explicit context restrictions (e.g., :input, :output, :global, :per\_stream) for FFmpeg flags, ensuring options are only applied in valid command-line positions. Deprecated loop options have been replaced with the unified -loop flag, and new options like -max\_muxing\_queue\_size and -disposition have been added. All modules now link to the official FFmpeg documentation.

lib/ffmpex/options · high confidence

FFmpex API overhaul: new return types, context validation, and FFprobe module

The library introduces a new \FFprobe\ module for analyzing media files (duration, format, streams) via JSON output, and significantly updates the \FFmpex\ API. The \execute/1\ function now returns \{:ok, output}\ or \{:error, {output, status}}\ tuples instead of raw system results, and a new \prepare/1\ helper allows command construction without immediate execution. Option handling now requires explicit context validation (global, file, stream) to prevent misconfiguration, and stream specifiers are passed as keyword lists rather than opaque structs.

lib · high confidence

Introduction of structured option definitions and import convenience

The library now provides a centralized \FFmpex.Options\ module that allows users to import all available FFmpeg option helpers via a single \use FFmpex.Options\ call, simplifying the API surface. This change introduces specific option modules for devices (Libavdevice) and formats (Image2), defining parameters like \video\_size\ and \pattern\_type\ with explicit context constraints (e.g., input-only). Internally, the \FFmpex.Option\ struct has been extended with a \contexts\ field to track where each option is valid, and several internal modules (\Command\, \File\, \StreamSpecifier\) have had their documentation hidden to clarify the public API.

lib/ffmpex · high confidence

Migrate configuration syntax to modern Elixir standard

The application's configuration file has been updated to use the modern \import Config\ syntax, replacing the deprecated \use Mix.Config\ module. This change aligns the project with current Elixir standards for configuration management, ensuring compatibility with newer versions of the language and its tooling.

config · high confidence

Test coverage

Added test coverage for FFprobe and FFmpex core functionality

Added comprehensive tests for the FFprobe module, verifying duration extraction (including N/A handling), format and stream inspection for local and remote files, and error handling for missing or invalid media. Updated FFmpex tests to validate the new options API structure, command execution with bitrate and rate control options, manual option struct support, argument preparation, and stdout output capture.

test · high confidence

Dependencies

Upgrade dependencies and raise Elixir requirement to 1.12

This release updates the project's dependency list and raises the minimum required Elixir version from 1.3 to 1.12. The \mix.exs\ file now explicitly declares \jason\ (JSON library) and \rambo\ (process execution) as dependencies, replacing previous implicit or different implementations. Additionally, the project configuration has been modernized to use \extra\_applications\ instead of the deprecated \applications\ key, and documentation packaging (\ex\_doc\) and Hex package metadata have been added to the project definition.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 66.

Lenses

  • Code Health 100
  • Architecture 69
  • Maturity 59
  • Readiness 62
  • Security 100

Changes since last survey

  • 137 commits — 127 feature/other, 10 fixes

By area

  • (root) — 75 commits
  • lib/ffmpex — 20 commits
  • lib/ffprobe.ex — 12 commits
  • (repo) — 10 commits
  • lib/ffmpex.ex — 10 commits
  • .github/workflows — 5 commits
  • test/ffmpex_test.exs — 4 commits
  • config/config.exs — 1 commit

Notable commits

  • fix: Fix spec in FFmpex.prepare/1 (#22)
  • fix: README: fix installation code blocks
  • fix: Revert "test: increase maxrate"
  • fix: Travis CI: "group: edge" to fix Elixir installation
  • fix: ci: fix installation of FFmpeg
  • fix: deps: fix SHELL env check for erlexec
  • fix: erlexec: fix starting as root
  • fix: fix Elixir 1.4 warnings in docs and test
  • fix: options: fix contexts (:output) for muxdelay and muxpreload
  • fix: test: fix failures on FFmpeg 7.0.1
  • change: API: execute/1 returns :ok or {:error, {output, status}}
  • change: API: hide opaque struct StreamSpecifier
  • change: Add pattern_type option (#37)
  • change: Add verbosity flag
  • change: Adds :ok tuples to public FFprobe functions (#23)
  • change: Allow format that filename has space
  • change: FFprobe: String.strip instead of trim for Elixir pre-1.3
  • change: FFprobe: duration/1
  • change: FFprobe: duration/1 handle N/A
  • change: HLS and Mux options (#43)
  • …and 117 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

talklittle/ffmpex was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 18 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 145880c653ffeede010b9fa30be52759b6a1fde8 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-5d04157a340d.