# ffmpeg Для развертывания приложения с использованием ffmpeg (в нашем случае Python), нам нужно установить этот набор программ в сам контейнер, а не только библиотеку для python, которая ставится через менеджер пакетов pip. ## Установка через Dockerfile Используем Docker для установки FFMpeg. **Шаги:** 1. Создаем Dockerfile в директории с проектом. 2. В Dockerfile указываем базовый образ Python ```dockerfile FROM python:3.8-slim ``` 3. Выполняем команду установки FFMpeg: ```dockerfile RUN apt-get update && apt-get install -y ffmpeg ``` 4. Копируем проект в собираемый образ и назначаем WORKDIR: ```dockerfile COPY . /usr/src/app WORKDIR /usr/src/app ``` 5. Добавляем команду для запуска приложения: ```dockerfile CMD ["python", "main.py"] ``` **Получившийся Dockerfile:** ```dockerfile FROM python:3.9 RUN apt-get update && apt-get install -y ffmpeg COPY . /usr/src/app WORKDIR /usr/src/app RUN pip install -r requirements.txt COPY . /usr/src/app CMD ["python", "bot.py"] ``` Созданный файл необходимо поместить в корень проекта. ```{eval-rst} .. admonition:: Примечание :class: info - Вместо `3.8-slim` вы можете указать любую другую версию Python, которая вам нужна. - Если вы используете другой язык программирования, вам нужно будет изменить команду установки FFMpeg в соответствии с вашим языком. ``` **Примечание:** - Вместо `3.8-slim` возможно указать другую версию Python, которая требуется приложению. - Если используется другой язык программирования, необходимо выбрать другой базовый образ с нужным языком и установить библиотеку для этого языка. ## Пример Создадим telegram бота на python с использованием библиотек telebot и ffmpeg-python, который будет принимать пользовательские видео и добавлять туда watermark’и. ```{eval-rst} .. admonition:: Примечание :class: warning Код является демонстрационным примером и мы настоятельно не рекомендуем хранить токены ботов или подобные данные в коде. Используйте переменные окружения (секреты)! ``` ```python import os import telebot import ffmpeg bot = telebot.TeleBot('YOUR_BOT_TOKEN') @bot.message_handler(commands=['start']) def handle_start(message): bot.send_message(message.chat.id, "Привет! Отправь мне видео, и я добавлю водяной знак с помощью Ffmpeg.") @bot.message_handler(content_types=['video']) def handle_video(message): video = message.video file_info = bot.get_file(video.file_id) downloaded_file = bot.download_file(file_info.file_path) with open('video.mp4', 'wb') as new_file: new_file.write(downloaded_file) in_file = ffmpeg.input('video.mp4') overlay_file = ffmpeg.input('watermark.png') ( ffmpeg .concat( in_file.trim(start_frame=10, end_frame=20), in_file.trim(start_frame=30, end_frame=40), ) .overlay(overlay_file.hflip()) .drawbox(50, 50, 120, 120, color='red', thickness=5) .output('out.mp4') .run() ) with open('out.mp4', 'rb') as video: bot.send_video(message.chat.id, video) os.remove('video.mp4') os.remove('out.mp4') bot.polling() ``` **Добавим в корень проекта следующие файлы:** - конфигурационный yaml-файл: ```yaml meta: environment: docker toolchain: name: docker version: latest build: dockerfile: Dockerfile run: persistenceMount: /data containerPort: 80 ``` - Dockerfile: ```dockerfile FROM python:3.9 RUN apt-get update && apt-get install -y ffmpeg COPY . /usr/src/app WORKDIR /usr/src/app RUN pip install -r requirements.txt COPY . /usr/src/app CMD ["python", "bot.py"] ``` - Файл с зависимостями requirements.txt. В нашем случае это pyTelegramBotAPI (официальное название telebot) и ffmpeg-python. ``` pyTelegramBotAPI==4.15.4 ffmpeg-python==0.2.0 ``` ## Возможные ошибки - Python не находит файл .py – проверьте, изменили ли вы название **main.py** в параметре `CMD` **Dockerfile**'а или в параметре `command` в **amvera.yml** на название вашего скрипта или путь до него. - `AttributeError: module 'ffmpeg' has no attribute 'input'` - проверьте, что вы установили **ffmpeg-python**, а не **python-ffmpeg**. ## Видеопример - Деплой приложения с FFmpeg Описание: В этом видео подробно рассматривается процесс развертывания приложения при помощи Dockerfile на Amvera Cloud. - 00:00 Интро - 00:29 Dockerfile - 01:57 bot.py - 03:21 requirements.txt - 05:55 amvera.yaml - 06:52 Git - 08:55 Переменные окружения - 09:17 Структура проекта (/data) - 09:58 Тестируем бота ```{eval-rst} .. youtube:: M9GT8ly-OcY :align: center :width: 100% ```