Транскодинг-ферма: облако, свои серверы и стоимость

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

TL;DR

Транскодинг-ферма – это парк машин, превращающий один мастер-файл в каждую ступень вашей encoding ladder, и это второй из двух крупных счетов за вычисления в стриминге; первый – egress. Запустить ферму можно тремя способами: управляемый облачный сервис, который тарифицирует за минуту выхода (output), собственный парк энкодеров, который вы арендуете по машино-часам, или энкодеры на видеочипах (GPU), которые идут куда быстрее и упаковывают больше задач на машину ценой чуть больших файлов. Правильный ответ – это точка безубыточности, а не бренд: управляемые сервисы выигрывают на низком или скачкообразном объёме, потому что вы ничего не платите в простое, а собственный парк выигрывает после нескольких сотен часов каталога в месяц, потому что арендованные машины на спот-рынке стоят долю от поминутного тарифа. Число, которое на самом деле должно решать стратегию, – это не цена кодирования сама по себе, а стоимость кодирования, сопоставленная с egress, который эти байты накопят за все будущие просмотры тайтла.

Зачем это важно

Из двух крупнейших постоянных статей расходов на вычисления в стриминге egress определяет большую часть счёта, но транскодинг определяет остаток – и, в отличие от egress, вы платите его заново каждый раз, когда добавляете кодек, разрешение или новый класс устройств. Основателю, продакт-менеджеру или CTO стриминга приходится выбирать, как работает ферма, ещё до того как закодирован первый тайтл, и неверный выбор по умолчанию тихо переплачивает на каждом часе контента всю жизнь каталога. Статья – для этого человека, принимающего решение, а не для инженера, настраивающего флаги энкодера: механика кодеков живёт в разделе Video Encoding, и мы ссылаемся на неё, а не переписываем. Здесь остаётся продуктово-стоимостной вопрос – облако против on-prem, CPU против GPU, реальное время против пакетной обработки – и арифметика, которая говорит, что именно нужно вашему каталогу и аудитории.

Что на самом деле делает транскодинг-ферма

Начнём со слова. Транскодировать – значит взять один уже закодированный мастер-файл (высококачественный промежуточный файл, который индустрия называет mezzanine), декодировать его обратно в кадры и заново закодировать несколько раз на разных разрешениях и битрейтах, которые запросят ваши плееры. Каждое такое перекодирование даёт один рендишн, одну ступень encoding ladder. Лестница из шести ступеней – это шесть кодирований каждого тайтла. Транскодинг-ферма – это просто парк машин, прогоняющий все эти кодирования параллельно, потому что делать их по одному было бы слишком долго для реального каталога.

Представьте типографию, работающую с одной мастер-фотографии. Фотограф отдаёт единственный файл высокого разрешения, а типография печатает с него карманный отпечаток, открытку, A4 и билборд – то же изображение, много размеров, каждый под свою задачу. Транскодинг-ферма – это такая типография для видео: один mezzanine на входе, лестница нарезанных и оценённых копий на выходе. Стоимость типографии – машинное время печати, а не оригинальная фотография; стоимость фермы – вычисления, а не мастер.

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

Рис. 1. Транскодинг-ферма превращает один mezzanine в целую лестницу. Каждая ступень – отдельное кодирование; ферма гонит их параллельно. Стоимость – процессорное время, платится заново за каждый тайтл и каждый новый кодек.

VOD и live – два разных счёта

Прежде чем выбирать, как запускать ферму, разделите две задачи, которые она может делать, потому что тарифицируются они совершенно по-разному.

Транскодинг VOD (video-on-demand) – пакетная работа. Файл уже существует; вы можете закодировать его быстрее реального времени, кусками, на любых самых дешёвых машинах, и если машина умрёт посреди задачи – вы просто перезапустите кусок. Никто не ждёт в реальном времени конкретную секунду выхода. Именно эта терпимость к прерываниям делает транскодинг VOD дешёвым в работе и именно поэтому к нему так хорошо подходит спот-рынок (о нём ниже).

