Наложение зацикленной Gif-анимации с прозрачным фоном на видео

Я работаю с библиотекой MoviePy на языке Python, которая является обёрткой над ffmpeg и некоторыми чисто питоньими библиотеками. Мне нужно наложить на видео в формате mp4 гиф-анимацию с прозрачным фоном - посередине сверху. При этом анимация (её длительность - до 10 сек.) должна быть зациклена на протяжении всего видео. Самое главное, чтобы через прозрачный фон Gif было видно видео.

Подскажите, пожалуйста, как этого можно реализовать, используя MoviePy, если нет - то какими средствами этого можно достичь. (И есть ли у чистой ffmpeg такая возможность?)

Прошу меня простить за возможную неграмотность. Заранее спасибо.

//Правка. Всё получилось сделать с помощью MoviePy

Но... Теперь возникли другие две проблемы.

  1. Видео рендерится слишком долго. Трёхминутный ролик обрабатывался почти столько же, как длится сам ролик. Приемлемая же скорость рендеринга для меня составляет минимум 1/3 от длительности самого ролика.
  2. Gif кодирует всего 256 цветов. На фоне Full-Hd видео это смотрится не очень. Значит, нужно накладывать видео на видео.

Ответы (1 шт):

Автор решения: Всеволод Ростовский

Наложение gif-анимации c поддержкой бинарной прозрачности можно реализовать средствами MoviePy. Код с комментариями прилагаю

from moviepy.editor import VideoFileClip, CompositeVideoClip

clip = VideoFileClip('video.mp4')
#watermark = VideoFileClip("./image.gif")
watermark = (VideoFileClip(r"image.gif", has_mask=True)
                     .loop()  # loop gif
                     .set_duration(clip.duration)  # Продолжительность водяного знака
                     .resize(height=50)  # Высота водяного знака будет пропорционально масштабирована.
                     .margin(left=8, top=8, opacity=0)  # Поля водяных знаков и прозрачность
                     .set_pos(("left", "top")))  # Расположение водяного знака

watermark_video = CompositeVideoClip([clip, watermark])
watermark_video.write_videofile('output.mp4')
→ Ссылка