Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Message Queue
  • Начало работы
    • Быстрый старт
    • Поддерживаемые инструменты
    • Примеры кода
      • Python
      • Node.js
      • PHP
      • Celery
      • JMS
      • Laravel
      • Terraform
      • Golang
  • Пошаговые инструкции
    • Обзор
    • Создание новой очереди сообщений
    • Отправка сообщений
    • Прием и удаление сообщений
    • Удаление очереди сообщений
    • Мониторинг процессов в очереди
  • Концепции
    • Обзор
    • Очереди сообщений
    • Сообщения
    • Дедупликация
    • Таймаут видимости
    • Long Polling
    • Что такое Dead Letter Queue (DLQ)
    • Отложенная доставка сообщений в очереди
    • Квоты и лимиты
    • Сравнение с Yandex Data Streams
  • Практические руководства
    • Конвертация видео в GIF на Python
  • Управление доступом
  • Правила тарификации
  • API Yandex Message Queue
    • Обзор
    • Queue
      • CreateQueue
      • DeleteQueue
      • GetQueueAttributes
      • GetQueueUrl
      • ListQueues
      • PurgeQueue
      • SetQueueAttributes
    • Message
      • ChangeMessageVisibility
      • ChangeMessageVisibilityBatch
      • DeleteMessage
      • DeleteMessageBatch
      • ReceiveMessage
      • SendMessage
      • SendMessageBatch
    • Типы данных
      • BatchResultErrorEntry
      • ChangeMessageVisibilityBatchRequestEntry
      • ChangeMessageVisibilityBatchResultEntry
      • DeleteMessageBatchRequestEntry
      • DeleteMessageBatchResultEntry
      • Message
      • MessageAttributeValue
      • SendMessageBatchRequestEntry
      • SendMessageBatchResultEntry
    • Стандартные ошибки
  • Публичные материалы
  • Вопросы и ответы
  1. Практические руководства
  2. Конвертация видео в GIF на Python

Конвертация видео в GIF на Python

Статья создана
Yandex Cloud
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Подготовьте ресурсы
  • Создайте API-функцию
  • Создайте функцию-конвертер
  • Создайте триггер
  • Проверьте работу приложения
    • Создайте задачу
    • Посмотрите статистику очереди
    • Посмотрите логи функции
    • Получите ссылку на GIF-файл
  • Как удалить созданные ресурсы

Вы создадите видеоконвертер с использованием утилиты FFmpeg и сервиса Yandex Message Queue. Руководство предназначено для пользователей Linux и macOS.

Чтобы создать приложение:

  1. Подготовьте облако к работе.
  2. Подготовьте ресурсы.
  3. Создайте API-функцию.
  4. Создайте функцию-конвертер.
  5. Создайте триггер.
  6. Проверьте работу приложения.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работе

Перед работой нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
  2. На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсы

В стоимость поддержки инфраструктуры входит:

  • плата за вызовы функций (см. тарифы Yandex Cloud Functions);
  • плата за выполнение запросов к базе данных (см. тарифы Yandex Managed Service for YDB);
  • плата за хранение данных в бакете (см. тарифы Yandex Object Storage).

Подготовьте ресурсы

  1. Скачайте архив с файлами, необходимыми для создания видеоконвертера.

  2. Создайте сервисный аккаунт с именем ffmpeg-sa и назначьте ему следующие роли:

    • ymq.reader;
    • ymq.writer;
    • lockbox.payloadViewer;
    • storage.viewer;
    • storage.uploader;
    • ydb.admin;
    • serverless.functions.invoker.
  3. Создайте статический ключ для сервисного аккаунта. Сохраните Идентификатор ключа и Ваш секретный ключ.

  4. Создайте секрет с именем ffmpeg-sa-secret в Yandex Lockbox. В блоке Версия задайте:

    • Ключ — ACCESS_KEY_ID, значение — Идентификатор ключа из предыдущего шага.
    • Ключ — SECRET_ACCESS_KEY, значение — Ваш секретный ключ из предыдущего шага.

    Сохраните Идентификатор секрета из блока Информация о секрете.

  5. Создайте очередь сообщений с именем converter-queue в Yandex Message Queue. Сохраните URL очереди из блока Общая информация.

  6. Создайте базу данных YDB в режиме Serverless. Сохраните Эндпойнт из блока Document API эндпоинт.

  7. Создайте таблицу в базе данных:

    • Имя таблицы — tasks.
    • Тип таблицы — Документная таблица.
    • Колонки — одна колонка с именем task_id типа String. Установите атрибут Ключ партицирования.
  8. Создайте бакет с именем converter-bucket в Yandex Object Storage.

Создайте API-функцию

В функции реализуется API, с помощью которого можно выполнять следующие действия:

  • convert — передать видео для конвертации. Функция записывает задачу в таблицу tasks с помощью Document API.
  • get_task_status — узнать статус выполнения задачи. Функция проверяет, выполнена ли задача, и возвращает ссылку на GIF-файл.
Консоль управления
  1. Создайте функцию с именем ffmpeg-api.

  2. Создайте версию функции:

    1. Создайте файл requirements.txt и укажите в нем библиотеку:

      boto3
      
    2. Создайте файл index.py и вставьте в него содержимое файла ffmpeg-api.py из архива.

    3. Укажите:

      • среду выполнения python37;
      • точку входа index.handle_api;
      • таймаут 5 секунд;
      • сервисный аккаунт ffmpeg-sa.
    4. Добавьте переменные окружения:

      • DOCAPI_ENDPOINT — Эндпойнт из конфигурации базы данных.
      • SECRET_ID — Идентификатор секрета Yandex Lockbox.
      • YMQ_QUEUE_URL — URL очереди Message Queue.