Live-транскодинг – работа в реальном времени. Поток с камеры приходит со скоростью одна секунда в секунду и должен уходить со скоростью одна секунда в секунду; энкодер не может отстать, и пропущенный момент не переиграть. Вы платите за машину, которая работает весь эфир, занят битрейт или простаивает. Это делает live стоимостью за час канала, а не за час контента, и структурно он дороже на доставленный час. Разделению этих двух конвейеров посвящена статья live против VOD: два конвейера, одна платформа; здесь мы оценим каждый по очереди, VOD сначала, потому что именно там большинство каталогов тратит большую часть денег.

Три способа запускать ферму

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

1. Управляемые облачные сервисы – вы платите за минуту выхода

Самый простой вариант – отдать файл облачному сервису и получить рендишны обратно. Два эталонных сервиса с публичными прайс-листами на 2026 год:

  • AWS Elemental MediaConvert тарифицирует за минуту выхода (output). Базовый тариф (Basic) – $0,0075 за минуту в SD и $0,0150 за минуту в HD на кодеке H.264, один проход. Профессиональный тариф (Professional) стартует около $0,012 за минуту нормализованного выхода с множителями, которые перемножаются: HD примерно удваивает базу, более эффективный кодек HEVC добавляет ещё в два-четыре раза, а многопроходное кодирование добавляет ещё 3,5 раза сверху.
  • Google Cloud Transcoder API тарифицирует за минуту выхода по классу разрешения: $0,015 за минуту в SD (ниже 720p), $0,030 в HD (720p–1080p) и $0,060 в UHD/4K, аудио-выход – $0,005 за минуту.

Ключевая деталь, которую упускают, в том, что счётчик считает выход, а не вход. Один час мастера, закодированный в лестницу из шести ступеней, даёт шесть часов выхода, и платите вы за все шесть. Пройдём арифметику по тарифам Google для типичной лестницы из двух SD-ступеней, трёх HD-ступеней и одной UHD-ступени:

один час источника → 6 часов выхода = 360 минут выхода, по ступеням:
  2 SD-ступени  × 60 мин × $0,015 = 120 мин × $0,015 = $1,80
  3 HD-ступени  × 60 мин × $0,030 = 180 мин × $0,030 = $5,40
  1 UHD-ступень × 60 мин × $0,060 =  60 мин × $0,060 = $3,60
  ─────────────────────────────────────────────────────────
  на час источника                                   = $10,80

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

2. Собственный ffmpeg – вы платите за машино-час

Второй вариант – арендовать обычные облачные машины и самому гонять на них open-source энкодер (почти всегда ffmpeg), распределяя задачи по парку. Теперь вы платите не за минуту выхода, а за машинное время, и это меняет арифметику, потому что у облачных машин есть глубокая скидка, которую большинство управляемых сервисов передать не могут: спот-рынок, где вы арендуете свободные мощности провайдера за долю стандартной on-demand-цены с оговоркой, что провайдер может забрать машину примерно за две минуты предупреждения.

Скидка большая. Вычислительный инстанс, который стоит около $0,40 в час on-demand, на спот-рынке арендуется примерно за $0,10 в час – около 75% скидки. Поскольку транскодинг VOD – прерываемая пакетная работа, двухминутное предупреждение об отзыве переживаемо: вы режете тайтл на куски, и отозванный кусок просто перезапускается в другом месте. Один опубликованный пример кластера дал парк на 1024 ядра примерно за $51 в час on-demand против примерно $15 в час на споте – разница между примерно $36 700 и $9 300 в месяц при той же пропускной способности.

Привлекательность – самая низкая удельная стоимость на объёме и полный контроль над настройками энкодера. Цена, которую вы берёте взамен, – эксплуатация: вы держите очередь задач, обрабатываете спот-прерывания, мониторите сбои и патчите парк. Это инженерное время – реальная статья расходов, поэтому собственный хостинг редко окупается ниже нескольких сотен часов каталога в месяц.

