这是我这利用技术 自动生成的抖音视频,每个视频都是原创,而且可以基于主题生成对应的视频封面,例如需要制作大海主题的视频,只需要输入 “大海”,就可以生成视频封面为大海且背景音乐为海相关的主题视频。
抖音短视频分解
其实自动化制作视频并不难,我们可以通过一个短视频包含的内容为例子,参见下图:
通过上图可以将视频元素整理如下:
-
背景音乐:可以开发个爬虫,自动化下载网易云音乐、酷狗等网站的歌曲。
-
图片:可以在各大图片论坛下载免费的图片,例如pixabay、pexels等
-
文字:我们可以使用文字模版。例如本视频的文字模板如下
带上耳机' +'\n'\
'体验沉浸式{0} ' +'\n'\
' 三分钟助眠'
{0}可以用主题替换。
这样分析下来是不是简单多了,视频就像一个iPhone,它是由多个组件组成的,只需要将“元器件”放置对应的位置上就能行了。而视频完全可以流水线形式的被制作出来
机器人功能分析
本文教大家如何开发自动制作爆款抖音视频机器人,这样就可以批量生产xx主题的抖音短视频。项目结构如下
本机器人的模块包含以下功能:
机器人功能模块详解
讲解各个模块之前,先把视频生成的主函数贴出来,然后再逐一讲解用到的工具。
# 生成视频, 要素图片+文字+水印+背景音乐
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客户端,可以更傻瓜式制作视频。