卡点视频怎么制作抖音,抖音自制卡点视频

作者丨星安果 来源丨AirPython1目 标 场 景玩抖音的朋友都应该知道,最近「卡点视频」简直不

作者丨兴安国源丨AirPython

1个目标场景

在Tik Tok玩的朋友应该知道“点视频”最近不太火。Tik Tok的许多大神也提供了编辑各种视频剪辑的教程。

其实很多手机app或者PR、FCPX软件也可以用来制作剪辑视频,但是剪辑效率太慢了。如果你想实现一篮子的剪辑素材,运行一段代码就可以点击获得一个视频。这种感觉应该不会太爽。

本文的目的是使用Python从一篮子材料中快速编辑小视频剪辑。

2准准备工作

首先,视频剪辑需要使用“opencv”库,并通过pip3安装到虚拟环境中。

# opencv用于编辑视频pip3安装opencv-python。但是通过opencv编辑的视频只有图片,没有背景音乐。

我们需要用“ffmpeg”从Tik Tok用ffmpeg命令下载的卡点视频中分离出一个音频文件,然后合并到上面的视频片段中。

#分离BGM,合并视频和BGMpip3安装ffmpeg3脚本

让我们以一段关于Tik Tok的音乐片段为例。这个背景音乐的节奏需要一个2s的视频,然后剩下的都是静止画面,每个画面显示0.5s

制作抖音卡点视频?Python来帮你

通过以下五个步骤来完成视频的剪辑:剪辑起始视频、合并静止图片视频、合并上述两个视频、给视频添加水印、添加背景音乐。

第一步,我们需要从视频素材文件中截取一个2s的片段。

通过cv2库为视频文件构建一个“VideoCapture”对象,然后得到视频帧率和视频分辨率。

#视频来源video capture=cv2 . video capture(sour _ filename)#采集视频的帧率fps=video capture . Get(cv2 . cap _ prop _ fps)#获取视频的分辨率img _ size=(int(video capture . Get(cv2 . cap _ prop _ frame _ width))、int(video capture . Get(cv2 . cap _ prop _ frame _ height))。然后,用上面的帧率和分辨率构建一个写作对象,即“VideoWriter”。

#建立一个视频编写对象video _ writer=cv2 . video writer(output _ filename,cv2.videowriter _ fourcc (‘x ‘,’ v ‘,’ I ‘,’ d ‘),fps,img _ size)。最后传入开始编辑的起点和要剪切的长度,然后循环读取视频帧。如果条件得到满足,

视频帧写入后,需要手动释放对象资源。

#开始帧和结束帧start _ Frame=fps * start _ time end _ Frame=start _ frameperoid * fps #循环读取视频帧,True时只写入开始帧和结束帧之间的帧数据: success,Frame=video capture . Read()if success 3360 I=1 if start _ Frame=I=end _ Frame 3360 #将捕捉到的画面写入“新视频”video _ writer . Write(Frame)else 3360 break #释放资源videoCapture.release()第二步是

Ps:为了保证每张静止图片显示0.5s,并且静止图片生成的视频使用与第一张视频相同的帧率,我们要对每张图片进行多次写入,也就是多帧数据。每张图片的总写入次数是前一个视频帧率的1/2。

与剪辑视频类似,静止画面合成视频也需要构建一个写入对象VideoWriter,然后通过四舍五入得到需要写入的总帧数。

#视频格式:MP4 fourcc=cv2 . Video writer _ fourcc(‘ m ‘,’ p ‘,’ 4 ‘,’ v’) #建立写入对象Video=cv2 . Video writer(output _ Video _ path,fourcc,fps,Img _ size)# total _ count=math . ceil(fps/2)每张图片要写入的帧数。另外需要注意的是,为了保证图片合成的视频能够和第一个视频流畅剪辑,这里需要缩放图片的分辨率,没有像素的位置用黑色填充。

def Resize _ image(target _ image _ path,target _ size) 3360 ‘ ‘调整图片大小,用黑色填充缺失的部分。目标_图像_路径:图片路径3360

