Конвертация видео в GIF на Python
Вы создадите видеоконвертер с использованием утилиты FFmpeg и сервиса Yandex Message Queue. Руководство предназначено для пользователей Linux и macOS.
Чтобы создать приложение:
- Подготовьте облако к работе.
- Подготовьте ресурсы.
- Создайте API-функцию.
- Создайте функцию-конвертер.
- Создайте триггер.
- Проверьте работу приложения.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Перед работой нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт:
- Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
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
;serverless.functions.invoker
.
-
Создайте статический ключ для сервисного аккаунта. Сохраните Идентификатор ключа и Ваш секретный ключ.
-
Создайте секрет с именем
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
. Установите атрибут Ключ партицирования.
- Имя таблицы —
-
Создайте бакет с именем
converter-bucket
в 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.
-
-
Загрузите архив
src.zip
в бакетconverter-bucket
. -
Создайте версию функции:
-
Укажите:
- способ загрузки
Object Storage
; - бакет
converter-bucket
; - объект
src.zip
; - среду выполнения
python37
; - точку входа
index.handle_process_event
; - таймаут 600 секунд;
- память 2048 МБ;
- сервисный аккаунт
ffmpeg-sa
.
- способ загрузки
-
Добавьте переменные окружения:
DOCAPI_ENDPOINT
— Эндпойнт из конфигурации базы данных;SECRET_ID
— Идентификатор секрета Yandex Lockbox;YMQ_QUEUE_URL
— URL очереди Message Queue;S3_BUCKET
—converter-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":"<ссылка на видео>"}
-
Нажмите кнопку Запустить тест.
-
В поле Ответ функции отобразится идентификатор задачи:
{ "task_id": "c4269ceb-8d3a-40fe-95f0-84cf16e8c17f" }
Посмотрите статистику очереди
После создания задачи число сообщений в очереди увеличивается на один и срабатывает триггер. Проверьте, что сообщения поступают в очередь и обрабатываются. Для этого посмотрите статистику очереди.
- В консоли управления выберите каталог, в котором находится очередь
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/converter-bucket/1b4db1a6-f2b2-4b1c-b662-37f7a62e6e2e.gif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=qxLftbbZ91U695ysemyZ%2F20210831%2Fru-central1%2Fs3%2Faws4_request&X-Amz-Date=20210831T110351Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=f4a5fe7848274a09be5b221fbf8a9f6f2b385708cfa351861a4e69df4ee4183c" }
Как удалить созданные ресурсы
Чтобы остановить работу инфраструктуры и перестать платить за созданные ресурсы: