百万点赞怎么来?Python批量制作抖音的卡点视频原来这么简单!

1

目 标 场 景

玩抖音的朋友都应该知道,最近「卡点视频」简直不要太火。抖音上很多大神也出了剪辑各种卡点视频的教程。

实际上,利用很多手机 APP 或者 PR、FCPX 软件也可以制作卡点视频,但是剪辑效率都太慢。如果想实现一篮子剪辑素材,通过运行一段代码,得到一个卡点视频,这种感觉不要太爽。

本篇文章的目的是利用 Python 从一篮子素材中快速地剪辑卡点小视频这一操作。

2

准 备 工 作

首先,对视频的剪辑需要用到「opencv」库,通过 pip3 安装到虚拟环境中。

# opencv 用于剪辑视频
pip3 install opencv-python

然而,通过 opencv 剪辑的视频只有画面,没有背景音乐。

我们需要借助「ffmpeg」,将抖音下载好的某个卡点视频利用 ffmpeg 命令分离出音频文件,然后合并到上面剪辑的视频当中。

# 分离BGM、合并视频和BGM
pip3 install ffmpeg

3

编? 写? 脚? 本

我们以抖音上的某个卡点音乐为例,这段背景音乐的节奏需要一个 2s 的视频,然后其他都是静态图片,每个图片显示 0.5s。

下面通过 5 个步骤完成卡点视频的剪辑,分别是:剪辑开始视频、合并静态图片视频、合并上面两段视频、给视频加入水印、加入背景音乐。

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

通过 cv2 库为视频文件构建一个「VideoCapture」对象,然后获取到视频的帧率和视频的分辨率。

# 视频源
videoCapture = cv2.VideoCapture(soure_filename)

# 获取视频的帧率
fps = videoCapture.get(cv2.CAP_PROP_FPS)

# 获取视频的分辨率
img_size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),
                int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))

然后,利用上面的帧率、分辨率构建一个写入对象,即:「VideoWriter」。

# 构建一个视频写入对象
video_writer = cv2.VideoWriter(output_filename, cv2.VideoWriter_fourcc(‘X‘, ‘V‘, ‘I‘, ‘D‘), fps, img_size)

最后,通过传入要开始剪辑的起始点和要剪的长度,然后循环读取视频帧,如果满足条件,就写入到目标视频文件中。

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

# 开始帧和结束帧
start_frame = fps * start_time
end_frame = start_frame + peroid * fps

# 循环读取视频帧,只写入开始帧和结束帧之间的帧数据
while True:
      success, frame = videoCapture.read()
      if success:
            i += 1
            if start_frame <= i <= end_frame:
                # 将截取到的画面写入“新视频”
                video_writer.write(frame)
      else:
            break
# 释放资源
videoCapture.release()

第二步,需要把所有的静态文件都合成一段视频。

ps:为了保证每一张**静态图片都显示 0.5s,并且静态图片生成的视频与第一段视频使用同一帧率,因此我们应该针对每一张图片写入多次,即多帧数据。**每张图片写入的总次数为上段视频的帧率的 1/2。

和剪辑视频类似,静态图片合成视频也需要先构建一个写入对象?VideoWriter,然后通过向上取整获取要写入的总帧数。

# 视频格式:MP4
fourcc = cv2.VideoWriter_fourcc(‘m‘, ‘p‘, ‘4‘, ‘v‘)

# 构建写入对象
video = cv2.VideoWriter(output_video_path, fourcc, fps, img_size)

# 每一张图片要写入的帧数目
total_count = math.ceil(fps / 2)

另外需要注意的是,为了保证图片合成的视频能与第一段视频顺利剪辑在一起,这里需要对图片的分辨率进行缩放,没有像素的位置填充为黑色。

