Moviepy模块之视频添加图片水印

Posted 空空star

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Moviepy模块之视频添加图片水印相关的知识,希望对你有一定的参考价值。

文章目录


前言

大家好,我是空空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种位置效果图

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方法用于设置结束显示的时间点。

如何实现流媒体视频平台的直播水印开发?

在我们遇到的项目当中,有用户在使用平台过程中担心自己的直播视频被盗用,或者需要展示自己的品牌,就需要在视频上增加水印。因此我们在新版本的EasyNVR内增加了水印模块。

​在EasyNVR通道管理的列表中,我们新增了一栏水印的列表:

\'如何实现流媒体视频平台的直播水印开发?_水印\'

在添加水印的弹窗中上传水印图片,可以移动水印的坐标,修改水印图片的大小,水印图片最多显示一个,多次设置水印会覆盖之前设置的,只显示最后一次的水印图片。

\'如何实现流媒体视频平台的直播水印开发?_水印_02\'

在添加水印时,想要把水印放在想要的位置就要获取到水印相对视频的坐标位置,要想正确设置水印的位置坐标,可以通过获取到视频快照的宽高来设置。

\'如何实现流媒体视频平台的直播水印开发?_流媒体_03\'

在实际运行中我们也碰到一点小问题。EasyNVR程序有两种方法启动,一种是运行EasyNVR.exe以进程方式启动,另一种是运行 ServiceInstall-EasyNVR.exe 以服务方式启动。

水印图片保存在安装包目录下,所以在前期测试中,以服务方式启动时,因为程序运行路径不是在安装包目录下,所以获取不到水印图片,从而异常退出,后来改为保存两份水印图片,另一份水印图片在C:\\Windows\\System32\\目录下的watermark里。经过修改之后,不管用户以哪种方式启动程序都不会因为找不到水印图片而异常退出了。

\'如何实现流媒体视频平台的直播水印开发?_流媒体_04\'

以上是关于Moviepy模块之视频添加图片水印的主要内容,如果未能解决你的问题,请参考以下文章

Moviepy模块之视频去除声音添加音乐

安装ImageMagick

FFmpeg进阶:给视频添加文字水印

如何实现流媒体视频平台的直播水印开发?

python也能玩视频剪辑!moviepy操作记录总结

moviepy处理视频帧和遍历的方式处理视频帧速度对比。