Поиск по сайту:

Обработка видео в облаке с помощью AWS Elastic Transcoder


Пропускная способность стоит денег, а потоковое видео из CloudFront стоит очень дорого. Вы можете сократить эти расходы, предварительно перекодировав свои видео с помощью AWS Elastic Transcoder, который обрабатывает видео для уменьшения размера файла.

Пропускная способность стоит денег

Видеофайлы довольно велики по сравнению с изображениями и аудио. AWS взимает плату за место для хранения и использованную пропускную способность. Если у вас есть видеофайл размером 100 МБ, который просматривается 1000 раз, это почти 100 ГБ пропускной способности или 8,50 долларов США за пропускную способность при использовании CloudFront для обслуживания контента. Если ваше приложение размещает видео, это может быть основным фактором затрат.

К счастью, видео не обязательно должно быть таким большим. С помощью процесса, называемого транскодированием, вы изменяете битрейт видео. Каждое видео кодируется с определенной скоростью передачи данных; например, запись может быть закодирована со скоростью 10 Мбит/с.

Взгляните на этот увеличенный кадр из тестовых кадров медузы. Тот, что слева, закодирован с разумной скоростью 3 Мбит/с, а тот, что справа, закодирован с очень высокой скоростью 100 Мбит/с. Можете ли вы сказать разницу?

Есть небольшое искажение, и видео с низким битрейтом определенно может стать размытым из-за большого количества движения, но по большей части видео со скоростью 3 Мбит/с выглядит вполне приемлемо.

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

Транскодирование также используется для создания видео разного размера для разных устройств. Небольшим мобильным устройствам, просматривающим видео в портретном режиме, вероятно, не нужно видео 4K или даже 1080p. Пользователи с медленным соединением могут воспроизводить потоковое видео только в формате 480p. Elastic Transcoder AWS может создавать несколько видеофайлов для каждого входа.

Это именно то, что YouTube делает всякий раз, когда вы загружаете видео — ваше видео обрабатывается и перекодируется для доставки на несколько платформ (и если вы особенно рано загружаете видео на YouTube, вы можете заметить, что качество не превышает 480p, потому что транскодирование 1080p еще не завершено).

Как использовать эластичный транскодер AWS

Перейдите в консоль Elastic Transcoder. Вы захотите создать новый конвейер, очередь, которая управляет заданиями перекодирования. Конвейеры используют корзины S3 для ввода и вывода, поэтому вам нужно создать две новые корзины из консоли управления S3.

Дайте вашему конвейеру имя, а затем выберите ведро ввода:

Вам нужно убедиться, что ваша корзина и конвейер находятся в одном регионе AWS, иначе с вас будет взиматься плата за обработанные данные, а транскодирование будет медленнее. Выберите выходной сегмент и сегмент, который будет использоваться для эскизов. (Это может быть выходной сегмент.)

Создайте свою корзину и запишите идентификатор конвейера:

На самом деле использование Elastic Transcoder — это, как ни странно, ручной процесс. Вы должны создать новое задание из консоли для каждого файла и поставить его в очередь с соответствующими настройками. К счастью, вы можете автоматизировать весь процесс с помощью функции Lambda, которая будет запускаться всякий раз, когда новый видеофайл загружается на S3.

Перейдите в консоль Lambda и создайте новую функцию. Выберите NodeJS 10 в качестве среды выполнения и вставьте этот скрипт, любезно предоставленный Swapnil Pawar на Medium.

Вам нужно отредактировать значения для pipelineId и bucket, заключив их в кавычки следующим образом:

Вы также можете отредактировать PresetId на пресет, который хотите перекодировать, который можно найти в Документах AWS. Вы можете создать свой собственный из консоли транскодера, если стандартных недостаточно. Если вы хотите поставить в очередь несколько транскодов для одного файла, добавьте в этот массив больше элементов:

После того, как вы все заполнили, добавьте триггер для вашей лямбда-функции, которая будет запускаться всякий раз, когда объект создается в вашей корзине ввода:

Под ролью выполнения убедитесь, что у роли есть доступ к Elastic Transcoder.

Вы можете использовать этот образец кадра с медузой, чтобы проверить свою функцию. Загрузите файл со средним битрейтом (30 Мбит/с или около того) и загрузите его в корзину ввода. Если это было успешно, вы должны увидеть новое задание в очереди на вкладке «Задания» консоли Elastic Transcoder, и вы должны увидеть новую папку «видео» в своей корзине вывода, которая содержит выходные файлы. Предустановка «Generic 1080p» взяла видео размером 112 МБ со скоростью 30 Мбит/с и закодировала его всего до 18 МБ (около 5 Мбит/с):

Если ваша функция Lambda не удалась, вы можете просмотреть журналы на вкладке «Мониторинг». Вы также можете создать тестовый пример для проверки функции, не загружая ничего в S3, хотя задание, отправленное на транскодер, будет пустым.

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