Прогрессивная и чересстрочная развёртка: что нужно знать на самом деле

Автор: Николай СапуновОбновлено: август 202615 мин чтения
Содержание статьи +

TL;DR

Есть два способа «нарисовать» каждый кадр видео – современный и устаревший. Современный способ, прогрессивная развёртка, отображает весь кадр за один проход: каждую строку сверху вниз, все одновременно. Устаревший способ, чересстрочная развёртка (interlaced), делит каждый кадр на две половины – сначала нечётные строки, затем чётные – с интервалом в долю секунды. Он появился в 1930-х годах, чтобы передать движение в узкую полосу аналогового вещания. Всё современное цифровое видео – стримы Netflix, звонки Zoom, современные телевизоры – использует прогрессивную развёртку. Однако вы всё ещё можете столкнуться с чересстрочным материалом из старых архивов, спутниковых трансляций и некоторых устаревших камер. Если ваш пайплайн не обрабатывает его правильно, в итоговом видео появятся характерные «зубцы» на движущихся объектах – артефакт под названием combing. Эта статья объясняет, как работает каждая из развёрток, почему они выглядят по-разному и как корректно конвертировать чересстрочные источники ещё до подачи их в энкодер.

Зачем это знать

Если вы создаёте продукт, в который поступает видео из внешних источников – системы телемедицины со старого медицинского оборудования, видеонаблюдение с устаревших IP-камер, образовательные платформы, использующие архивный контент, или вещательные платформы, принимающие спутниковые сигналы, – вы неизбежно столкнётесь с interlaced-видео, независимо от ваших пожеланий. Если ваша команда обрабатывает такой материал как современное прогрессивное видео, на каждом движущемся объекте в итоговом стриме появятся «зубцы» – артефакт combing. Кодек будет тратить биты на устранение этого дефекта, а не на передачу реальной картинки. Combing портит профессиональный контент, и как только он закодирован в файл, устранить его уже невозможно.

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

Проблема 1930-х, породившая чересстрочную развёртку

Чтобы понять, зачем существует interlaced, нужно вспомнить, как выглядело телевидение в 1930-х годах. Инженеры в Великобритании, США и Германии впервые в истории начали передавать движущиеся изображения по радио и столкнулись с жёстким компромиссом. Им требовались изображения достаточно детальные, чтобы быть полезными (много горизонтальных строк), достаточно частые, чтобы движение выглядело плавным (высокая частота обновления), и при этом умещавшиеся в узкую радиополосу. Технологии того времени не могли обеспечить всё это одновременно.

Конкретный компромисс в числах. Высокая частота – около 50 или 60 кадров в секунду – была необходима, потому что всё, что медленнее, заметно мерцало на электронно-лучевых трубках того времени: экран ощутимо тускнел между кадрами, и зритель это замечал. Но доступная радиополоса передавала примерно вдвое меньше деталей. Инженерам пришлось выбирать: либо без мерцания, но с низкой детализацией, либо с детализацией – но с мерцанием. Ни один из вариантов не подходил.

Британская инженерная команда в 1936 году предложила элегантное решение для 405-строчной системы BBC. 1 Вместо передачи каждого полного изображения целиком они разделили его на две части. В первой части оказались строки с нечётными номерами (1, 3, 5, 7…), во второй – с чётными (2, 4, 6, 8…). Каждая из этих частей, называемая полем (field), могла передаваться в полосе пропускания вдвое меньшей ширины, поэтому инженеры стали отправлять два поля за то же время, что раньше уходило на передачу одного полного кадра. Телевизор зрителя быстро «сшивал» их, и мозг воспринимал единую детализированную картинку, обновляющуюся 50 раз в секунду, хотя каждое отдельное полуизображение поступало со скоростью 25 «полнокадровых эквивалентов» в секунду.

Трюк работал благодаря двум особенностям зрения. Люминофор на экране CRT продолжал светиться доли секунды после удара электронного луча – это смягчало переход между полями. А ваш глаз достаточно медленный, чтобы две переплетённые полуполные картинки, нарисованные с интервалом в 1/50 секунды, воспринимались как одна цельная. Чересстрочная развёртка по сути стала первым видеотрюком сжатия – двукратной экономией полосы пропускания в обмен на визуальную ловкость. 2

Каждый крупный аналоговый стандарт вещания унаследовал эту идею: NTSC в Америке использовал 525 чересстрочных строк при частоте 60 Гц, PAL в Европе – 625 строк при 50 Гц, а SECAM во Франции – близкие значения. 3 Следующие 60 лет именно так передавалось почти всё телевидение в мире.

