- 地址:
- 海南省海口市
- 邮箱:
- admin@youweb.com
- 电话:
- 0898-08980898
- 传真:
- 1234-0000-5678
因为连续两次我的视频别人盗了,但是自己加的水印都太死板而且透明度还很高
所以我就是想知道怎样制作会动的透明的比较低的水印,需要下载什么软件吗
动态的水印和静态的水印,原理大致一样,做个动态的水印,植入到视频里面就可以了,绘声绘影可以完成
视频怎么去除水印?视频中的文字如何去除?
强烈推荐!!!测试多款软件,发现一款无比实用的视频去除水印神器软件——水印云,支持全网多视频平台,操作简单,一学就会,一键轻松去除视频水印。
官网直达:shuiyinyun.com
具体操作流程可以如下: 第一步:首先通过浏览器打开 “ 水印云” 的网站。下载桌面端,在首页找到【视频去水印】功能,进入视频去水印操作界面,找到水印视频将其导入。
第二步:视频文件上传完毕后添加去水印区域,然后会在视频上会出现一个水印框,然后调整水印框大小和水印框的位置,把水印框的大小和位置调整到和水印的位置相符即可,然后点开始去水印按钮,这时候就开始去水印了,去水印的时间也是根据视频大小,这个时候耐心等待下。
第三步:当去水印的的进度条到达100%后就表示视频去水印好了,大家如果想去水印后的效果,大家点击预览效果按钮就可以了。
?这个就是我给大家推荐的视频去水印软件了,可以很轻松的去除视频水印,这个软件我经常用的,感觉很灵活,今天推荐给大家哦。
抖助理官网下来,将教程,操作特别简单,可以单视频去水印,也可以批量视频去水印
1.先看单视频去水印教程,只需两秒
第一步,粘贴视频链接到抖助理软件,点击一键批量提取
下来,看无水印视频效果
粘贴视频主页链接到抖助理软件,点击一键主页批量提取,就去水印完成了
现在越来越多的商家看到了淘宝直播的优势,也愿意花时间去研究淘宝直播玩法,但是很多商家在刚开始做直播的时候,直播间里的人数是很少的,一场直播下来观看量的数据比较惨淡,这些商家就像采用刷观看量的方式,那么如何刷淘宝直播观看量?
如何刷淘宝直播观看量
一、如何刷淘宝直播观看量
1、利用第三方的工具刷。一般市场上刷直播间观看量的工具有很多,帮助商家增加直播间人数和点赞什么的。要注意找有真实用户资源的平台,这样观看的人数是一直存在的,点的赞也是有效的,对提高直播间权重和流量有很大益处。
2、找你的亲朋好友,让他们进入你的直播间观看并分享你的直播间链接,通过多个渠道分享出去,吸引更多的人进入直播间观看直播。
二、怎么提高直播间人气
1、直播间人数。直播时的观看人数是淘宝评判的一个重要标准,观看量越多,你的直播价值和排名也就越高,因此上面刷直播间人数的方法就可以利用起来了。
2、停留时间。观众在直播间停留时间的长短是是淘宝评判此流量是否有效的根据。所以我们要让观众尽可能停留时间长一些,否则就会被平台过滤掉,如果找第三方刷,那么停留时间也是需要控制的。
3、直播间互动。淘宝直播可不只是吸引观众观看就行,还要懂得带动他们的参与性。如果观众一直默默的看,没有任何点赞或评论等互动,同样是会被平台过滤掉,所以主播要懂得怎么激起观众的互动。
淘宝直播间的数据是动态的,如果能够活跃起直播间的气氛,那么就可以吸引更多的人来到店铺的直播间里,就比如滚雪球一样,直播间的效果是越来越好。
我是 @飓哥,经常会分享Java后台硬核知识,欢迎大家关注~
from bangbanglib import Base
from bangbanglib.common import *
import matplotlib.font_manager as fm
import json
import cv2
import numpy as np
import os
import subprocess
from PIL import Image, ImageDraw, ImageFont
# -*- coding: utf-8 -*-
from bangbanglib import Base
from bangbanglib.common import *
import matplotlib.font_manager as fm
import json
import cv2
import numpy as np
import os
import subprocess
from PIL import Image, ImageDraw, ImageFont
__all__ = ['MarkMonitor']
class MarkMonitor(Base):
def __init__(self, config):
super().__init__(config)
self.table_name = 'ptr_upload_video'
self.my_request = config['my_request']
self.oss = config['aliyun_oss']
self.oss_config = config['oss_config']
self.font_size = 15
self.line_space = 8
self.left_padding = 8
def list_all_video_names(self, page_num):
page_size = 10
offset = (page_num - 1) * page_size
select_wait_mark_video_sql = '''select id, video_name,longitude,latitude,address,create_name,create_time,create_id
from ptr_upload_video where is_mark='0' and create_time>date_add(now(),interval -1 day)
limit 1
'''
select_wait_mark_video_sql = select_wait_mark_video_sql.format(
offset=offset, page_size=page_size)
return self.my_db.query(
select_wait_mark_video_sql
)
def get_recycler_name(self, user_id):
get_recycler_name_sql = '''
select recycler_name from ptr_recycler where recycler_id=(select recycler_id from ptr_recycler_user u where u.user_id={user_id}) limit 1
'''
return self.my_db.query(get_recycler_name_sql.format(user_id=user_id))
def get_vid_path(self, vid_name):
'''获取视频路径'''
return 'bang-ptr/bsp/video/origin/video/{}'.format(vid_name)
def get_absolute_path(self, vid_name):
return self.oss_config['domain']+self.get_vid_path(vid_name)
def get_vid_mark_path(self, vid_name):
'''获取水印视频路径'''
return 'bang-ptr/bsp/video/watermark/video/{}'.format(vid_name)
# 封装函数
def cv2AddChineseText(self, img, text, position, textColor=(255, 255, 255), textSize=15):
if (isinstance(img, np.ndarray)): # 判断是否OpenCV图片类型
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
# 创建一个可以在给定图像上绘图的对象
draw = ImageDraw.Draw(img)
# 字体的格式
# fontStyle=ImageFont.truetype(
# "simsun.ttc", textSize, encoding="utf-8")
font_path = os.path.join(self.app_path['__conf__'], 'fonts','simhei.ttf')
fontStyle = ImageFont.truetype(fm.findfont(fm.FontProperties(fname=font_path)),textSize)
# 绘制文本
draw.text(position, text, textColor, font=fontStyle)
# 转换回OpenCV格式
return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
def drawRect(self, img, water_content):
width, height = self.size[0], self.size[1]
if (isinstance(img, np.ndarray)): # 判断是否OpenCV图片类型
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
# 创建一个可以在给定图像上绘图的对象
draw = ImageDraw.Draw(img, 'RGBA')
top_margin = self.get_top_margin(height, water_content)
# draw.rectangle((0,top_margin,width,self.get_mark_height(water_content)),fill=(0,0,0,70))
draw.rectangle((0, top_margin-self.line_space,
width, height), fill=(0, 0, 0, 70))
return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
def get_top_margin(self, height, water_content):
return height-self.get_mark_height(water_content)
def get_mark_height(self, water_content):
mark_height = (self.font_size+self.line_space) * \\
(self.get_mark_field_length(water_content))
return mark_height
def get_mark_field_length(self, water_content):
num = 0
if water_content['address']:
if len(water_content['address']) > self.font_num:
num += 2
else:
num += 1
if water_content['create_time']:
num += 1
if water_content['create_name']:
if len(water_content['create_name']) > self.font_num:
num += 2
else:
num += 1
if water_content['longitude']:
num += 1
return num
def get_font_num(self):
return int((self.size[0]-self.left_padding*2)/(self.font_size+0.1))
# ffmpeg将视频转为h.264编码格式
def get_ffmpeg_command(self, source_dir, filename, output_name):
return 'docker run --rm -v %s:/config linuxserver/ffmpeg -i /config/%s -c:v libx264 -b:v 2000k -preset medium /config/%s' % (source_dir, filename, output_name)
def get_line_size(self, lineNo):
return lineNo*(self.font_size+self.line_space)
# 在视频中插入文字、图片
def video_edit(self, video_path, write_path, water_content):
# 打开视频获取视频信息
video = cv2.VideoCapture(video_path, cv2.CAP_FFMPEG)
fps = video.get(cv2.CAP_PROP_FPS)
self.size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
# 每行字数
self.font_num = self.get_font_num()
# 新建视频
videoWriter = cv2.VideoWriter(
write_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, self.size, True)
# 读取视频
success, frame = video.read()
index = 1
top_margin = self.get_top_margin(self.size[1], water_content)
while success:
frame = self.drawRect(frame, water_content)
# 为视频添加字幕信息
lineNo = 0
# frame=self.cv2AddChineseText(frame, '视频中打印中文', (100, 100), (255, 0, 0), 30)
if water_content['address']:
position = (self.left_padding, top_margin +
self.get_line_size(lineNo))
address = str(water_content['address'])
if len(address) > self.font_num:
frame = self.cv2AddChineseText(
frame, '地址: '+address[0:self.font_num-3], position, (255, 255, 255), self.font_size)
lineNo += 1
position = (self.left_padding, top_margin +
self.get_line_size(lineNo))
frame = self.cv2AddChineseText(
frame, ''+address[self.font_num-3:min(self.font_num * 2 - 3, len(address))], position, (255, 255, 255), self.font_size)
else:
frame = self.cv2AddChineseText(
frame, '地址: '+address, position, (255, 255, 255), self.font_size)
lineNo += 1
if water_content['create_time']:
position = (self.left_padding, top_margin +
self.get_line_size(lineNo))
frame = self.cv2AddChineseText(
frame, '时间: ' + str(water_content['create_time']), position, (255, 255, 255), self.font_size)
lineNo += 1
if water_content['create_name']:
position = (self.left_padding, top_margin +
self.get_line_size(lineNo))
create_name = str(water_content['create_name'])
if len(create_name) > self.font_num:
frame = self.cv2AddChineseText(
frame, '回收员: '+create_name[0:self.font_num-3], position, (255, 255, 255), self.font_size)
lineNo += 1
position = (self.left_padding, top_margin +
self.get_line_size(lineNo))
frame = self.cv2AddChineseText(
frame, ''+create_name[self.font_num-3:min(self.font_num * 2 - 3, len(create_name))], position, (255, 255, 255), self.font_size)
else:
frame = self.cv2AddChineseText(
frame, '回收员: '+create_name, position, (255, 255, 255), self.font_size)
lineNo += 1
if water_content['longitude']:
position = (self.left_padding, top_margin +
self.get_line_size(lineNo))
frame = self.cv2AddChineseText(frame, '经纬度: ' + str(round(water_content['longitude'], 5)) + ","
+ str(round(water_content['latitude'], 5)), position, (255, 255, 255), self.font_size)
lineNo += 1
cv2.waitKey(int(1000 / int(fps)))
# 添加图片在此增加frame
videoWriter.write(frame)
success, frame = video.read()
index += 1
video.release()
# 更新是否打水印字段
def update_mark(self,id,is_mark):
self.my_db.update(
table_name=self.table_name,
update_data_dict={
'is_mark': is_mark
},
where={
'id': id
},
auto_commit=True,
)
def main(self):
self.my_logger.logger.info("视频添加水印开始")
video_dir = os.path.join(self.app_path['__data__'], 'video')
mark_video_dir = os.path.join(video_dir, 'mark')
if not os.path.exists(video_dir):
os.mkdir(video_dir)
if not os.path.exists(mark_video_dir):
os.mkdir(mark_video_dir)
page_num = 1
while True:
res = self.list_all_video_names(page_num)
if not res:
break
for row in res:
self.my_logger.logger.info(row)
video_name = row['video_name']
address = row['address']
create_name = row['create_name']
create_time = row['create_time']
create_id = row['create_id']
longitude = row['longitude'] if address else None
latitude = row['latitude'] if address else None
id = row['id']
if create_id and create_name:
recycler_name = self.get_recycler_name(create_id)
if recycler_name:
create_name = create_name+',' + \\
recycler_name[0]['recycler_name']
# 源视频地址
local_save_path = os.path.join(video_dir, video_name)
# 下载图片到本地
url = self.get_absolute_path(video_name)
img = self.my_request.get(url)
if img:
with open(local_save_path, 'wb') as f:
f.write(img)
else:
self.my_logger.logger.error('下载图片失败,video_name'+video_name)
continue
local_mark_save_path = os.path.join(mark_video_dir, video_name)
# 添加水印
water_content = {'address': address, 'create_time': create_time,
'longitude': longitude, 'latitude': latitude, 'create_name': create_name}
self.my_logger.logger.info('video_edit begin,video_name='+video_name)
self.video_edit(local_save_path,
local_mark_save_path, water_content)
self.my_logger.logger.info('video_edit end,video_name='+video_name)
# 转换为h264格式
filename, extname = video_name.split(
'.')[0], video_name.split('.')[1]
output_name = filename+'_h264.'+extname
command = self.get_ffmpeg_command(
mark_video_dir, video_name, output_name)
cmd_result = subprocess.getstatusoutput(command)
# 删除转换前的水印图,原图
if os.path.exists(local_mark_save_path):
os.remove(local_mark_save_path)
os.remove(local_save_path)
self.my_logger.logger.info('删除转换前的水印图和原图,video_name='+video_name)
else:
self.my_logger.logger.info('水印处理失败,video_name='+video_name)
continue
local_mark_save_path = os.path.join(
mark_video_dir, output_name)
if os.path.exists(local_mark_save_path):
self.oss.put(local_mark_save_path,
self.get_vid_mark_path(video_name))
self.update_mark(id,1)
# 删除转换后的水印图
os.remove(local_mark_save_path)
self.my_logger.logger.info('删除转换后的水印图,video_name='+video_name)
else:
self.my_logger.logger.error('视频转码失败,vide_name='+video_name)
page_num += 1
self.my_logger.logger.info('视频添加水印结束')
if __name__ == '__main__':
pass
这里因为格式问题需要转换264视频
采用的是docker命令
# ffmpeg将视频转为h.264编码格式
def get_ffmpeg_command(self, source_dir, filename, output_name):
return 'docker run --rm -v %s:/config linuxserver/ffmpeg -i /config/%s -c:v libx264 -b:v 2000k -preset medium /config/%s' % (source_dir, filename, output_name)
Basic Transcode(dockerhub 官方命令)
docker run --rm -it \\
-v $(pwd):/config \\
linuxserver/ffmpeg \\
-i /config/input.mkv \\
-c:v libx264 \\
-b:v 4M \\
-vf scale=1280:720 \\
-c:a copy \\
/config/output.mkvdocker run --rm -it \\
-v $(pwd):/config \\
linuxserver/ffmpeg \\
-i /config/input.mkv \\
-c:v libx264 \\
-b:v 4M \\
-vf scale=1280:720 \\
-c:a copy \\
/config/output.mkv
CV2指的是OpenCV2(Open Source Computer Vision Library),是一个开源的库平台计算机视觉库。有很强大的图片处理功能,可实现图像处理和计算机视觉方面的很多通用算法。
OpenCV官网文档 OpenCV-Python Tutorials
此外,还可以通过学习视频剪辑的技巧和经验,不断提升自己的剪辑能力。观看优秀的视频作品,学习他人的剪辑手法和创意,也是提高视频剪辑水平的有效途径。
如果抖音帐号在运营的过程中出现了违规行为,那么这种情况下是否还能够继续开直播呢?遇到这种情况,抖音达人们应该要怎么妥善处理呢?
如果被封号了就不可以开直播了。
怎么处理?
其实,抖音对于账号违规处罚也是有相关等级的,大致分为初级违规、中级违规、高级违规,并且相应的处罚措施也不一样。
1、初级违规:主要是指出现假行为或发布营销广。
处罚措施:
①扣除作弊行为量+警告+分享功能停用整改(7-30天);
②发广的处罚措施:发现永久关闭分享功能。
2、中级违规:被重大投诉与发布严违规内容。
处罚措施:
违规次数≥1:用户主页贴条公示+下架违规购物车+商品分享功能停用整改(7~30天);违规次数≥2:永久关闭商品分享功能。
3、高级违规:发布严重违规内容与行为严重违规。
处罚措施:一经发现永久关闭商品分享功能。
违规操作被限流了怎么办?
1.如果已经违规操作,在你的'账号还没有【已重置】的前提下是有救的,养号观察3-5天,看看以前的作品播放量有没有增长。
2.这个时候把以前的作品没有什么播放量的作品隐藏或者全删除,在做2个比之前更高质量的作品发布,看看1天内你的播放量有没有好转。
3.如果你作品发布1天后播放量仍然没有,建议换号,重新养一个新号3到5天左右就可以发布作品。
抖音查出有违规内容处罚也分了三个阶段,初级,中级和高级,大家可以对应处罚的内容了,判断自己目前是处于哪个阶段?看看自己是不是还有机会重新来过,只要不是特别严重的违规,其实,大家还是可以恢复的。