机文章

自动剪辑的python:自动化剪视频 满满干货

 

6月的1天,新的1天,快来看看小编今天的文章吧!

最近需要录制视频,讲解产品,和市场人员讲解功能点现在AI没有是很火么,想搞个AI自动播报开始我尝试用pyttsx3,发现机器发声,效果没有好想想以前折腾,别人用Edge文本播报功能做了个产品结果去搜,需要钱了。

然后继续搜,发现有个库,直接可以用这个库来实现虽然这方面的介绍没有多,我尝试了1下,效果还是可以的Edge-TTS介绍Edge-TTS是1个Python库,它使用微软的Azure Cognitive Services来实现文本到语音转换(TTS)。

该库提供了1个简单的API,可以将文本转换为语音,并且支持多种语言和声音要使用Edge-TTS库,首先需要安装上Edge-TTS库,安装直接使用pip 进行安装即可终端下执行以下命令安装pip install edge-tts

安装成功后,直接在终端运行edge-tts命令:edge-tts显示帮助菜单即代表安装成功:➜ Downloadsedge-ttsusage: edge-tts[-h][-t TEXT][-f FILE]

[-v VOICE][-l][--rate RATE][--volume VOLUME][-O OVERLAPPING][--write-media WRITE_MEDIA][--write-subtitles WRITE_SUBTITLES]

[--proxy PROXY]随后输入命令:edge-tts --list-voices该命令可以将Edge浏览器中,内置的语言角色列表列出来1望而知,几乎支持所有支流的通用语,Gender字段为合成语音的性别,Male代表男性,Female代表女性,zh开头的就是中文语音角色,这里以微软的小伊为例子:

edge-tts --voice zh-CN-XiaoyiNeural --text "你好啊,我是智能语音助手" --write-media hello_in_cn.mp3该命令含义是通过zh-CN-XiaoyiNeural角色合成语音:"你好啊,我是智能语音助手"的内容,随后将音频流写入hello_in_cn.mp3文件。

程序返回:Downloadsedge-tts--voicezh-CN-XiaoyiNeural--text "你好啊,我是智能语音助手" --write-mediahello_in_cn.mp3WEBVTT

00:00:00.100--> 00:00:00.525你好程序会自动将时间轴和语音文本匹配输出,如此1来,连字幕文件也有了,可谓是1举两得,1箭双雕此同时,我们也可以调整合成语音的语速:edge-tts --rate=0% --voice zh-CN-XiaoyiNeural --text 。

"你好啊,我是智能语音助手" --write-media hello_in_cn.mp3--rate参数可以通过加号或者减号同步加快或者减慢合成语音的语速亦或者,调整合成语音的音量:edge-tts --volume=0% --voice zh-CN-XiaoyiNeural --text 。

"你好啊,我是智能语音助手" --write-media hello_in_cn.mp3python脚本语音合成除了通过命令进行语音合成,edge-tts也支持在Python脚本,编辑test.py文件:

import edge_ttsimport asyncioTEXT = "你干嘛去了?听闻远方有你"print(TEXT)voice = zh-CN-YunyangNeuraloutput = voicetest.mp3

rate = +0%volume = +0%asyncdefmy_function(): tts = edge_tts.Communicate(text=TEXT, voice=voice, rate=rate, volume=volume)

await tts.save(output)if __name__ == __main__: asyncio.run(my_function())开始使用"zh-CN-XiaoyiNeural"这个主播来播放,感觉总少了那个味,于是换"zh-CN-YunyangNeura",结果是好听多了。

也可也通过条件,来查找想要的音色import asyncio import random import edge_tts from edge_tts import VoicesManager TEXT =

"中文语音测试"OUTPUT_FILE ="china.mp3"asyncdef_main() -> None: voices = await VoicesManager.create()

voice = voices.find(Gender="Female", Language="zh") communicate = edge_tts.Communicate(TEXT, random.choice(voice)[

"Name"]) await communicate.save(OUTPUT_FILE) if __name__ == "__main__": asyncio.run(_main())你还可以通过 --rate 和 --volume 选项来调整语速和音量,0% 代表降低语速/音量。

edge-tts --rate=0% --text "Hello, world!" --write-media hello_with_rate_halved.mp3edge-tts --volume=0% --text

"Hello, world!" --write-media hello_with_volume_halved.mp3声音问题解决了,我想给视频添加字幕,用gtp生成了代碼但是,运行报错:"This error can be due to the fact that ImageMagick", 根本原因,是本机没装ImageMagick, 其实这个包,包含了ffmeg, 在本机上装1个ImageMagick,就解决了所有问题。