param target_size: 分辨率大小 :return: “”” image = Image.open(target_image_path) iw, ih = image.size # 原始图像的尺寸 w, h = target_size # 目标图像的尺寸 scale = min(w / iw, h / ih) # 转换的最小比例 # 保证长或宽,至少一个符合目标图像的尺寸 nw = int(iw * scale) nh = int(ih * scale) image = image.resize((nw, nh), Image.BICUBIC) # 缩小图像 # image.show() new_image = Image.new(‘RGB’, target_size, (0, 0, 0, 0)) # 生成黑色图像 # 将图像填充为中间图像,两侧为灰色的样式 new_image.paste(image, ((w – nw) // 2, (h – nh) // 2)) # 覆盖原图片 new_image.save(target_image_path)

图片分辨率处理完成之后,最后就可以读取指定文件夹下的图片,按照上面获取的次数把静态图片写入到视频文件中。

# 使用opencv读取图像frame = cv2.imread(image_path)# 直接缩放到指定大小frame_suitable = cv2.resize(frame, (img_size[0], img_size[1]), interpolation=cv2.INTER_CUBIC)# 把图片写进视频# 重复写入多少次count = 0while count < total_count: video.write(frame_suitable) count += 1

以上两步已经完成了两段单独视频的剪辑,第三步是「合成」上面的两段视频。

由于两段视频的帧率、分辨率都一致,这里不需要做其他多余的处理,只需要遍历两段视频文件,循环读取每一帧,然后写入到新的视频文件中。

第四步,需要对视频添加「水印」操作。

添加水印也很方便,利用 cv2 中的函数 putText,指定水印的起始坐标、字体样式、字体大小和颜色,然后循环每一帧,写入到视频就可以实现。

ret, frame = cap.read()while ret: # 文字在图中的坐标(注意:这里的坐标原点是图片左上角) x, y = img_size[0] – 200, img_size[1] – 50 # 写入水印文字,文字颜色为白色 cv2.putText(img=frame, text=mask_word, org=(x, y), fontFace=cv2.FONT_HERSHEY_COMPLEX_SMALL, fontScale=1, color=(255, 255, 255)) video_writer.write(frame) ret, frame = cap.read()# 删除源文件,并重命名临时文件os.remove(video_path)os.rename(video_temp_path, video_path)print(‘水印添加完成~’)video_writer.release()cap.release()

最后一步就是合成视频和背景音乐,重新生成一段视频文件。

利用视频的帧率与总帧数得到视频的总时长,然后利用 ffmpeg 命令对背景音乐做一次裁剪操作,使得视频的长度与背景音乐的时间长度一致。

#获取视频的长度cap = cv2.VideoCapture(video_path)#帧率fps = cap.get(cv2.CAP_PROP_FPS)#总帧数frame_count = cap.get(cv2.CAP_PROP_FRAME_COUNT)#视频总时长-秒,这里做取整操作 【浮点类型】time_count = math.floor(frame_count / fps)print(‘帧率:%f,总帧数:%d’ % (fps, frame_count))print(time_count)# 3.截取音频# 为了简单,这里一般不会超过一分钟bgm_temp_path = get_temp_path(bgm_path, ‘temp_new’)os.system(‘ffmpeg -i %s -ss 00:00:00 -t 00:00:%d -acodec copy %s’ % (bgm_path, time_count, bgm_temp_path))

接着使用 ffmpeg 命令,合并视频文件和音频文件,就可以生成一个我们需要的卡点视频。

#视频、音频合二为一# 临时文件video_temp_path = get_temp_path(video_path, ‘temp’)os.system(‘ffmpeg -i %s -i %s -vcodec copy -acodec copy %s’ % (video_path, bgm_path, video_temp_path))# 删除源文件,重命令临时文件os.remove(video_path)os.rename(video_temp_path, video_path)

4结 果 结 论

运行程序后,视频、图片、背景音乐会自动进行剪辑、合成,最后加上水印,在本地生成一个卡点视频。

源码:

https://github.com/xingag/tools_python/tree/master/video_auto/%E5%8D%A1%E7%82%B9%E8%A7%86%E9%A2%91

最后,我自己是一名从事了多年开发的Python老程序员,辞职目前在做自己的Python私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Python学习干货,可以送给每一位喜欢Python的小伙伴,想要获取的可以关注我的头条号并在后台私信我:01,即可免费获取。

剪辑教程

pr制作文字慢慢浮现效果,怎样用pr做出文字逐个出现的效果

2022-6-6 16:10:00

剪辑教程

抖音自己卡点视频怎么做,抖音里卡点视频是怎么做出来的

2022-6-6 16:12:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索