3. Железо on-premises – вы платите вперёд

Третий вариант – купить машины и держать их в своих стойках. Это капитальные затраты – заплатить один раз, дальше только электричество и обслуживание, – и оно бьёт арендованные облачные мощности только на очень большом стабильном объёме, где машины работают достаточно горячо и долго, чтобы амортизировать покупку. Для стримингового каталога с рывковым кодированием (релиз контента, переэнкодирование бэк-каталога) эластичность облака «плати за использованное» обычно выигрывает. On-prem заслуживает места у вещателей и платформ с постоянной предсказуемой нагрузкой на кодирование, которая никогда не простаивает.

Рис. 2. Та же задача, три формы стоимости: управляемое облако – за минуту выхода (без платы за простой), собственный хостинг – за машино-час (дёшево на объёме, эксплуатация на вас), on-prem – капитал вперёд (только на стабильном масштабе).

GPU против CPU: скорость и плотность против сжатия

Через все три архитектуры проходит второй выбор: кодировать на универсальном процессоре машины (CPU) или на видеочипе (GPU) со встроенным аппаратным энкодером, таким как NVENC от NVIDIA. Это тот компромисс, который путает больше всего команд, поэтому сформулируем прямо.

GPU-энкодер заметно быстрее и плотнее. NVENC кодирует 1080p со скоростью до примерно 800 кадров в секунду и 4K до примерно 200 кадров в секунду, тогда как качественное кодирование на CPU (программный энкодер x264 на пресете «slow») на 4K-клипе может идти в три-пять раз медленнее собственного хронометража видео. GPU ещё и упаковывает больше одновременных задач на одну машину. Для чистой пропускной способности – большой бэк-каталог для разбора или длинная «хвостовая» библиотека, где скорость важнее последнего байта, – GPU выигрывает решительно.

Преимущество CPU – эффективность сжатия: при том же целевом качестве медленное программное кодирование даёт меньший файл, чем GPU. На большинстве live-action-контента разрыв умеренный, и современный NVENC по измеренному качеству близок к пресету x264 «medium». Но GPU заметно отстаёт на сложном материале – плёночное зерно, анимация, мелкие высокодетальные текстуры, – и для архивного мастера или вещательного deliverable медленное кодирование на CPU с x264 или x265 по-прежнему правильный инструмент. Какой кодек брать – H.264 для охвата, HEVC или AV1 для эффективности – это продуктовое решение в статье стратегия кодеков для OTT, а механика по кодекам живёт в Video Encoding; для фермы важно стоимостное последствие.

И это последствие – стержень всей статьи: меньший файл – это не просто приятное качество, это навсегда меньший egress. Дополнительное сжатие CPU экономит байты на каждом просмотре, бесконечно. Скорость GPU экономит процессорное время один раз, при кодировании. Так что выбор GPU против CPU – на самом деле вопрос о том, какая стоимость доминирует для этого тайтла: разовое кодирование или пожизненная доставка.

Сколько стоит закодировать каталог?

Поставим два главных варианта рядом на реальном каталоге: 10 000 часов VOD, лестница из шести ступеней (две SD, три HD, одна UHD). Это 60 000 часов выхода, или 3,6 млн минут выхода.

Управляемое облако по поступенчатым тарифам Google, что мы использовали выше ($10,80 на час источника):

10 000 часов источника × $10,80 за час источника = $108 000 закодировать каталог один раз

Собственный хостинг на споте, кодируя ту же лестницу. Допустим, одна спот-машина по ~$0,10/час кодирует лестницу из шести ступеней для одного часа источника примерно за час реального времени (разумная средняя цифра при параллельном кодировании нескольких ступеней на машину):

10 000 часов источника × 1 машино-час × $0,10 = $1000 чистых вычислений
+ реалистичные накладные (сбои, ретраи, оркестрация, ~2×) ≈ $2000
+ инженерное время на построение и эксплуатацию очереди = реальная стоимость

