# What is FFmpeg? The engine inside almost every video app

> FFmpeg is the open-source engine powering media players, editors, and streaming sites. Learn what it does, how it works, and why your player relies on it.

Published 2026-10-31 · Libraries & tools · https://www.hazenstudio.com/maclc/blog/what-is-ffmpeg/

## In short

- FFmpeg is an open-source multimedia framework of command-line tools and modular C libraries for decoding, encoding, and remuxing audio and video.
- Core libraries like libavcodec and libavformat power everyday applications including VLC, mpv, HandBrake, Google Chrome, and cloud transcoders.
- FFmpeg can remux containers in seconds without re-encoding, unlike dedicated transcoders that recompress every frame.
- MacLC embeds FFmpeg libraries directly inside its application bundle, giving you universal playback on Apple Silicon without installing command-line tools.

FFmpeg is a free, open-source multimedia framework that can decode, encode, transcode, remux, filter, and stream almost every digital audio and video format in existence. It exists both as a set of standalone command-line tools for your terminal and as a collection of modular software libraries that power the video playback and conversion engines inside popular apps.

Whenever you open a video in VLC, convert a clip in HandBrake, play a video in Google Chrome, or watch a stream transcoded on YouTube, FFmpeg code is running behind the scenes. Created in 2000 by French programmer Fabrice Bellard, the project has grown into the foundational infrastructure of modern digital video across macOS, Linux, Windows, and mobile operating systems.

## What is FFmpeg and how does it work?

At its core, FFmpeg is a complete pipeline for processing digital media streams. Digital video does not arrive as uncompressed frames: a single second of uncompressed 4K video at 60 frames per second would consume more than one gigabyte of storage. Instead, cameras and editing software compress video using codecs and wrap those streams into container files.

FFmpeg processes that media in discrete steps. First, it identifies the container file, such as an MKV, MP4, WebM, or MOV wrapper. Next, it splits the container into independent data streams: video, audio tracks, subtitles, chapter markers, and metadata.

Once the streams are separated, FFmpeg routes each to its matching decoder. The decoder reconstructs the compressed packets into raw pixel surfaces and audio waveforms in memory. If you are converting the file, its filtering engine can scale the image, convert color spaces, or adjust frame rates before passing the raw data to an encoder. The encoder recompresses the stream into a new format, and the multiplexer writes it into a new container.

Because FFmpeg supports hundreds of audio and video formats, it handles older camcorder formats just as reliably as modern 10-bit HDR streams.

*Inside a player: from file to screen*

## What are the core libraries inside FFmpeg?

While command-line users call `ffmpeg -i input.mp4`, software developers rarely interact with the terminal binary directly. Instead, applications link against FFmpeg's shared C libraries:

- **libavcodec**: Contains hundreds of software audio and video decoders and encoders. It translates bitstreams of H.264, HEVC, VP9, AV1, ProRes, MP3, AAC, FLAC, AC-3, and Dolby Digital into uncompressed video frames and audio samples.
- **libavformat**: The demuxing and muxing library. It reads and writes container formats, parsing headers and packet timings for MKV, MP4, AVI, WebM, TS, MOV, Ogg, and streaming protocols like HLS and DASH.
- **libavutil**: A shared utility library providing mathematical helpers, memory management routines, string parsers, and pixel format definitions used across all FFmpeg components.
- **libavfilter**: A graph-based media filtering framework for cropping, rotating, scaling, watermarking, tone mapping, deinterlacing, audio equalization, and volume normalization.
- **libswscale**: An image scaling and color conversion library. It converts pixel color formats, such as turning YUV 4:2:0 footage into RGB surfaces for display, and resizes frames.
- **libswresample**: An audio resampling library that changes sample rates (such as 48 kHz to 44.1 kHz), shifts sample formats, and handles matrix downmixing from 5.1 surround sound to stereo.

Developers combine these libraries to build media applications without writing low-level decompression algorithms or container parsers from scratch. For more on how containers and codecs interact, see our guide to [what is a codec](/maclc/blog/what-is-a-codec/).

## What everyday apps use FFmpeg under the hood?

Almost every application that plays, edits, or streams video relies on FFmpeg. Because the libraries are open-source and modular, they have been adopted across the industry.

