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

06-03-01 Ремультиплексирование без перекодирования, с минимальными потерями качества

06-03-01

Что такое ремультиплексирование (remux)

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

Такой подход часто называют copy-режимом, потому что в терминах FFMPEG мы используем опцию -c copy, которая указывает утилите копировать потоки «как есть», минуя этап декодирования и кодирования.

Примеры команд ремультиплексирования

Рассмотрим два типичных сценария использования ремультиплексирования в сетевых видеосистемах:

ffmpeg -i rtsp://192.168.1.100:554/stream1 -c copy -f flv rtmp://server/live/cam1

Что делает команда: принимает поток по RTSP с IP-камеры и отправляет его по RTMP на сервер, не перекодируя.

ffmpeg -i rtsp://192.168.1.100:554/stream1 -c copy -f mpegts "udp://239.1.1.1:1234"

Что делает команда: перенаправляет RTSP-поток в виде UDP-трансляции с использованием формата MPEG-TS.

Эти команды — основа быстрого и эффективного перенаправления видеопотоков в реальном времени.


Когда возможно ремультиплексирование

Ремультиплексирование не всегда возможно. Оно требует выполнения нескольких условий:

  1. Кодеки входного потока должны поддерживаться выходным форматом (контейнером)
    Например, формат FLV (часто используемый в RTMP) поддерживает H.264 и AAC. Если камера отправляет H.265 (HEVC), то FLV не сможет его принять, и -c copy не сработает.
  2. Контейнер должен допускать такую структуру потоков
    Например, некоторые форматы не поддерживают определённые типы аудио (например, AC3 в FLV), или требуют определённой структуры метаданных.
  3. Поток должен быть стабильным и корректно упакованным
    Некоторые RTSP-потоки могут иметь нестандартные временные метки (PTS/DTS) или отсутствие ключевых кадров — это может нарушить процесс ремультиплексии.

Таблица: совместимость кодеков и форматов

Контейнер (формат вывода)Поддерживаемые видео-кодекиПоддерживаемые аудио-кодекиПримечания
FLV (RTMP)H.264, VP6AAC, MP3, PCMHEVC, AV1 — не поддерживаются
MPEG-TS (UDP, SRT)H.264, H.265, MPEG-2AAC, MP3, AC3, PCMШироко используется в вещании
MP4H.264, H.265, AV1AAC, MP3, AC3, FLACТребует завершённого файла для корректного воспроизведения
HLS (.m3u8 + .ts)H.264, H.265AAC, MP3Сегменты должны быть самодостаточными

⚠️ Если кодек на входе не поддерживается на выходе — FFMPEG выдаст ошибку вида:

Could not write header for output file #0 (incorrect codec parameters ?)

Преимущества ремультиплексирования

Ремультиплексирование — это наиболее эффективный способ перенаправления видеопотоков. Вот почему:

1. Минимальная нагрузка на процессор (CPU)

Поскольку не происходит перекодирования, FFMPEG не использует ресурсоёмкие операции, связанные с кодированием (например, DCT, квантование, motion estimation). Это особенно важно при работе с множеством камер или на слабых устройствах (например, встраиваемых системах или edge-серверах).

  • При -c copy загрузка CPU может быть менее 5%.
  • При перекодировании — от 20% до 100% на поток, в зависимости от разрешения и настроек.

2. Практически нулевая дополнительная задержка

Поскольку не используется буферизация, связанная с кодированием, задержка, вносимая FFMPEG, минимальна. Основная задержка остаётся только от:

  • Сетевого соединения с камерой (RTSP),
  • Внутренних буферов сокета,
  • Времени обработки пакетов.

Типичная дополнительная задержка при ремультиплексии — 10–50 мс, что почти незаметно.

3. Сохранение исходного качества

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


Ограничения ремультиплексирования

Несмотря на все преимущества, у режима -c copy есть серьёзные ограничения:

1. Нельзя изменить разрешение видео

Если камера передаёт 4K, а вам нужно 720p — это невозможно без перекодирования. Ремультиплексия только копирует поток, поэтому разрешение остаётся исходным.

2. Нельзя изменить битрейт

Битрейт также остаётся тем же. Если камера использует переменный битрейт (VBR) до 8 Мбит/с, вы не сможете «сжать» его до 2 Мбит/с, не перекодировав.

3. Нельзя изменить формат кадра

Например:

  • Нельзя превратить чересстрочный (interlaced) поток в прогрессивный.
  • Нельзя изменить частоту кадров (FPS).
  • Нельзя добавить или изменить аудиодорожку.

4. Нельзя добавить графику, титры или оверлеи

Хотите наложить логотип, дату или текст «LIVE»? Это требует декодирования и повторного кодирования. При -c copy такие операции невозможны.


Почему это — базовый инструмент для рестриминга

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

  • IP-видеонаблюдение: RTSP-потоки с камер → FFMPEG → RTMP/HLS для просмотра в браузере.
  • Студийные системы: перенос сигнала между оборудованием через SRT или UDP.
  • CDN-трансляции: быстрое перенаправление потока на внешние платформы (YouTube, Twitch).
  • Архивация: запись «сырого» потока с камеры в файл без потерь.

💡 Аналогия: представьте, что вы перекладываете книгу из одной коробки в другую, не открывая и не переписывая текст. Вы просто меняете упаковку. Это и есть ремультиплексирование.


Заключение

Ремультиплексирование с использованием -c copy — это быстрый, эффективный и безопасный способ перенаправления видеопотоков. Он позволяет:

  • Минимизировать нагрузку на CPU,
  • Сохранить качество,
  • Уменьшить задержку.

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