Разрыв в чистых вычислениях – примерно $108 000 против нескольких тысяч долларов – выглядит решающим, и на этом масштабе он таков: каталог в 10 000 часов уверенно за точкой безубыточности, и собственный хостинг экономит реальные деньги. Но обратите внимание, что закрывает разрыв на малом масштабе. Управляемый счёт чисто пропорционален – закодируете 100 часов и заплатите около $1080 при нулевой фиксированной стоимости. Собственный счёт несёт фиксированную стоимость, не связанную с выходом: инженерию на построение и эксплуатацию парка. Ниже нескольких сотен часов в месяц эта фиксированная стоимость больше всего управляемого счёта, и управляемый сервис дешевле и проще.

Рис. 3. Точка безубыточности. Управляемое облако – чисто поминутно (без фиксированной стоимости, крутой наклон). Собственный хостинг несёт фиксированную стоимость эксплуатации, но куда меньший тариф за час. Ниже пересечения дешевле управляемое; выше – собственный парк отрывается.

Число, которое на самом деле решает: стоимость кодирования против пожизненного egress

Вот ошибка, которая стоит дороже всего, и это не выбор не того сервиса – это оптимизация не той стоимости. Кодирование платится один раз; egress платится на каждом просмотре. Поэтому правильная стратегия кодирования тайтла зависит от того, сколько раз его посмотрят.

Напомним, что egress – это то, что CDN берёт за отправку байтов зрителям, и он масштабируется как размер файла, умноженный на просмотры, – крупнейшая постоянная статья в стриминге, разобранная в статье стоимость CDN: egress, коммиты и 95-й перцентиль. Возьмите флагманский тайтл, который застримят миллион раз. Потратить больше вычислений вперёд – медленное кодирование на CPU, эффективный кодек HEVC или AV1, даже per-title-настройку – чтобы срезать 20% размера файла, окупается миллион раз на egress. Для этого тайтла вы оптимизируете байты, и стоимость кодирования едва заметна на фоне экономии доставки.

Теперь возьмите «хвостовой» тайтл, который посмотрят сто раз или никогда. Потратить те же дорогие вычисления, чтобы его сжать, – это деньги, которые вы, скорее всего, не вернёте, потому что egress, который можно сэкономить, почти нулевой. Для этого тайтла вы оптимизируете кодирование – быстрый GPU, более лёгкий пресет – и принимаете чуть больший файл, потому что байты будут двигаться редко. Это та же логика, что движет per-title и context-aware кодированием, и поэтому единая стратегия фермы на весь каталог оставляет деньги на столе. Популярная «голова» хочет CPU; длинный «хвост» хочет GPU; платформа хочет обоих, маршрутизируемых по прогнозу спроса. Всё это сходится в одну итоговую строку в стоимости OTT-платформы.

Рис. 4. Пусть число просмотров маршрутизирует кодирование. Тайтл на миллион просмотров заслуживает дорогого байт-эффективного сжатия на CPU; хвостовой тайтл, который могут не посмотреть, получает быструю дешёвую пропускную способность GPU.

Live-транскодинг – отдельный счёт за час

Всё выше оценивает VOD. Live – другая форма, и ради конкретности контраста стоит привести число. Управляемый live-энкодер вроде AWS Elemental MediaLive тарифицирует за час работы канала: HD-вход стоит около $0,77 в час за кодирование, а реалистичный одиночный канал с несколькими входами и выходной лестницей из пяти ступеней идёт примерно по $2,37 в час со всем включённым. Канал HD 24/7 – это, стало быть, примерно $550–$1250 в месяц за одно кодирование, до хранения и CDN.

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

Выбор фермы: сравнение

