Перейти к основному содержимому

Где FFMPEG используется в реальных системах

06-01-03

В предыдущих разделах мы рассмотрели FFMPEG как универсальный инструмент для обработки медиаданных, способный работать с файлами, кодеками и контейнерами. Теперь пришло время выйти за пределы локальных операций и посмотреть, как FFMPEG применяется в реальных сетевых видеосистемах. В этой части лекции мы перейдём от теории к практике: покажем, как FFMPEG интегрируется в рабочие процессы, решая конкретные инженерные задачи. Основная идея — увидеть FFMPEG не как утилиту для перекодирования, а как гибкий медиашлюз, способный соединять разнородные технологии: камеры, медиасерверы, протоколы и архивы.


Основные сценарии использования FFMPEG

FFMPEG — это не просто «конвертер видео». Он представляет собой мощный движок, способный принимать, обрабатывать и перенаправлять медиапотоки в режиме реального времени. Ниже перечислены наиболее типичные кейсы, в которых FFMPEG становится ключевым компонентом видеосистемы.

Рестриминг: RTSP-камера → FFMPEG → RTMP/SRT/HLS

Один из самых распространённых сценариев — рестриминг видео с IP-камер на внешние платформы или локальные серверы. Представим ситуацию: у нас есть IP-камера, подключённая к сети и доступная по протоколу RTSP (например, rtsp://192.168.1.100:554/stream1). Однако нам нужно транслировать этот поток на YouTube или в локальный медиасервер, который принимает потоки по RTMP, SRT или HLS. Прямое подключение камеры к таким сервисам невозможно — именно здесь и вступает в игру FFMPEG.

Как это работает:

  1. FFMPEG подключается к RTSP-потоку камеры.
  2. Принимает видеопоток (и, при необходимости, аудио).
  3. Перепаковывает его в нужный формат (например, FLV для RTMP) и отправляет на целевой сервер.

Пример команды:

ffmpeg -rtsp_transport tcp -i rtsp://user:pass@192.168.1.100:554/stream1 \
-c copy -f flv rtmp://server/live/camera1
  • -rtsp_transport tcp — выбираем TCP для стабильного приёма.
  • -c copy — не перекодируем, а просто перепаковываем (ремультиплексируем) поток.
  • -f flv — указываем формат вывода, совместимый с RTMP.

💡 Почему это важно?
Многие камеры выдают H.264 в контейнере RTP/RTSP, но YouTube или медиасерверы ожидают RTMP в формате FLV. FFMPEG выступает как протокольный адаптер, скрывая эту несовместимость.

Где применяется:

  • Вещательные студии (трансляция с камер на CDN).
  • Умные города (вывод уличных камер на центральный мониторинг).
  • Образовательные платформы (прямые эфиры с лекций).

Запись: захват потока и сохранение в файл

Ещё одна фундаментальная задача — запись видеопотока в архив. Это может быть как непрерывная запись с камеры, так и сохранение WebRTC-сессии после видеоконференции.

Пример:

ffmpeg -i rtsp://camera_ip:554/stream -c copy -f matroska archive.mkv
  • -c copy — сохраняем видео без перекодирования, чтобы избежать потерь качества и нагрузки на CPU.
  • -f matroska — выбираем контейнер MKV, который хорошо поддерживает длительные записи и метаданные.

💡 Визуализация:
Представьте, что вы наблюдаете за трансляцией в реальном времени, а параллельно FFMPEG «копирует» каждый кадр в файл на диске. Это как одновременно смотреть телевизор и записывать передачу на видеомагнитофон.

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

  • Запись может вестись циклом (например, по 1 часу) с автоматическим созданием новых файлов.
  • Можно добавлять таймкоды, имена камер, геометку — всё это сохраняется в метаданных файла.

Где применяется:

  • Системы видеонаблюдения (VMS — Video Management Systems).
  • Архивация вебинаров и онлайн-курсов.
  • Юридические и медицинские записи (например, операционные залы).

Подготовка «картинки» для стрима: оверлеи, титры, PiP

FFMPEG умеет не только передавать и сохранять видео — он может модифицировать изображение, добавляя текст, логотипы, рамки и даже встраивая дополнительные видео.

Наложение текста (титры)

Пример: вывод названия камеры, времени или статуса «LIVE».

ffmpeg -i rtsp://cam -vf "drawtext=text='Камера 1':x=10:y=10:fontsize=24:fontcolor=white:box=1:boxcolor=black@0.7" \
-c:v libx264 -f flv rtmp://server/stream
  • drawtext — фильтр для наложения текста.
  • Можно использовать динамические значения: text='%{localtime\:%T}' — текущее время.

Водяные знаки и логотипы

ffmpeg -i rtsp://cam -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" -c:v libx264 -f flv rtmp://server/stream
  • overlay — наложение PNG-изображения с прозрачностью.
  • Логотип можно разместить в углу, изменить размер, настроить прозрачность.

Картинка в картинке (PiP — Picture-in-Picture)

Пример: докладчик в углу поверх презентации.

ffmpeg -i presentation.mp4 -i speaker.mp4 \
-filter_complex "[0:v][1:v]overlay=W-w-20:H-h-20" \
-c:v libx264 out.mp4
  • W и H — ширина и высота основного видео.
  • w и h — размер вставляемого видео.
  • W-w-20 — отступ 20 пикселей от правого края.

💡 Визуализация:
Это как телевизионный выпуск новостей: основной экран — сюжет, а в правом нижнем углу — ведущий в небольшом окне.

Где применяется:

  • Онлайн-курсы и вебинары.
  • Спортивные трансляции (счёт, таймер).
  • Телевизионные пакеты (брендирование, информационные строки).

Автоматические конвертеры: адаптация под VMS, CDN, архивы

Не все системы принимают одинаковые форматы. Например:

  • VMS может требовать MJPEG в AVI.
  • CDN — H.264 в HLS.
  • Архив — HEVC в MP4.

FFMPEG выступает как автоматический конвертер, который:

  • Принимает входной поток (файл или сеть).
  • Перекодирует его под требования целевой системы.
  • Отправляет результат.

Пример:

ffmpeg -i input.mp4 \
-vf scale=1280:720 -c:v libx264 -preset fast -b:v 2M \
-c:a aac -b:a 128k \
-f hls stream.m3u8
  • Адаптируем видео под HLS-трансляцию.
  • Уменьшаем разрешение и битрейт для экономии трафика.
  • Разбиваем на сегменты (.ts) и создаём плейлист (.m3u8).

💡 Почему это важно?
Без FFMPEG пришлось бы использовать несколько специализированных программ. Здесь же — один инструмент на все случаи жизни.

Где применяется:

  • Медиабэкенды онлайн-платформ.
  • Системы автоматической обработки контента (например, YouTube-каналы с роботизированной публикацией).
  • Интеграция старых камер с современными VMS.

Реальные примеры из практики

Чтобы лучше понять, как FFMPEG работает «в поле», рассмотрим несколько конкретных сценариев.

1. Вещательная студия: мозаика из камер

Задача: показать 4 камеры одновременно на одном экране (2×2 мозаика) и отправить результат в RTMP.

Решение:

ffmpeg -i rtsp://cam1 -i rtsp://cam2 -i rtsp://cam3 -i rtsp://cam4 \
-filter_complex "
[0:v]setpts=PTS-STARTPTS,scale=640:360[cam1];
[1:v]setpts=PTS-STARTPTS,scale=640:360[cam2];
[2:v]setpts=PTS-STARTPTS,scale=640:360[cam3];
[3:v]setpts=PTS-STARTPTS,scale=640:360[cam4];
[cam1][cam2][cam3][cam4]xstack=inputs=4:layout=0_0|640_0|0_360|640_360[out]
" \
-map "[out]" -c:v libx264 -f flv rtmp://server/mosaic
  • xstack — фильтр для создания мозаики.
  • setpts — выравнивание временных меток, чтобы кадры не «прыгали».

Применение:
Операторский пульт, видеостена, preview перед прямым эфиром.


2. Видеонаблюдение: ONVIF + RTSP + запись + рестриминг

Задача: подключиться к ONVIF-камере, записать видео в архив и одновременно отправить в RTMP.

Решение:

ffmpeg -rtsp_transport tcp -i rtsp://admin:pass@192.168.1.100:554/onvif1 \
-c:v copy -c:a copy -f matroska /archive/cam1.mkv \
-c:v libx264 -preset veryfast -c:a aac -f flv rtmp://cdn/live/cam1
  • Два выхода: один — для архива (без перекодирования), другой — для стрима (с перекодированием).
  • ONVIF предоставляет RTSP-URL, который используется как источник.

Применение:
Системы безопасности с функцией удалённого просмотра и архивации.


3. Онлайн-курсы: запись экрана + камера + титры

Задача: записать лекцию с демонстрацией экрана и веб-камеры, добавить название и время.

Решение (Linux):

ffmpeg -f x11grab -s 1920x1080 -i :0.0 \
-f v4l2 -i /dev/video0 \
-filter_complex "
[0:v]scale=1280:720[screen];
[1:v]scale=320:180[webcam];
[screen][webcam]overlay=main_w-overlay_w-10:10[text];
[text]drawtext=text='Лекция 6: FFMPEG':x=10:y=10:fontsize=24:fontcolor=white:box=1:boxcolor=black@0.7
" \
-c:v libx264 out.mp4
  • x11grab — захват экрана.
  • v4l2 — доступ к веб-камере.
  • Композиция: экран + камера в углу + титры.

Применение:
Автоматизированная запись лекций, вебинаров, обучающих видео.


Сводная таблица типичных сценариев

СценарийВходОбработкаВыходПример применения
РестримингRTSP (камера)РемультиплексацияRTMP/SRT/HLSТрансляция на YouTube
АрхивацияRTSP/WebRTCКопирование в файлMP4/MKVВидеонаблюдение, VMS
ТитрованиеЛюбой потокНаложение текста/логотипаRTMP/файлБрендирование, дата/время
Мультивью (мозаика)Несколько RTSPКомпозиция (xstack)RTMPОператорский пульт, видеостена
PIP (картинка в картинке)Два источника (файл/RTSP)OverlayФайл/RTMPВебинары, презентации
АудиомикшированиеДва аудиопотокаamixОдин аудиопотокПетличка + звук с камеры
Автоадаптация под CDNФайл или потокТранскодирование + HLS-сегментация.m3u8 + .tsМассовая трансляция

Заключение

FFMPEG — это не просто утилита, а многофункциональный медиадвижок, способный работать в самых разных условиях. Он соединяет разрозненные технологии: камеры, протоколы, форматы, серверы. Благодаря своей гибкости, он стал стандартом де-факто в сетевых видеосистемах.

Ключевые преимущества:

  • Универсальность: работает с сотнями форматов и протоколов.
  • Автоматизация: легко интегрируется в скрипты и службы.
  • Гибкость обработки: от простого копирования до сложной композиции.

Однако важно помнить: каждая операция (особенно перекодирование и фильтрация) добавляет задержку и нагрузку. Поэтому выбор сценария — это всегда баланс между функциональностью, качеством и производительностью.

В следующих частях лекции мы подробнее рассмотрим, как управлять этой задержкой и какие есть альтернативы FFMPEG для задач с критичными требованиями к латентности.