Рис. 1. При прогрессивной развёртке все строки кадра выводятся за один проход – одновременно. При чересстрочной сначала отображаются нечётные строки, а чётные – через 1/50 (или 1/60) секунды. Из-за этого две половины «одного кадра» могут показывать разные состояния, если между ними что-то изменилось.

Прогрессивная развёртка и почему она победила

Прогрессивная развёртка – современная альтернатива. Она рисует каждую строку кадра по порядку, сверху вниз, за один проход. Каждый кадр представляет собой полный, целостный снимок. Название происходит от того, что строки идут подряд (прогрессируют) сверху вниз, а не чередуются между нечётными и чётными.

Дизайн больше не должен строиться вокруг трюков с полосой – по трём причинам, ставшим очевидными в 1990-х и 2000-х.

Во-первых, изменились экраны. Плоские LCD- и OLED-дисплеи в телефоне, ноутбуке и телевизоре больше не используют электронный луч, сканирующий люминофор – у них есть сетка отдельных пикселей, которые обновляются одновременно. Рисовать сначала нечётные строки, а потом чётные на современный экран физически невозможно. Современные экраны просто обновляют целые кадры.

Во-вторых, сжатие стало достаточно умным. Видеокодеки – программные алгоритмы, сжимающие видео, чтобы оно укладывалось в стриминговый битрейт, – рассчитаны на то, что каждый кадр представляет собой целостное изображение. Они анализируют повторяющиеся элементы внутри кадра и между кадрами, а используемая при этом математика не работает корректно с interlaced-данными, где две половины кадра показывают разные моменты времени. Передача interlaced-материала в современные кодеки H.264, H.265 или AV1 приводит к потере битов и ухудшению качества. 4

В-третьих, интернету не важна аналоговая полоса пропускания. Протоколы доставки видео в вебе – HLS, MPEG-DASH, WebRTC, CMAF – изначально рассчитаны на прогрессивную развёртку. Прямого пути для передачи interlaced-сигнала зрителю через современный стриминговый пайплайн без преобразования просто не существует.

В итоге: 720p, 1080p, 4K UHD, 8K – все эти форматы по спецификации являются прогрессивными. Буква «p» в «1080p» означает progressive. (Буква «i» в «1080i», которая до сих пор встречается в некоторых вещательных потоках, означает interlaced.) Для любого продукта, запускаемого в 2026 году, относитесь к interlaced как к устаревшему входному формату, который может поступать извне, но никогда не используйте его при собственном производстве.

Артефакт *combing* – и почему он так разрушителен

Здесь абстрактная идея «два поля на кадр» превращается в конкретную визуальную задачу.

Представьте, что вы снимаете футбольный мяч, летящий через кадр. При чересстрочной развёртке камера сначала захватывает нечётные строки изображения в один момент, а чётные – через 1/50 секунды. За это время мяч смещается на несколько сантиметров. Поэтому на нечётных строках он оказывается в одном положении, а на чётных – чуть правее. Если телевизор корректно объединяет их визуально, вы этого не замечаете: глаз и экран CRT сливают строки в плавное движение.

Но что произойдёт, если взять эти interlaced-данные и попытаться отобразить их как прогрессивные – например, записать оба поля в одну картинку и показать её на плоском экране? Две половины больше не сливаются: нечётные строки показывают мяч в первой позиции, чётные – во второй. Везде, где у мяча есть край, видна горизонтальная пилообразная картина – знаменитый артефакт combing. 5

Пилообразный рисунок напоминает зубья расчёски – отсюда и название. Статичные элементы кадра (трава, штанги ворот) не демонстрируют эффект «combing», потому что между двумя полями ничего не изменилось: нечётные и чётные строки идеально совпадают. Эффект «Combing» проявляется только на движущихся границах.

Рис. 2. Артефакт «combing» возникает там, где объект двигался между съёмкой двух полей. Статичные участки отображаются корректно; на движущихся краях появляются характерные «зубцы», поскольку нечётные и чётные строки зафиксировали слегка смещённые положения.

А теперь – разрушительная часть. Combing – это не проблема отображения, которая исчезнет, когда экран зрителя «разберётся». Артефакт уже заложен в данных в тот момент, когда два поля начинают трактоваться как один кадр. Если подать такой combing-кадр на современный кодек, он воспримет горизонтальные зубцы как реальные детали и будет стараться их сжать. Биты тратятся на кодирование шума. Motion estimation – часть кодека, отвечающая за определение связи между кадрами, – сбивается из-за этого высокочастотного горизонтального шума. В результате получается поток, который больше по размеру и хуже по качеству, чем того заслуживает исходный материал.