ПодходСтоимостная модельПримерная стоимость VOD, 1 час источника → 6 ступенейНагрузка на эксплуатациюЭластичностьКогда лучше
Управляемое облако (MediaConvert, Transcoder API)За минуту выхода~$5–$11Минимальная – никакойМгновенная, до нуляНизкий/скачкообразный объём; малая команда; быстро на рынок
Собственный CPU (ffmpeg на споте)За машино-час~$0,10–$0,30 + эксплуатацияВысокая – очередь на васВысокая, но парк вашВысокий стабильный VOD-объём; egress-чувствительный каталог
Собственный GPU (парк NVENC)За машино-часЕщё ниже за задачу; плотнееВысокая – плюс тюнинг GPUВысокаяОгромная пропускная способность; длинный хвост; скорость важнее байта
Железо on-premisesКапитал вперёдСамая низкая при полной загрузкеВысокая – железо вашеНет – фиксированная мощностьПостоянная предсказуемая нагрузка без простоя

Таблица 1. Четыре подхода к ферме по форме стоимости и пригодности. Колонка «когда лучше» – это и есть решение: подбирайте стоимостную модель под ваш паттерн объёма и распределение просмотров аудитории, а не под бренд. CPU экономит egress; GPU экономит время; управляемое экономит эксплуатацию; on-prem экономит деньги только когда не простаивает.

Частая ошибка: оценивать ферму по одной цене кодирования

Самые дорогие решения по транскодингу рождаются из сравнения не тех чисел. Три версии одной ошибки:

Первая – выбрать сервис по поминутному заголовку и забыть, что счётчик считает выход. «Дешёвый» тариф $0,0150 за минуту HD превращается в десять долларов за час источника, как только лестница из шести ступеней его умножит, – счёт задаёт лестница, а не тариф.

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

Третья и самая дорогая – оптимизировать кодирование, когда надо оптимизировать egress, или наоборот. Прогонять каждый тайтл через медленное многопроходное кодирование на топ-кодеке «ради качества» – это сжигать вычисления на хвостовом контенте, который никто не застримит достаточно, чтобы это оправдать; прогонять весь каталог через самый быстрый GPU-пресет «ради скорости» – это раздувать размер файла самых смотрибельных тайтлов и платить за это egress миллион раз. Лечение – позволить прогнозу спроса маршрутизировать тайтл: байты-в-первую-очередь для «головы», кодирование-в-первую-очередь для «хвоста».

Где здесь Фора Софт

Спроектировать и построить транскодинг-ферму, удерживающую стоимость по мере роста каталога – выбрать управляемое облако против собственного спот-парка в правильной точке безубыточности, маршрутизировать популярные тайтлы на байт-эффективное кодирование на CPU, а длинный хвост – на быструю пропускную способность GPU, и держать live- и VOD-конвейеры бюджетированными отдельно, – это стриминговая инженерия, которой Фора Софт занимается с 2005 года, на 250+ выпущенных проектах для 400+ клиентов в видеостриминге, OTT/Internet TV, e-learning, телемедицине и видеонаблюдении. Работа именно такая: построить конвейер кодирования так, чтобы его счёт за вычисления масштабировался с аудиторией, а не обгонял её, и чтобы каждый тайтл был закодирован так, как оправдывает его смотрибельность. Когда медиакомпании нужна стриминговая платформа, чья стоимость транскодинга остаётся вменяемой от первой тысячи часов до первого миллиона, эта инженерия конвейера – та способность, что мы приносим.

Главное

  • Транскодинг-ферма – это вычисления, строящие вашу лестницу; они повторяются на каждый тайтл и каждый новый кодек.
  • Управляемое облако тарифицирует за минуту выхода и масштабируется до нуля; собственный хостинг – за машино-час и выигрывает на объёме.
  • Спот-рынок срезает собственные вычисления примерно на 75%, потому что кодирование VOD – прерываемая пакетная работа.
  • GPU-кодирование куда быстрее и плотнее; CPU-кодирование сжимает меньше и экономит egress на каждом просмотре.
  • Решайте по спросу: оптимизируйте байты для популярных тайтлов, стоимость кодирования – для длинного хвоста.
  • Live-транскодинг – счёт за час канала, структурно отдельный от VOD за час контента.

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

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

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