moviepy 安装之ImageMagick安装这是因为ImageMagick没有安装3、安装ImageMagick:(1)、对应版本的:[https://www.imagemagick.org/script/index.php][https_www.imagemagick.org_script_index.php]

(2)、安装好,修改moviepy包(\Lib\site-packages\moviepy\)中的config_defaults.py文件,修改以后如下:import osFFMPEG_BINARY = os.getenv(

FFMPEG_BINARY, ffmpeg-imageio)# IMAGEMAGICK_BINARY = os.getenv(IMAGEMAGICK_BINARY, auto-detect) # 这是注释掉原来的

IMAGEMAGICK_BINARY = r"D:\Program Files\ImageMagick-7.0.8-Q16\magick.exe"# 这是要添加ImageMagic的安装路径这个问题又解决了。

要生成视频,就可以用pynimate来生成数据视频:defgenerate_vedio(): df = pd.DataFrame( {"time": ["1960-01-01", "1961-01-01"

, "1962-01-01"],"Afghanistan": [1, 2, 3],"Angola": [2, 3, 4],"Albania": [1, 2, 5],"USA": [5, 3, 4],"Argentina"

: [1, 4, 5], } ).set_index("time") cnv = nim.Canvas() bar = nim.Barplot(df, "%Y-%m-%d"

, "2d") bar.set_time(callback=lambda i, datafier: datafier.data.index[i].year) cnv.add_plot(bar)

cnv.animate() cnv.save("file", 24, "gif")最后还有1个问题,那就是保存动画,有两个格式可以选择:gif或者mp4保存为动图1般使用:cnv.save("file", 24, "gif")若要保存为mp4的话,ffmpeg是个没有错的选择,它是保存为mp4的标准编写器。

pip install ffmpeg-python,同样也可以使用Canvas.save()来保存但是即便我加了ffmpeg,仍然保存没有成功,于是用import moviepy.editor 来保存的添加背景音乐,

defadd_audio_to_vedio_in_place(audio_file, vedio_file, time_place): video = mp.VideoFileClip(vedio_file)

audio = mp.AudioFileClip(audio_file) mixed = mp.CompositeAudioClip([audio.set_duration(video.duration).set_start(

2, change_end=True)])# video = video.set_audio(audio.set_duration(video.duration).set_start(time_place))

video = video.set_audio(mixed) video.write_videofile("new_video4.mp4")生成字幕文件:defgenerate_str():# 创建1个新的字幕文件

subs = pysrt.SubRipFile()# 添加字幕 subs.end(pysrt.SubRipItem(index=1, start=pysrt.SubRipTime(0

, 0, 1, 0), end=pysrt.SubRipTime(0, 0, 5, 0), text="天下大战")) subs.end(pysrt.SubRipItem(index=

2, start=pysrt.SubRipTime(0, 0, 6, 0), end=pysrt.SubRipTime(0, 0, 10, 0), text=

"天下和平"))# 保存字幕文件 subs.save("example.srt")添加字幕:defadd_srt(src_file, video_file): video = mp.VideoFileClip(video_file)

# 获取视频的宽度和高度 w, h = video.w, video.h# 所有字幕剪辑 txts = [] content = read_srt(src_file) sequences = get_sequences(content)

for line insequences:if len(line) < 3: continue sentences = line[2] start = line[

1].split( --> )[0]end = line[1].split( --> )[1] start = strFloatTime(start)end = strFloatTime(

end) start, end = map(float, (start, end)) span = end - start txt = (mp.TextClip(sentences, fontsize=

40, font=SimHei, size=(w - 20, 40), align=center, color=

red) .set_position((10, h - 150)) .set_duration(span) .set_start(start))

txts.end(txt)# 合成视频,写入文件 video = mp.CompositeVideoClip([video, *txts]) fn, ext = splitext(video_file)

video.write_videofile(f{fn}_2带字幕{ext})这样,1个自动化视频就制作完成了经常看到视频,自动数据播报,或者人情圆滑鸡汤等,估计就是用这样批量生产的,看来我找到了流量密码。

谢谢您的支持!订阅我们的网站以获取更多类似的内容。

为您推荐

自动剪辑的python:自动化剪视频 满满干货

自动剪辑的python:自动化剪视频 满满干货

最近需要录制视频,讲解产品,和市场人员讲解功能点。现在AI不是很火么,想搞个AI自动播报。开始我尝试用python ...

2023-06-08 栏目:编程控

当前非电脑浏览器正常宽度,请使用移动设备访问本站!