Поэтому каждый ответственный пайплайн преобразует interlaced-источники в прогрессивные до кодирования, а не после. Если кадр с комбингом уже закодирован, комбинг остаётся в файле навсегда.

Деинтерлейсинг – делайте раз, делайте правильно

Процесс преобразования называется deinterlacing. Он берёт двухполевой interlaced-источник и выдаёт последовательность полных прогрессивных кадров, понятных современному оборудованию. Существует четыре семейства алгоритмов деинтерлейсинга – от «дешёвых и плохих» до «дорогих и хороших».

МетодЧто делаетКогда использоватьКачество
WeaveСоединяет нечётное и чётное поле в один кадр как есть.Только если сцена полностью статична.Combing на любом движении.
Bob (line doubling)Отбрасывает одно из двух полей, удваивает каждую оставшуюся строку для заполнения пропусков.Дешёвая реал-тайм конвертация при нулевом бюджете на вычисления.Половинное вертикальное разрешение, рваные края.
Motion-adaptive (YADIF, BWDIF)Проверяет каждый пиксель: двигался ли он между полями; weave для статичных областей, interpolation для движущихся.Дефолт почти в любом продакшен-пайплайне.Production-grade.
Motion-compensated (QTGMC, neural)Строит per-pixel motion vectors между полями; восстанавливает пропущенные семплы вдоль траекторий движения объектов.Высококлассная реставрация старых материалов, архивная работа.Лучшее доступное; тяжёлое для CPU/GPU.

Для подавляющего большинства задач правильным выбором является motion-адаптивная категория, а именно фильтр BWDIF.

BWDIF (Bob Weaver Deinterlacing Filter) – улучшенная версия более старого фильтра YADIF (Yet Another DeInterlacing Filter, первоначально разработанного для открытого видеоплеера MPlayer инженером Михаэлем Нидермайером). 6 Оба фильтра анализируют каждый пиксель: если он находится в области, где не было движения между нечётным и чётным полями, они применяют метод «weave» – объединяют оба поля напрямую, доверяя обоим. Если же пиксель расположен в движущейся области, используется метод «bob» – конфликтующее поле отбрасывается, а недостающая строка синтезируется на основе соседних статичных пикселей. Основное отличие YADIF и BWDIF заключается в том, насколько активно каждый из них использует будущие кадры для принятия решений: BWDIF анализирует прошлые, текущие и будущие кадры одновременно и лучше справляется с быстрым движением. 7 Оба фильтра поставляются «из коробки» в популярном инструменте для работы с видео – FFmpeg.

Вот реальная команда – та, что мы используем в продакшене Фора Софт для источника 1080i, поступающего по протоколу broadcast SRT:

# Деинтерлейсинг 1080i-источника до 1080p25 через BWDIF, перекодирование в H.264.
ffmpeg -i in.ts -vf "bwdif=mode=send_frame:parity=tff" \
       -c:v libx264 -preset slow -crf 18 -c:a copy out.mp4

Загадочная часть – bwdif=mode=send_frame:parity=tff. Параметр mode=send_frame заставляет фильтр выдавать один прогрессивный кадр на каждые два чересстрочных поля, сохраняя при этом ту же частоту кадров, что и у исходного сигнала (1080i25 → 1080p25). Альтернатива – mode=send_field, при котором прогрессивный кадр формируется из каждого отдельного поля, удваивая частоту кадров (1080i25 → 1080p50) и обеспечивая максимально плавную передачу движения. Используйте send_field для динамичного контента, например спорта; send_frame – для всего остального.

parity= tff указывает фильтру, какое поле каждого кадра считается «верхним» – нечётное или чётное. «TFF» означает «top field first» (сначала верхнее поле), «BFF» – «bottom field first» (сначала нижнее поле). Interlaced-источники бывают разными: одни передают TFF, другие – BFF, и при неправильной настройке parity изображение начинает дрожать, будто время «сломано». Отладить такую проблему крайне сложно, если не знать её истинной причины.

Всегда проверяйте паритет до пакетной обработки. Для этого можно использовать инструмент ffprobe (бесплатный, поставляется вместе с FFmpeg), который считывает метаданные файла, или фильтр idet внутри FFmpeg, анализирующий реальные пиксельные данные, а не полагающийся на флаг в метаданных. Прогоните 5-секундный фрагмент исходного видео через idet и изучите результат, прежде чем запускать четырёхчасовую пакетную обработку.

Частая ошибка: двойное деинтерлейсинг или его отсутствие

Два режима сбоя постоянно повторяются в аудитах продакшена. Оба легко допустить, но трудно потом выявить.

