Конвертация видео в GIF на Python
Вы создадите видеоконвертер с использованием утилиты FFmpeg
Чтобы создать приложение:
- Подготовьте облако к работе.
- Подготовьте ресурсы.
- Создайте API-функцию.
- Создайте функцию-конвертер.
- Создайте триггер.
- Проверьте работу приложения.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входит:
- плата за вызовы функций (см. тарифы Yandex Cloud Functions);
- плата за выполнение запросов к базе данных (см. тарифы Yandex Managed Service for YDB);
- плата за хранение данных в бакете (см. тарифы Yandex Object Storage).
Подготовьте ресурсы
-
Скачайте
архив с файлами, необходимыми для создания видеоконвертера. -
Создайте сервисный аккаунт с именем
ffmpeg-saи назначьте ему следующие роли:ymq.reader;ymq.writer;lockbox.payloadViewer;storage.viewer;storage.uploader;ydb.admin;functions.functionInvoker.
-
Создайте статический ключ для сервисного аккаунта. Сохраните Идентификатор ключа и Ваш секретный ключ.
-
Создайте секрет с именем
ffmpeg-sa-secretв Yandex Lockbox. В блоке Версия задайте:- Ключ —
ACCESS_KEY_ID, значение — Идентификатор ключа из предыдущего шага. - Ключ —
SECRET_ACCESS_KEY, значение — Ваш секретный ключ из предыдущего шага.
Сохраните Идентификатор секрета из блока Информация о секрете.
- Ключ —
-
Создайте очередь сообщений с именем
converter-queueв Yandex Message Queue. Сохраните URL очереди из блока Общая информация. -
Создайте базу данных YDB в режиме
Serverless. Сохраните Эндпоинт из блока Document API эндпоинт. -
Создайте таблицу в базе данных:
- Имя —
tasks. - Тип таблицы — Документная таблица.
- Колонки — одна колонка с именем
task_idтипаString. Установите атрибут Ключ партицирования.
- Имя —
-
Создайте бакет с ограниченным доступом в Yandex Object Storage.
Создайте API-функцию
В функции реализуется API, с помощью которого можно выполнять следующие действия:
convert— передать видео для конвертации. Функция записывает задачу в таблицуtasksс помощью Document API.get_task_status— узнать статус выполнения задачи. Функция проверяет, выполнена ли задача, и возвращает ссылку на GIF-файл.
-
Создайте функцию с именем
ffmpeg-api. -
Создайте версию функции:
-
Создайте файл
requirements.txtи укажите в нем библиотеку:boto3 -
Создайте файл
index.pyи вставьте в него содержимое файлаffmpeg-api.pyиз архива. -
Укажите следующие параметры:
- Среда выполнения —
python37. - Точка входа —
index.handle_api. - Таймаут —
5. - Сервисный аккаунт —
ffmpeg-sa.
- Среда выполнения —
-
Добавьте переменные окружения:
DOCAPI_ENDPOINT— Эндпоинт из конфигурации базы данных.SECRET_ID— Идентификатор секрета Yandex Lockbox.YMQ_QUEUE_URL— URL очереди Message Queue.
-
Создайте функцию-конвертер
Функция-конвертер запускается с помощью триггера и выполняет обработку видео, а также отмечает результат выполнения в таблице tasks.
Для преобразования видео используется утилита FFmpeg. Размер исполняемого файла FFmpeg более 70 мегабайт. Чтобы загрузить его вместе с кодом функции, подготовьте ZIP-архив и загрузите его через Object Storage. Подробнее о форматах загрузки кода.
-
Создайте функцию с именем
ffmpeg-converter. -
Подготовьте ZIP-архив
src.zipсо следующими файлами:-
Файл
requirements.txt:boto3 requests -
Файл
index.pyс содержимым файлаffmpeg-converter.pyиз архива. -
Исполняемый файл FFmpeg. На официальном сайте FFmpeg
, в разделе Linux Static Builds, загрузите архив с 64-битной версией FFmpeg и сделайте файл исполняемым, выполнив командуchmod +x ffmpeg.
-
-
Загрузите архив
src.zipв бакет, созданный ранее. -
Создайте версию функции:
-
Укажите следующие параметры:
- Среда выполнения —
python37. - Способ — способ загрузки
Object Storage. - Бакет — имя созданного ранее бакета.
- Объект —
src.zip. - Точка входа —
index.handle_process_event. - Таймаут —
600. - Память —
2048 МБ. - Сервисный аккаунт —
ffmpeg-sa.
- Среда выполнения —
-
Добавьте переменные окружения:
DOCAPI_ENDPOINT— Эндпоинт из конфигурации базы данных;SECRET_ID— Идентификатор секрета Yandex Lockbox;YMQ_QUEUE_URL— URL очереди Message Queue;S3_BUCKET— имя бакета, созданного ранее.
-
Создайте триггер
Обработка очереди сообщений выполняется с помощью триггера для Message Queue. Он вызывает функцию-конвертер при поступлении сообщений в очередь converter-queue.
- В консоли управления
перейдите в каталог, в котором хотите создать триггер. - Выберите сервис Cloud Functions.
- Перейдите на вкладку Триггеры.
- Нажмите кнопку Создать триггер.
- В блоке Базовые параметры:
- Введите имя триггера —
ffmpeg-trigger. - В поле Тип выберите
Message Queue.
- Введите имя триггера —
- В блоке Настройки сообщений Message Queue выберите очередь сообщений
converter-queueи сервисный аккаунт c правами на чтение из нее —ffmpeg-sa. - В блоке Настройки функции:
- Выберите функцию, которую будет вызывать триггер —
ffmpeg-converter. - Укажите тег версии функции —
$latest. - Укажите сервисный аккаунт, от имени которого будет вызываться функция —
ffmpeg-sa.
- Выберите функцию, которую будет вызывать триггер —
- Нажмите кнопку Создать триггер.
Проверьте работу приложения
Создайте задачу
-
В консоли управления
выберите каталог, в котором находится функцияffmpeg-api. -
Выберите сервис Cloud Functions.
-
Выберите функцию
ffmpeg-api. -
Перейдите на вкладку Тестирование.
-
В поле Входные данные введите:
{"action":"convert", "src_url":"<ссылка_на_видео>"}Где
<ссылка_на_видео>— ссылка на сохраненный на Яндекс Диске видеофайл в формате MP4 . -
Нажмите кнопку Запустить тест.
-
В поле Ответ функции отобразится идентификатор задачи:
{ "task_id": "c4269ceb-8d3a-40fe-95f0-84cf********" }
Посмотрите статистику очереди
После создания задачи число сообщений в очереди увеличивается на один и срабатывает триггер. Проверьте, что сообщения поступают в очередь и обрабатываются. Для этого посмотрите статистику очереди.
- В консоли управления
выберите каталог, в котором находится очередьconverter-queue. - Выберите сервис Message Queue.
- Выберите очередь
converter-queue. - В блоке Общая информация отображается количество сообщений в очереди и обработке.
- Перейдите в раздел Мониторинг. Посмотрите графики Overall queue stats.
Посмотрите логи функции
Триггер должен вызывать функцию-конвертер для каждого сообщения в очереди. Чтобы проверить, что функция вызывается, посмотрите ее логи.
- В консоли управления
выберите каталог, в котором находится функцияffmpeg-converter. - Выберите сервис Cloud Functions.
- Выберите функцию
ffmpeg-converter. - Перейдите на вкладку Логи и укажите период, за который хотите их посмотреть.
Получите ссылку на GIF-файл
-
В консоли управления
выберите каталог, в котором находится функцияffmpeg-api. -
Выберите сервис Cloud Functions.
-
Выберите функцию
ffmpeg-api. -
Перейдите на вкладку Тестирование.
-
В поле Входные данные введите запрос:
{"action":"get_task_status", "task_id":"<идентификатор_задачи>"} -
Нажмите кнопку Запустить тест.
-
Если конвертация видео в GIF-файл не завершилась, в поле Ответ функции отобразится ответ:
{ "ready": false }В противном случае вы получите ссылку на GIF-файл:
{ "ready": true, "gif_url": "https://storage.yandexcloud.net/<имя_бакета>/1b4db1a6-f2b2-4b1c-b662-37f7********.gif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=qxLftbbZ91U695ysemyZ%2F202********ru-central1%2Fs3%2Faws4_request&X-Amz-Date=20210831T110351Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=f4a5fe7848274a09be5b221fbf8a9f6f2b385708cfa351861a4e69df********" }
Как удалить созданные ресурсы
Чтобы остановить работу инфраструктуры и перестать платить за созданные ресурсы: