如何连接moviepy中的视频?
How to concatenate videos in moviepy?
我正在尝试使用 moviepy 生成带有文本的视频。首先,我想显示一条消息,然后显示另一条消息。在我的例子中,我想显示 "Dog" 一秒钟,而不是 "Cat Cat"。为此,我使用以下代码:
来自 moviepy.editor 导入 *
def my_func(messeges):
clips = {}
count = 0
for messege in messeges:
count += 1
clips[count] = TextClip(messege, fontsize=270, color='green')
clips[count] = clips[count].set_pos('center').set_duration(1)
clips[count].write_videofile(str(count) + '.avi', fps=24, codec='mpeg4')
videos = [clips[i+1] for i in range(count)]
video = concatenate(videos)
video.write_videofile('test.avi', fps=24, codec='mpeg4')
video = VideoFileClip('test.avi')
video.write_gif('test.gif', fps=24)
if __name__ == '__main__':
ms = []
ms += ['Dog']
ms += ['Cat Cat']
my_func(ms)
这是我得到的结果:
有人知道为什么我对猫有问题吗?
要写入文件,所有帧的大小必须相同。在这里,带有 Dog 的帧比带有 CatCat 的帧小,这会破坏视频。第一个解决方案是在 concatenate_videoclips 中使用方法 "compose",这将为所有剪辑提供相同的大小:
import moviepy.editor as mp
messages = ["Dog", "Cat", "Duck", "Wolf"]
clips = [ mp.TextClip(txt, fontsize=170, color='green').set_duration(1)
for txt in messages ]
concat_clip = mp.concatenate_videoclips(clips, method="compose")
concat_clip.write_videofile("texts.mp4")
第二种解决方案是为所有文本剪辑提供相同的大小(宽度、高度):
import moviepy.editor as mp
messages = ["Dog", "Cat", "Duck", "Wolf"]
clips = [ mp.TextClip(txt, fontsize=170, color='green', size=(500,300))
.set_duration(1)
for txt in messages]
concat_clip = mp.concatenate_videoclips(clips)
concat_clip.write_videofile("texts.mp4")
我正在尝试使用 moviepy 生成带有文本的视频。首先,我想显示一条消息,然后显示另一条消息。在我的例子中,我想显示 "Dog" 一秒钟,而不是 "Cat Cat"。为此,我使用以下代码:
来自 moviepy.editor 导入 *
def my_func(messeges):
clips = {}
count = 0
for messege in messeges:
count += 1
clips[count] = TextClip(messege, fontsize=270, color='green')
clips[count] = clips[count].set_pos('center').set_duration(1)
clips[count].write_videofile(str(count) + '.avi', fps=24, codec='mpeg4')
videos = [clips[i+1] for i in range(count)]
video = concatenate(videos)
video.write_videofile('test.avi', fps=24, codec='mpeg4')
video = VideoFileClip('test.avi')
video.write_gif('test.gif', fps=24)
if __name__ == '__main__':
ms = []
ms += ['Dog']
ms += ['Cat Cat']
my_func(ms)
这是我得到的结果:
有人知道为什么我对猫有问题吗?
要写入文件,所有帧的大小必须相同。在这里,带有 Dog 的帧比带有 CatCat 的帧小,这会破坏视频。第一个解决方案是在 concatenate_videoclips 中使用方法 "compose",这将为所有剪辑提供相同的大小:
import moviepy.editor as mp
messages = ["Dog", "Cat", "Duck", "Wolf"]
clips = [ mp.TextClip(txt, fontsize=170, color='green').set_duration(1)
for txt in messages ]
concat_clip = mp.concatenate_videoclips(clips, method="compose")
concat_clip.write_videofile("texts.mp4")
第二种解决方案是为所有文本剪辑提供相同的大小(宽度、高度):
import moviepy.editor as mp
messages = ["Dog", "Cat", "Duck", "Wolf"]
clips = [ mp.TextClip(txt, fontsize=170, color='green', size=(500,300))
.set_duration(1)
for txt in messages]
concat_clip = mp.concatenate_videoclips(clips)
concat_clip.write_videofile("texts.mp4")