| Application or Service | How It Uses FFmpeg | Primary Component |
| :--- | :--- | :--- |
| **VLC media player** | Demuxes complex containers and decodes video formats not handled by operating system frameworks | `libavcodec`, `libavformat` |
| **mpv and IINA** | Core decoding engine, container demuxing, and software filtering pipeline on macOS | `libavcodec`, `libavfilter` |
| **HandBrake** | Universal decoding backend and software encoding pass for MP4 and MKV creation | `libavcodec`, `libavformat` |
| **Google Chrome & Chromium** | Decodes royalty-free web audio and video formats, WebM containers, and Opus streams | `libavcodec`, `libavformat` |
| **Blender** | Video Sequence Editor (VSE) audio/video import and timeline rendering export | `libavcodec`, `libavformat` |
| **Audacity** | Optional import and export library for proprietary audio codecs like AAC, AC-3, and WMA | `libavformat`, `libavcodec` |
| **Plex & Jellyfin** | Server-side transcoders that recompress high-bitrate media files into web-friendly H.264 streams | Custom FFmpeg builds |
| **YouTube & Vimeo** | Cloud ingestion servers that take uploaded master videos and encode multi-resolution streaming ladders | Large-scale FFmpeg clusters |

When you install media software on your Mac, you are often running a custom compilation of FFmpeg inside an AppKit interface. For a breakdown of how VLC structures these components, see our guide on [what is libVLC](/maclc/blog/what-is-libvlc/).

## What is the difference between FFmpeg and HandBrake?

While HandBrake uses FFmpeg under the hood, the two tools serve different purposes and operate with different philosophies.

HandBrake is a graphical transcoder designed to convert video files or unprotected discs into MP4, MKV, or WebM files suitable for phones, tablets, or media servers. HandBrake always re-encodes the video track. Even if your original file contains clean H.264 video, HandBrake decodes every frame and compresses it again through an encoder like x264 or Apple Silicon's VideoToolbox. Re-encoding takes time, uses battery, and introduces slight generation loss in quality.

FFmpeg can manipulate streams without re-encoding them. By passing the stream-copy argument (`-c copy`), FFmpeg extracts compressed packets from one container and wraps them into another in two to three seconds. For instance, if an MKV file containing H.264 video will not open in QuickTime, FFmpeg can repackage it into an MP4 file without altering the video data.

FFmpeg also handles audio extraction, frame-accurate cutting, stream analysis, and batch automation through shell scripts. For more details on transcoding, read our guide to [HandBrake on Mac](/maclc/blog/handbrake-on-mac/). For practical stream-copying commands, check our [FFmpeg commands cheat sheet](/maclc/blog/ffmpeg-commands-cheat-sheet/).

## How is FFmpeg licensed: LGPL vs GPL?

FFmpeg is released under the GNU Lesser General Public License version 2.1 or later (LGPL-2.1-or-later). The LGPL allows both open-source and proprietary commercial applications to link against FFmpeg's shared dynamic libraries without open-sourcing the application's own code, provided users can replace those shared libraries.

FFmpeg also includes optional build flags for third-party libraries under the GNU General Public License (GPL-2.0 or GPL-3.0). If you compile FFmpeg with `--enable-gpl` to include software encoders like `libx264` (for H.264) or `libx265` (for HEVC), the entire resulting binary is covered by the GPL.