Создайте функцию-конвертер

Функция-конвертер запускается с помощью триггера и выполняет обработку видео, а также отмечает результат выполнения в таблице tasks.

Для преобразования видео используется утилита FFmpeg. Размер исполняемого файла FFmpeg более 70 мегабайт. Чтобы загрузить его вместе с кодом функции, подготовьте ZIP-архив и загрузите его через Object Storage. Подробнее о форматах загрузки кода.

Консоль управления
  1. Создайте функцию с именем ffmpeg-converter.

  2. Подготовьте ZIP-архив src.zip со следующими файлами:

    • Файл requirements.txt:

      boto3
      requests
      
    • Файл index.py с содержимым файла ffmpeg-converter.py из архива.

    • Исполняемый файл FFmpeg. Чтобы получить его, перейдите на официальный сайт FFmpeg и в разделе Linux Static Builds загрузите архив с 64-битной версией FFmpeg.

  3. Загрузите архив src.zip в бакет converter-bucket.

  4. Создайте версию функции:

    1. Укажите:

      • способ загрузки Object Storage;
      • бакет converter-bucket;
      • объект src.zip;
      • среду выполнения python37;
      • точку входа index.handle_process_event;
      • таймаут 600 секунд;
      • память 2048 МБ;
      • сервисный аккаунт ffmpeg-sa.
    2. Добавьте переменные окружения:

      • DOCAPI_ENDPOINT — Эндпойнт из конфигурации базы данных;
      • SECRET_ID — Идентификатор секрета Yandex Lockbox;
      • YMQ_QUEUE_URL — URL очереди Message Queue;
      • S3_BUCKET — converter-bucket.

Создайте триггер

Обработка очереди сообщений выполняется с помощью триггера для Message Queue. Он вызывает функцию-конвертер при поступлении сообщений в очередь converter-queue.

Консоль управления
  1. В консоли управления перейдите в каталог, в котором хотите создать триггер.
  2. Выберите сервис Cloud Functions.
  3. Перейдите на вкладку Триггеры.
  4. Нажмите кнопку Создать триггер.
  5. В блоке Базовые параметры:
    • Введите имя триггера — ffmpeg-trigger.
    • В поле Тип выберите Message Queue.
  6. В блоке Настройки Message Queue выберите очередь сообщений converter-queue и сервисный аккаунт c правами на чтение из нее — ffmpeg-sa.
  7. В блоке Настройки функции:
    • Выберите функцию, которую будет вызывать триггер — ffmpeg-converter.
    • Укажите тег версии функции — $latest.
    • Укажите сервисный аккаунт, от имени которого будет вызываться функция — ffmpeg-sa.
  8. Нажмите кнопку Создать триггер.

Проверьте работу приложения

Создайте задачу

Консоль управления
  1. В консоли управления выберите каталог, в котором находится функция ffmpeg-api.

  2. Выберите сервис Cloud Functions.

  3. Выберите функцию ffmpeg-api.

  4. Перейдите на вкладку Тестирование.

  5. В поле Входные данные введите:

    {"action":"convert", "src_url":"<ссылка на видео>"}
    
  6. Нажмите кнопку Запустить тест.

  7. В поле Ответ функции отобразится идентификатор задачи:

    { "task_id": "c4269ceb-8d3a-40fe-95f0-84cf16e8c17f" }
    

Посмотрите статистику очереди

После создания задачи число сообщений в очереди увеличивается на один и срабатывает триггер. Проверьте, что сообщения поступают в очередь и обрабатываются. Для этого посмотрите статистику очереди.

Консоль управления
  1. В консоли управления выберите каталог, в котором находится очередь converter-queue.
  2. Выберите сервис Message Queue.
  3. Выберите очередь converter-queue.
  4. В блоке Общая информация отображается количество сообщений в очереди и обработке.
  5. Перейдите в раздел Мониторинг. Посмотрите графики Overall queue stats.

Посмотрите логи функции

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

Консоль управления
  1. В консоли управления выберите каталог, в котором находится функция ffmpeg-converter.
  2. Выберите сервис Cloud Functions.
  3. Выберите функцию ffmpeg-converter.
  4. Перейдите на вкладку Логи и укажите период, за который хотите их посмотреть.

Получите ссылку на GIF-файл

Консоль управления
  1. В консоли управления выберите каталог, в котором находится функция ffmpeg-api.

  2. Выберите сервис Cloud Functions.

  3. Выберите функцию ffmpeg-api.

  4. Перейдите на вкладку Тестирование.

  5. В поле Входные данные введите запрос:

    {"action":"get_task_status", "task_id":"<идентификатор задачи>"}
    
  6. Нажмите кнопку Запустить тест.

  7. Если конвертация видео в 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"
    }
    

Как удалить созданные ресурсы

Чтобы остановить работу инфраструктуры и перестать платить за созданные ресурсы:

  1. Удалите очередь converter-queue.
  2. Удалите базу данных.
  3. Удалите все объекты из бакета converter-bucket.
  4. Удалите бакет converter-bucket.
  5. Удалите функции ffmpeg-api и ffmpeg-converter.
  6. Удалите триггер ffmpeg-trigger.

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Подготовьте ресурсы
  • Создайте API-функцию
  • Создайте функцию-конвертер
  • Создайте триггер
  • Проверьте работу приложения
  • Создайте задачу
  • Посмотрите статистику очереди
  • Посмотрите логи функции
  • Получите ссылку на GIF-файл
  • Как удалить созданные ресурсы