def resize_image(target_image_path, target_size):
    """
    调整图片大小,缺失的部分用黑色填充
    :param target_image_path: 图片路径
    :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 = 0
while 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)
Python资源分享秋秋裙 855408893 ,内有安装包,学习视频资料,这里是Python学习者的聚集地,零基础,进阶,都欢迎

4

结 果 结 论

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

原文地址:https://blog.51cto.com/14445003/2419995

时间: 2024-11-08 02:54:56

百万点赞怎么来?Python批量制作抖音的卡点视频原来这么简单!的相关文章

用Python全自动下载抖音视频!

/ 01 / Charles 用Charles来找视频的API接口,具体操作和之前当当网那个案例一样,不细说. 这里通过滑动抖音App,可以获取到视频的请求信息. 通过多次实验,发现链接的后面是会不停的改变,只有链接的前头始终不变,即「http://v1-dy」「http://v6-dy」「http://v9-dy」不变. 所以在写脚本的时候,可以以这些信息做为链接开头. / 02 / mitmproxy 利用mitmproxy中的mitmdump组件,对接Python脚本,用Python实现监

抖音下载的视频怎么去水印

抖音已经成为我们日常休闲娱乐必备的工具,不仅可以看到世界各地最新的动态,还可以给业余生活增添一些色彩,但是当我看到一个搞笑的抖音短视频想保存到相册时,就会发现保存的视频中带有很大的水印,发布在抖音或者其他平台都会有一定的限制,这时候就会想到能不能将视频中的水印去掉,平时我们用的最多的就是去掉图片中的水印,那抖音下载的视频怎么去水印呢?一起来看一看吧! 1.首先打开抖音短视频,找到要保存到相册的视频,然后点击右下角的三个点,找到"保存本地"即可将视频保存下来,此时的视频中带有抖音的水印:

python批量制作雷达图

老板要画雷达图,但是数据好多组怎么办?不能一个一个点excel去画吧,那么可以利用python进行批量制作,得到样式如下: 首先制作一个演示的excel,评分为excel随机数生成: 1 =INT((RAND()+4)*10)/10 加入标签等得到的excel样式如下(部分,共计32行): 那么接下来就是打开python写码了,本文是基于python3.4进行编写 1 wb = load_workbook(filename=r'C:\Users\Administrator\Desktop\数据指

一篇文章教会你用Python抓取抖音app热点数据

今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一款收费的抓包修改工具,易上手,数据请求容易控制,修改简单,抓取数据的开始暂停方便等优势,网上也有汉化版,下载地址为http://www.zdfans.com/html/42074.html,一路默认安装就ok了. 安装完成后要设置代理,依次点击代理——代理设置. 然后在手机端设置代理,如下图所示:

一篇文章教会你用Python抓取抖音app热点数据!

今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一款收费的抓包修改工具,易上手,数据请求容易控制,修改简单,抓取数据的开始暂停方便等优势,网上也有汉化版,下载地址为http://www.zdfans.com/html/42074.html,一路默认安装就ok了. 安装完成后要设置代理,依次点击代理——代理设置. 然后在手机端设置代理,如下图所示:

抖音60秒视频权限开通方法

网上的都是让加微信然后收费或淘宝收费的 首先了解60s权限规则,进入抖音账号后台,点击进入设置界面 在设置里面选择“反馈与帮助”>视频>如何获得长视频权限?在“如何获得长视频权限?”页面 点击“更多”进入抖音长视频权限开通申请界面.如下图所示,是点击更多,不是点击意见反馈! 根据抖音君的要求,我们需要拥有1000+的粉丝,才可以有资格申请1分钟的长视频权限 可能有兄弟会说,我到哪里搞粉丝呀,打开:http://ds.xiaofany.com/ 在抖音区进行下单 聪明的孩子自然知道的,其实是有部

抖音快手短视频去水印API,接口开发文档

开发者官网:http://api.lingquan166.com/ 简介:根据抖音.微视.小红书.皮皮搞笑等APP中复制出来的链接,解析获取短视频的标题.封面.无水印短视频地址等信息. 接口地址: https://api.lingquan166.com/dsp?token=122917VU60151BJHTBI&key=46FDEDB583EKZI42D26392&url=视频链接(不支持中文) 1. 请求方式 GET请求(PHP可用CURL请求) 2. 返回数据 JSON 请求成功返回示

python 基础学习之 python怎么制作第一个直方图 散点图 折线图 非常简单 利用python画图 python利用numpy画图 我用python制作第一个直方图 散点图 折线图

思路 首先声明 :非常简单  最简单的入门就是 直接拷贝几行代码看看效果 运行玩玩 注意: 本文采用窗口弹出运行显示的方式   可能需要网页显示图表 并且实时生成可能需要另找办法  暂时不处理. 安装numpy python文件导入numpy 复制几行代码 保存即可 在目录下 直接点击运行python文件  就会弹出一个类似cmd的小黑窗  另外再弹出一个绘制出来的图表 完成 关闭的时候 关闭图片  小黑窗自动回关闭. 部分效果图如下 代码参考 Python干货:分享Python绘制六种可视化图

CorelDRAW快速制作抖音幻影图像效果

本教程讲解非常受欢迎的幻影图像效果(Anaglyph 3d),也叫图像分色立体效果,这其中我们要用到CorelDRAW中的透明度工具. 在开始实施Anaglyph效应之前,应当知道,Anaglyph 3D是通过使用不同颜色(通常是颜色相反)的颜色(通常是红色和青色)对每个眼睛的图像进行编码来实现的立体3D效果的名称.Anaglyph 3D图像包含两种不同的滤色图像,一种用于每只眼睛.当通过“彩色编码”的“浮雕眼镜”观看时,每一幅图像都达到一只眼睛,显示出一个完整的立体影像. 在CorelDRAW