#amazon-web-services #video #ffmpeg #aws-lambda
#amazon-веб-сервисы #Видео #ffmpeg #aws-lambda
Вопрос:
Я использую AWS Lambda для преобразования файлов из WEBM в MP4
Я использую ffmpeg версии 4.3.1 -статический https://johnvansickle.com/ffmpeg / (Я также выполнил следующие тесты с ffmpeg на бессерверном уровне AWS ffmpeg (который включает de 4.1.3), но результаты еще хуже (примерно на 25% медленнее)
Я использую узел 10x в качестве контейнера.
WEBM size Time to convert. Memory Lambda. Memory used (as shown in log)
80Mb ~44s 3008 410
40Mb ~44s 3008 375
80Mb ~70s 1024 321
40Mb ~70s 1024 279
Все видеоролики имеют длину 80. Итак, насколько я вижу, размер WEBM не имеет значения, если длина видео одинакова, для конвертации требуется столько же. Таким образом, ffmpeg занимает больше времени, если длина видео больше, а не если размер файла больше… любопытно 😉
Но, с другой стороны, меня смущает лямбда-память. Я знаю, что память и процессор объединяются в Lambda… чем больше памяти вы выберете, тем больше ЦП будет выделено.
Но…
- Почему ffmpeg занимает всего около 300/400 МБ, если ему нужно выполнить больше?
- Как я могу указать ffmpeg использовать больше памяти?
- Есть ли какая-либо возможность ускорить процесс в Lambda?
Кстати, во всех тестах все ffmpeg одинаковы, и
параметр, используемый процессором)
- Я добавил в параметры ffmpeg cpu-used = 100, и это вообще не имеет значения, если я использую cpu-used = 5 … времена одинаковы, поэтому я предполагаю, что этот параметр бесполезен (я не знаю почему)
параметр потоков)
- Также я провел несколько тестов с параметрами «потоков», но это тоже бесполезно.
Я знаю, что это не очень хорошее сравнение, но для преобразования одних и тех же файлов на простом выделенном сервере требуется около 5 секунд (8 vCores и 8 ГБ оперативной памяти в OVH Centos VPS).
Кстати, Amazon Elastic Transcoder — это не вариант: а) это очень дорого б) для преобразования нужны только его профили, а мои команды ffmpeg очень сложные (водяные знаки, эффекты и т. Д.)
Комментарии:
1. Включаете ли вы время загрузки WEBM с S3 и загрузки MP4 на S3 в эти итоговые значения? Каково фактическое время преобразования ffmpeg при размерах лямбда-ОЗУ? И используете ли вы те же параметры ffmpeg?
2. время загрузки / выгрузки здесь не указано 😉 все параметры ffmpeg для всех тестов. Я не понимаю вашего второго вопроса: вы можете видеть в таблице с 3 м и 1 М лямбда-памяти
3. Я имею в виду: используете ли вы одни и те же параметры среды выполнения ffmpeg как в lambda, так и на VPS? Кроме того, существуют ли какие-либо параметры отладки / подробного описания ffmpeg, которые могут помочь вам понять разницу в производительности?
4. Оба являются одной и той же статической сборкой 4.3.1, взятой с одного и того же сайта
5. Я не думаю, что вы измеряете то же самое здесь. Например, вы указали, что ffmpeg на уровне Lambda работает на 25% медленнее. Уровень Lambda не будет иметь никакого значения для среды выполнения — он повлияет только на время холодного запуска перед запуском ffmpeg. Вот почему я пытаюсь убедиться, что вы сравниваете похожие вещи, чтобы вы знали, на чем сосредоточить свои усилия (на холодном запуске, на загрузке с S3, на размере пакета развертывания, на потоковой передаче ffmpeg, на загрузке в S3 или на чем-то еще).
Ответ №1:
В модели ресурсов AWS Lambda вы выбираете объем памяти, который требуется для вашей функции, и пропорционально выделяете мощность процессора и другие ресурсы. Например, при выборе 256 МБ памяти для вашей лямбда-функции выделяется примерно в два раза больше мощности процессора, чем при запросе 128 МБ памяти, и вдвое меньше мощности процессора, чем при выборе 512 МБ памяти.
Итак, из вашего примера:
Время преобразования размера WEBM. Лямбда памяти. Используемая память (как показано в журнале)
80 МБ ~ 44 с 3008 410 40 МБ ~ 44 с 3008 375
80 МБ ~ 70 1024 321 40 МБ ~ 70 1024 279
Обработка Lambda заняла больше времени не из-за нехватки памяти, а из-за нехватки мощности процессора, поскольку мощность процессора прямо пропорциональна памяти