如何开发自动生产爆款抖音视频机器人

c9a7876410a8c5e7163f31da497af0d9.png

这是我这利用技术 自动生成的抖音视频,每个视频都是原创,而且可以基于主题生成对应的视频封面,例如需要制作大海主题的视频,只需要输入 “大海”,就可以生成视频封面为大海且背景音乐为海相关的主题视频

 

抖音短视频分解

其实自动化制作视频并不难,我们可以通过一个短视频包含的内容为例子,参见下图:

3ff25a160a03b544744e8aeaa672a092.png

通过上图可以将视频元素整理如下:

dd5601893537f7756fe7cfbead1984cd.png

  • 背景音乐:可以开发个爬虫,自动化下载网易云音乐、酷狗等网站的歌曲。

  • 图片:可以在各大图片论坛下载免费的图片,例如pixabay、pexels等

  • 文字:我们可以使用文字模版。例如本视频的文字模板如下

带上耳机' +'\n'\
                        '体验沉浸式{0} ' +'\n'\
                                    '     三分钟助眠'

{0}可以用主题替换。

这样分析下来是不是简单多了,视频就像一个iPhone,它是由多个组件组成的,只需要将“元器件”放置对应的位置上就能行了。而视频完全可以流水线形式的被制作出来

机器人功能分析

本文教大家如何开发自动制作爆款抖音视频机器人,这样就可以批量生产xx主题的抖音短视频。项目结构如下

ee97f6d5b72cad06946374f5938de490.png

本机器人的模块包含以下功能:

7001b685f82d46f4ac8b4ded9e1336df.png

机器人功能模块详解

讲解各个模块之前,先把视频生成的主函数贴出来,然后再逐一讲解用到的工具。

# 生成视频, 要素图片+文字+水印+背景音乐
def gene_video(key, text):
    # 下载图片
    image = ptl.download_pic(key, current_dir + MEDIA_IMAGES_PATH)
    # 添加水印
    water_img = pic_watermark(image, text, current_dir + OUTPUT_WATER_PATH)
    # pic_background(1080, 1920, 'white', current_dir + OUTPUT_MID_PATH)
    # 背景图片+主题图片合成
    merge_img = pic_merge(current_dir+OUTPUT_MID_PATH+'background_black.png', water_img, current_dir+OUTPUT_MID_PATH)
    thumb_img, img_dir = pic_text(merge_img, 320, 300, TEXT_TEMPLATE.format(DOUYIN_NAME), current_dir+OUTPUT_THUMBNAIL_PATH)
    time.sleep(5)
    # 随机获取music
    music = read_file(DOUYIN_MUSIC_PATH, '.mp3')[random.randint(1, 200)]
    print("随机获取mp3: %s" % music)
    image_to_video(img_dir, music, 180, current_dir+OUTPUT_PATH)

背景图片生成

# 背景图片生成 width, height = 1080/1920
def pic_background(width, height, color, target_dir):
    background = Image.new("RGBA", (width, height), color)
    background.save(target_dir + 'background_' + color + ".png")

图片添加文字/水印

# 图片添加文字
def pic_text(image, width, height, text, target_dir):
    # 打开图片
    img1 = Image.open(image)
    # 图片的颜色模式必须是 RBGA
    img1 = img1.convert('RGBA')
    text_overlay = Image.new('RGBA', img1.size, (255, 255, 255, 0))
    # 创建一个画图对象
    image_draw = ImageDraw.Draw(text_overlay)
    # 加载字体,设置字体大小
    font = ImageFont.truetype(TTF, 60)
    # 在指定位置画上文字, 140就是透明度, 值越大表示透明度低
    image_draw.text((width, height), text, font=font, fill=(255, 255, 255, 200))
    # 实现透明图像和一张背景不透明图像的合成
    image_with_text = Image.alpha_composite(img1, text_overlay)
    image_with_text.show()
    img_dir = target_dir
    img_file = img_dir + current_time + '_thumbnail' + ".png"
    image_with_text.save(img_file)
    return img_file, img_dir

图片合并

# 两张图片合并
def pic_merge(base_img, tmp_img, target_dir):
    base_img = Image.open(base_img)
    # 加载需要P上去的图片
    tmp_img = Image.open(tmp_img)  # 要粘贴的图可选择大小或整张
    # tmp_img居中粘贴; 60, 600 为(x,y)坐标,粘贴面积大小=1010-60, 1380-600
    box = (60, 600, 1010, 1380)  # 底图上需要P掉的区域
    region = tmp_img  # 使用整张
    region = region.resize((box[2] - box[0], box[3] - box[1]))
    base_img.paste(region, box)
    img_dir = target_dir +'merge_' + current_time + '.png'
    base_img.save(img_dir)
    return img_dir

特定后缀文件获取

# 获取特定路径下, suffix后缀的文件
def read_file(dir, suffix):
	res = []
	file_list = os.listdir(dir)
	for file_name in file_list:
		f_path = os.path.join(dir, file_name)
		if(os.path.isfile(f_path)):
			if file_name.endswith(suffix):
				res.append(os.path.join(f_path))
	return res

图片转视频

def image_to_video(img_dir, music, duration, target_dir):
    images_clip = ImageSequenceClip(img_dir, fps=25)
    temp_video = target_dir + 'temp/' + current_time + '_temp.mp4'
    images_clip.write_videofile(temp_video)
    audio_clip = AudioFileClip(music)
    video_clip = VideoFileClip(temp_video)
    # 混合音频
    # audio_clip_add = CompositeAudioClip([video_audio_clip, audio_clip])
    final_video = video_clip.set_audio(audio_clip)
    final_video.write_videofile(target_dir + current_time + "_video_result.mp4", audio_codec='aac')

OK,以上就是机器人的核心模块,下文介绍基于TKinter开发一个GUI客户端,可以更傻瓜式制作视频。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件质量保障

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值