Ошибка 1: двойной деинтерлейсинг. Устройство захвата деинтерлейсит сигнал на входе (поскольку прошивка вендора делает это автоматически). Позже, на этапе транскодирования, деинтерлейсинг выполняется ещё раз – просто потому, что оператор не был об этом предупреждён. Двойная обработка приводит к мягкому, размазанному, слегка дрожащему изображению, которое «не так» выглядит, но трудно однозначно связать с конкретной стадией. Выберите в пайплайне одно место для деинтерлейсинга, выполните его аккуратно и чётко отметьте результат как прогрессивный в метаданных – чтобы никто после этого не пытался деинтерлейсить повторно.

Ошибка 2: деинтерлейсинг не происходит. Кто-то подаёт в пайплайн «1080i25», а система воспринимает его как прогрессивный сигнал. Энкодер обрабатывает данные как прогрессивные и «запекает» комбинг в каждый движущийся кадр выходного файла. Зритель видит зубчатые артефакты на всём, что движется, а файл оказывается безвозвратно испорчен – исправить можно только перекодированием с чистого источника.

Исправление в обоих случаях: один чётко определённый шаг деинтерлейсинга в пайплайне ingest – сразу после поступления источника в систему. Отметить выход как «progressive – already deinterlaced». Все последующие стадии доверяют этой метке и не выполняют обработку повторно.

Чем мы занимаемся в Фора Софт

Мы работаем с interlaced-источниками почти каждую неделю. Системы телемедицины часто получают 1080i-потоки через SRT от устаревшего больничного оборудования. Архивы видеонаблюдения уходят в эпоху NTSC и PAL, когда камеры изначально записывали в interlaced-формате. Broadcast-партнёры иногда передают фиды в 1080i25, которые нужно адаптировать для публичного веба – в 1080p25 или 1080p50. Исправление всегда сводится к небольшому, но аккуратному элементу pipeline glue: шагу определения чётности кадров с использованием idet на сэмпле, фильтру деинтерлейсинга, подобранному под тип контента, и чистому прогрессивному выходу, совместимому со всеми downstream-кодеками и плеерами. Принципы из этой статьи – те самые, что мы применяем каждый раз.

Ключевые выводы

  • Чересстрочная развёртка делит каждый кадр на две полукартинки (поля), снятые с интервалом в 1/50 или 1/60 секунды. Это приём 1930-х годов, призванный сэкономить пропускную способность.
  • Прогрессивная развёртка отображает каждый кадр целиком за один проход. Именно под этот формат созданы современные веб-технологии, дисплеи и видеокодеки.
  • «Combing» – заметные горизонтальные зубцы на движущихся объектах – возникает, когда чересстрочные данные отображаются как прогрессивные.
  • Всегда деинтерлейсьте видео перед кодированием – ровно один раз, с помощью motion-адаптивного фильтра, например BWDIF.
  • Перед запуском обработки проверьте порядок полей (TFF или BFF) с помощью ffprobe или фильтра idet. Неправильная парность приведёт к дрожанию изображения.

Что читать дальше

Источники

  1. Механика захвата и отображения interlaced-данных; частоты полей и кадров. Wikipedia: Interlaced video, доступ май 2026. https://en.wikipedia.org/wiki/Interlaced_video
  2. 405-строчное британское ТВ 1936 года; ограничения скорости развёртки на лампах. Interlacing – the hidden story of 1920s video compression technology, BECG. https://becg.org.uk/2018/12/16/interlacing-the-hidden-story-of-1920s-video-compression-technology/
  3. Interlacing как двукратная экономия полосы. Understanding interlace, TV Tech. https://www.tvtechnology.com/news/understanding-interlace-268148
  4. NTSC принят в монохромном варианте 1941, цвет – 1953; PAL запатентован Telefunken 1962. Wikipedia: NTSC. https://en.wikipedia.org/wiki/NTSC
  5. Почему современные кодеки предпочитают прогрессивный материал: motion estimation и intra prediction предполагают целостные кадры. Wikipedia: Deinterlacing. https://en.wikipedia.org/wiki/Deinterlacing
  6. Механика артефакта combing – два поля, отображённые как один кадр. What is Deinterlacing?, IO River. https://www.ioriver.io/terms/deinterlacing
  7. Фильтр YADIF: spatial и temporal проверки по previous, current, next кадрам. Wikipedia: Deinterlacing. https://en.wikipedia.org/wiki/Deinterlacing
  8. BWDIF изучает прошлые и будущие кадры; обходит YADIF на обычном видео. FFmpeg deinterlace effectively, HitPaw. https://www.hitpaw.com/video-tips/ffmpeg-deinterlace.html

Строите такую систему?

Подберём параметры кодирования под ваш контент и посчитаем стоимость доставки до старта разработки.