Under GPL terms, any application that statically links or embeds that combined binary must distribute its complete source code under the GPL. Proprietary streaming apps and web browsers usually compile FFmpeg under pure LGPL terms using system hardware encoders, while open-source projects often use the full GPL build to include software encoders. Review the details on the [FFmpeg legal page](https://ffmpeg.org/legal.html).

## What tools are included in the FFmpeg package?

The FFmpeg project distributes three distinct command-line executables:

1. **ffmpeg**: The primary command-line engine for transcoding, remuxing, filtering, and streaming multimedia files. It processes input files, applies specified filters, and writes the output to files or network streams.
2. **ffprobe**: A stream analyzer. Instead of converting files, `ffprobe` displays technical metadata about containers and streams, reporting codec names, pixel formats, frame rates, color primaries, and bitrates in text or JSON. Learn more in our guide on [how to use ffprobe](/maclc/blog/how-to-use-ffprobe/).
3. **ffplay**: A minimalist media player built on SDL. Developers use it to preview streams, test filter graphs, and inspect decoding behavior without opening a full media player.

## How does FFmpeg use Apple Silicon hardware acceleration?

On Apple Silicon Macs (M1 through M4 chips), video encoding and decoding can run either in software on CPU cores or offloaded to hardware via macOS's [Apple VideoToolbox framework](https://developer.apple.com/documentation/videotoolbox).

Software decoding forces CPU cores to compute decompression algorithms for every frame. While Apple Silicon chips handle 4K video easily, software decoding consumes more battery power and creates heat during playback. With VideoToolbox enabled, FFmpeg sends compressed bitstreams to dedicated hardware decoders, lowering CPU usage.

For encoding, FFmpeg includes VideoToolbox encoder modules: `h264_videotoolbox` for H.264 and `hevc_videotoolbox` for HEVC. These hardware encoders transcode video rapidly while keeping fans quiet.

Hardware encoding involves a trade-off. Dedicated hardware circuits prioritize speed and power efficiency over compression density. Software encoders like `libx265` using Constant Rate Factor (CRF) rate control can produce files that are 20% to 30% smaller than VideoToolbox encodes at comparable visual quality, though software encoding requires more time and CPU power.

MacLC incorporates VLC 4.0's core engine, embedding FFmpeg's decoding libraries and dav1d directly inside the macOS application bundle. You get complete support for MKV, WebM, MP4, AV1, and legacy codecs right out of the box, with zero terminal commands, zero package managers, and zero dependencies to configure.

## Do you need to install FFmpeg on your Mac?

Whether you need to install FFmpeg depends on your workflow:

1. **If you only want to watch videos:** You do not need to install FFmpeg. Modern macOS video players like MacLC, VLC, and IINA package their own copies of `libavcodec` and `libavformat` inside the application bundle. They do not require a system-wide FFmpeg installation.
2. **If you want to run batch scripts or command-line utilities:** You should install FFmpeg. Tools like `yt-dlp` require a standalone FFmpeg binary to merge separate video and audio streams after downloading them.
3. **If you want to remux files without re-encoding:** Installing FFmpeg lets you remux MKV files to MP4 in seconds, extract soundtrack audio, or remove unwanted subtitle tracks from the terminal.

On Apple Silicon Macs, the most direct way to install the command-line suite is through Homebrew using `brew install ffmpeg`. This places native ARM64 binaries in `/opt/homebrew/bin/`. For a step-by-step walkthrough, see our guide on [how to install FFmpeg on Mac](/maclc/blog/how-to-install-ffmpeg-on-mac/).

## What to do next

If you work with media files, learning the basics of FFmpeg will save you hours of waiting for transcoders. Read our [how to install FFmpeg on Mac](/maclc/blog/how-to-install-ffmpeg-on-mac/) guide, and keep our [FFmpeg commands cheat sheet](/maclc/blog/ffmpeg-commands-cheat-sheet/) handy for stream-copying and audio extraction commands.

If your primary goal is watching movies and personal videos without format conflicts, you do not need terminal tools. Download [MacLC](/maclc/donate/) to get Apple Silicon playback across major container and codec formats with hardware acceleration, custom audio modes, and no terminal setup.

## Questions people ask

### What does FFmpeg stand for?

The "FF" stands for "Fast Forward" (borrowed from video player transport controls), and "MPEG" refers to the Moving Picture Experts Group that created standard digital video formats like MP4 and H.264.

### Is FFmpeg safe to use on a Mac?

Yes. FFmpeg is an open-source project maintained by international developers since 2000. It contains no spyware, telemetry, or advertising. When installed through Homebrew or official project sources, it is secure.

### What is the difference between FFmpeg and HandBrake?

FFmpeg is a versatile command-line engine and library suite that can transcode, stream, filter, and losslessly remux files. HandBrake is a desktop graphical transcoder that uses FFmpeg libraries under the hood but always re-encodes video rather than copying streams.

### Do I need to install FFmpeg to play videos on my Mac?

No. While command-line tools require installing FFmpeg via Homebrew, dedicated media players like MacLC and VLC bundle FFmpeg's decoding libraries inside the app, so you never have to touch a terminal.

---
MacLC is a free, open-source video player for Apple Silicon Macs: https://www.hazenstudio.com/maclc/ · download: https://www.hazenstudio.com/maclc/donate/
