Python通过文字生成语音,随机获取视频或图片素材生成伪原创的短视频

前段时间写了一篇《抖音自动引流脚本源码》主要通过语录系统自动生成语句或随机评论,适用于自动评论引流脚本。
今天脑洞大开,想用Python通过文字生成语音,随机获取视频或图片素材生成伪原创的短视频。
因为搬运短视频人工成本太高,我就想着能不能有自动化的方式来生成视频。
话不多说,先看看生成的视频效果
短视频:

你是我隔世的温柔,温暖我一生的眷恋

小视频:

你有信仰就年轻,岁月测试的不过是你的热忱


步骤一:
还是先通过语录系统获取文案。

msg = requests.get("https://words.lanhaiqingbao.com/api.php").text
print(msg)

步骤二:
文案获取后,就是转语音了,百度一翻后,找到一个百度语音AI工具 ,感兴趣的可以去看看,这里不多说,以下为主要代码:

if msg:
	APP_ID = ''
	API_KEY = ''
	SECRET_KEY = ''
	client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
	# 这里用的是百度语音识别,填入自己注册的API即可
	# 参数说明https://ai.baidu.com/ai-doc/SPEECH/Gk4nlz8tc
	result = client.synthesis(msg, 'zh', 1, {
		'vol': 10, 'per': random.randint(3,4), 'spd':3
	})
	# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
	if not isinstance(result, dict):
		with open(yuyin_path, 'wb') as f:
			f.write(result)
		print('处理成功')

步骤三:
生成语音后,接下来就是获取语音时长,由于之前没注意这个问题,走错了很多弯路。
以下是代码:

    print('获取文案语音时长')
    voice_clip = AudioFileClip(voice_path)
    voice_duration = voice_clip.duration    # 语音时长

步骤四:
由于文案时长有长有短的,如果短视频一个文案展示时间过长会显得单调,展示时间过短又让人感觉 看不过来,所以,下面是优化一下每个素材的展示时间,可根据需要自己调整。

    # 通过语音时长设置每个素材显示多少秒
    sp_time = []
    if voice_duration > 20 :
        minS = 3
        maxS = 4.5
    else:
        minS = 2
        maxS = 3.5
    yt = voice_duration
    while(yt):
        if(yt<3):
            sp_time.append(yt)
            yt=0
            break
        else:
            r = random.uniform(minS,maxS)
            sp_time.append(r)
            yt = yt - r
    # 统计需要多少个素材
    neep_pics = len(sp_time)

步骤五:
接下来就是获取素材了,代码如下:

    # 获取背景音乐
    print('随机选择一首背景音乐,并调整声音大小')
    musics = [join(music_path,fn) for fn in listdir(music_path) if fn.endswith('.mp3')]
    music = musics[random.randint(0,len(musics)-1)]
    music_clip = AudioFileClip(music)
    volumex(music_clip,0.7)
    
    print('开始选择封面图片,获取所有美女图片,随机选择一张')
    meinv_pics = [join(meinv_pic_dir,fn) for fn in listdir(meinv_pic_dir) if fn.endswith('.jpg')]
    meinv_one = meinv_pics[random.randint(0,len(meinv_pics)-1)]
    
    print('开始选择视频内容素材')
    rand_sp=random.sample(range(0, 293), neep_pics)
    img=Image.open(meinv_one)
    try:
        new_img=img.resize((720,1280),Image.BILINEAR)
        new_img.save(os.path.join(meinv_pic_dir,os.path.basename(meinv_one)))
    except Exception as e:
        print(e)
    image_clips = ImageClip(meinv_one,duration=2.5)

步骤六:
最后就是素材合并了

    video_clips =[]
    video_clips.append(image_clips)
    sp_num = 0
    for shipin in rand_sp:
        sp_url = fengjing_pic_dir+'\\'+str(shipin)+'.mp4'
        videos = VideoFileClip(sp_url)
        videos = videos.subclip(0,sp_time[sp_num]).resize(width=720,height=1280)
        video_clips.append(videos)
        sp_num = sp_num + 1
    result_video = concatenate_videoclips(video_clips, method='compose')
    audio_clip_add = CompositeAudioClip([music_clip,voice_clip])
    result_video = result_video.set_audio(audio_clip_add)
    print('音乐合并完成')
    print('开始导出视频...')
    result_video = result_video.subclip(0,voice_duration)
    result_video.write_videofile(final_video_path,fps=30,audio_codec="aac",codec="libx264")
    print('视频制作成功')
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值