# ffmpeg

Комплексный, кроссплатформенный проект для обработки мультимедиа, содержащий библиотеки и инструменты для записи, конвертации, потоковой передачи и воспроизведения аудио и видео. Он поддерживает огромное количество кодеков, контейнеров и протоколов, что делает его универсальным решением для работы с мультимедиа.

## Особенности

- полная кросс-платформенность (Linux, macOS, Windows, Android, iOS);
- поддержка широкого спектра аудио- и видеоформатов, включая редкие и устаревшие;
- мощный набор инструментов для командной строки (ffmpeg, ffprobe, ffplay);
- модульная архитектура с возможностью статической или динамической компоновки;
- высокая производительность и низкие накладные расходы, поддержка аппаратного ускорения;
- открытая лицензия (LGPL/GPL) с возможностью коммерческого использования;
- поддержка потоковой передачи через HTTP, RTMP, RTSP, HLS, DASH и другие протоколы;
- расширяемость через систему фильтров и возможность подключения внешних кодеков.

## Основные компоненты

FFmpeg состоит из набора библиотек, каждая из которых отвечает за определённый аспект обработки мультимедиа (подробнее с документацией можно ознакомиться [здесь](https://ffmpeg.org/documentation.html)). Архитектура проекта позволяет использовать библиотеки как вместе, так и по отдельности в зависимости от задач.

### Обработка аудио и видео

Библиотеки FFmpeg предоставляют низкоуровневый API для декодирования, кодирования, фильтрации и мультиплексирования медиапотоков. Они позволяют программно работать с аудио и видео на уровне кадров и сэмплов, обеспечивая полный контроль над процессом обработки.

Ключевые библиотеки:

- `libavcodec` — библиотека кодирования и декодирования аудио/видео, содержащая более 1000 кодеков;
- `libavformat` — библиотека для работы с медиаконтейнерами (мультиплексирование и демультиплексирование);
- `libavfilter` — система фильтров для обработки и преобразования медиапотоков с поддержкой графов обработки;
- `libavutil` — вспомогательные утилиты и структуры данных, включая математические функции, хеширование, CRC;
- `libswscale` — масштабирование и конвертация цветовых пространств изображений с оптимизациями под различные архитектуры CPU;
- `libswresample` — передискретизация, микс и конвертация аудиосэмплов с поддержкой различных форматов;
- `libpostproc` — библиотека постобработки видео (устаревшая, но сохраняется для совместимости).

### Кодеки и форматы

FFmpeg поддерживает сотни кодеков и медиаформатов, обеспечивая совместимость практически с любым существующим медиаконтентом. Поддержка включает как современные форматы (HEVC, AV1, Opus), так и устаревшие. Библиотека постоянно обновляется для поддержки новых стандартов.

Примеры поддерживаемых кодеков:

- **Видео:** H.264, HEVC, VP9, AV1, MPEG-2, MPEG-4, ProRes, DNxHD, MJPEG, VC-1;
- **Аудио:** AAC, MP3, Opus, Vorbis, FLAC, PCM, AC-3, DTS, WMA, ALAC;
- **Контейнеры:** MP4, MKV, AVI, MOV, MPEG-TS, WebM, FLV, OGG, WAV, MP3;
- **Субтитры:** SRT, ASS, WebVTT, DVD субтитры, Teletext;
- **Протоколы:** HTTP, HTTPS, RTMP, RTSP, HLS, DASH, FTP, SMB, RTP, UDP.

### Фильтры и обработка в реальном времени

Система фильтров FFmpeg позволяет применять сложные цепочки преобразований к аудио и видео потокам, включая масштабирование, обрезку, наложение, цветокоррекцию, шумоподавление и многие другие операции. Фильтры можно комбинировать для создания сложных графиков обработки.

Примеры фильтров:

- `scale` — изменение разрешения видео с различными алгоритмами интерполяции;
- `crop` — обрезка кадра по заданным координатам;
- `overlay` — наложение одного видео на другое с поддержкой альфа-канала;
- `eq` — коррекция цвета, яркости, контрастности и насыщенности;
- `volume` — регулировка громкости аудио с поддержкой нормализации;
- `concat` — склейка нескольких потоков без перекодирования;
- `drawtext` — наложение текста на видео с поддержкой шрифтов и эффектов;
- `fade` — эффекты плавного появления и исчезновения;
- `hwupload` и `hwdownload` — загрузка и выгрузка кадров в аппаратную память для ускоренной обработки.

### Утилиты командной строки

FFmpeg включает несколько готовых инструментов для работы с медиафайлами без необходимости написания кода. Эти утилиты предоставляют мощный интерфейс для автоматизации задач обработки мультимедиа и широко используются в скриптах и системах автоматизации.

Основные инструменты:

- `ffmpeg` — универсальный конвертер и процессор медиафайлов, поддерживающий тысячи параметров;
- `ffprobe` — анализ медиафайлов и извлечение метаданных, информации о кодеках и потоках;
- `ffplay` — простой медиаплеер для воспроизведения и тестирования с поддержкой фильтров в реальном времени.
