Наложение зацикленной Gif-анимации с прозрачным фоном на видео
Я работаю с библиотекой MoviePy на языке Python, которая является обёрткой над ffmpeg и некоторыми чисто питоньими библиотеками. Мне нужно наложить на видео в формате mp4 гиф-анимацию с прозрачным фоном - посередине сверху. При этом анимация (её длительность - до 10 сек.) должна быть зациклена на протяжении всего видео. Самое главное, чтобы через прозрачный фон Gif было видно видео.
Подскажите, пожалуйста, как этого можно реализовать, используя MoviePy, если нет - то какими средствами этого можно достичь. (И есть ли у чистой ffmpeg такая возможность?)
Прошу меня простить за возможную неграмотность. Заранее спасибо.
//Правка. Всё получилось сделать с помощью MoviePy
Но... Теперь возникли другие две проблемы.
- Видео рендерится слишком долго. Трёхминутный ролик обрабатывался почти столько же, как длится сам ролик. Приемлемая же скорость рендеринга для меня составляет минимум 1/3 от длительности самого ролика.
- 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')