前言
大家好,我是空空star,本篇给大家分享一下Moviepy模块之视频添加图片水印。
本篇使用的moviepy版本如下:
Name: moviepy
Version: 1.0.3
视频添加图片水印
1.引入库
from moviepy.editor import *
2.加载视频文件
local = '/Users/kkstar/Downloads/video/'
video = VideoFileClip(local+"demo.mp4")
3.加载水印图片
watermark = ImageClip(local+"demo.png")
4.缩放水印图片大小
watermark = watermark.resize(width=200, height=50)
5.设置水印的位置
5.1 相对于视频的左上角
watermark = watermark.set_position(("left","top"))
5.2 相对于视频的左下角
watermark = watermark.set_position(("left","bottom"))
5.3 相对于视频的右上角
watermark = watermark.set_position(("right","top"))
5.4 相对于视频的右下角
watermark = watermark.set_position(("right","bottom"))
5.5 相对于视频的左中位置
watermark = watermark.set_position(("left","center"))
5.6 相对于视频的正中位置
watermark = watermark.set_position(("center","center"))
5.7 相对于视频的右中位置
watermark = watermark.set_position(("right","center"))
5.8 相对于视频的中上位置
watermark = watermark.set_position(("center","top"))
5.9 相对于视频的中下位置
watermark = watermark.set_position(("center","bottom"))
以上9种位置效果图
![](https://img-blog.csdnimg.cn/f3bd73082ace400a95292c2c8d66ea5f.png)
5.10 显示在某个点位上
# 显示在100, 50的位置上
watermark = watermark.set_position((100, 50))
5.11 显示在左边距x、右边距y的位置上
# 显示在距离左边百分之10、距离上边百分之5的位置上
# 效果就是距左为 屏幕宽度*0.1,距上为 屏幕高度*0.05的位置上
watermark = watermark.set_position((0.1, 0.05), True)
6. 设置水印出现的时间段
6.1 从视频开始到结束
watermark = watermark.set_duration(video.duration)
6.2 从第x秒开始到结束
# 从第3秒开始到结束
watermark = watermark.set_duration(video.duration-3).set_start(3)
这里需要注意,如果水印开始时间不是视频开始时间,那么水印的持续时长需要原视频时长减去水印开始时间,不然新的视频会被拉长。
假设原视频5秒,设置水印开始时间是第3秒,如果水印持续时长仍是原视频时长,那么新视频将会是5+3=8秒,当原视频播放完了,还有3秒会是一直显示水印的一个黑屏。
6.3 从第x秒开始到第y秒结束
# 水印从第3秒开始到第4秒结束
watermark = watermark.set_duration(4-3).set_start(3).set_end(4)
7. 将水印添加到视频中
video_with_watermark = CompositeVideoClip([video, watermark])
8. 保存带有水印的视频文件
video_with_watermark.write_videofile(local+"output_video.mp4")
总结
VideoFileClip
:VideoFileClip是MoviePy中的一个类,用于从视频文件中创建一个Clip对象。
ImageClip
:ImageClip是MoviePy中的一个类,用于创建图像剪辑。ImageClip类的一些常用方法包括resize
(更改图像大小)、set_position
(设置图像位置)和set_duration
(设置图像持续时间)。set_start
方法用于设置开始显示的时间点,set_end
方法用于设置结束显示的时间点。