CodeGym /课程 /Python SELF ZH /将视频分割成片段并合并剪辑到一个新的视频项目

将视频分割成片段并合并剪辑到一个新的视频项目

Python SELF ZH
第 47 级 , 课程 3
可用

1. 视频分割

在这节课里,咱们的重点是用 MoviePy 分割视频和合并剪辑。你会学到怎么把视频分成小段,以及如何用这些小段创建完整的新视频项目。就像一顿用你最喜欢的编程教程拼起来的“Python 混搭”视频早餐。

我们先从如何将视频分割成片段开始。这技能在很多场景下都可能派上用场:从给你的最新科学发现做个 demo 到剪辑出你在 Zoom 会议里眨眼的所有瞬间。

根据时间分割视频

视频分割基于使用 MoviePy 的 cut 方法。我们可以设定感兴趣的起始和结束时间区间。


from moviepy.editor import VideoFileClip

# 加载视频
clip = VideoFileClip("input_video.mp4")

# 剪出10到20秒的片段
clip1 = clip.subclip(10, 20)

# 保存剪辑出的片段
clip1.write_videofile("clip1.mp4")

上面的代码剪出了原视频第10秒到第20秒之间的片段。为了省心、省硬盘空间,一定要确保时间戳正确,别弄出个“意外”的片段,比如你远程咖啡休息的片段。

将视频分成多个部分

你可以把视频分成多个部分,并将它们分别保存为独立的剪辑,之后再进行合并。

将视频分成三个部分

比如,咱们有一个总长度为30秒的视频,想把它平均分成三个每段10秒的小片段。


# 创建三个相等的片段
clip1 = video.subclip(0, 10)
clip2 = video.subclip(10, 20)
clip3 = video.subclip(20, 30)

# 保存片段
clip1.write_videofile("clip_part1.mp4")
clip2.write_videofile("clip_part2.mp4")
clip3.write_videofile("clip_part3.mp4")

这段代码生成了三个视频片段:

  1. clip1 — 从0到10秒,
  2. clip2 — 从10到20秒,
  3. clip3 — 从20到30秒。

每个片段都被保存成独立的视频文件。

剪辑出最有趣的片段

有时候一个片段还不够,你需要整一束视频“花束”。我们可以创建多个这样的片段并保存它们。


clip2 = clip.subclip(30, 40)
clip3 = clip.subclip(50, 60)

clip2.write_videofile("clip2.mp4")
clip3.write_videofile("clip3.mp4")

现在咱们有了三个从原视频中剪辑出的片段。几乎像是在拼谜题,只不过是反过来。

2. 合并剪辑

剪好后,是时候把我们的视频“云”重新拼回去了,只不过是以新的、加工过的形式。这时,MoviePy 的合并功能就派上用场了。

从多个视频片段创建合集

要合并剪辑,可以用 concatenate_videoclips 方法。这个方法能按照指定顺序把剪辑一个接一个排好。


from moviepy.editor import concatenate_videoclips

# 合并剪辑到一个视频中
final_clip = concatenate_videoclips([clip1, clip2, clip3])

# 保存合并后的视频
final_clip.write_videofile("final_video.mp4")

现在咱们有了一个新视频项目,它是你最佳瞬间的合集。或者是一些随机片段,如果你忘了顺序。

合并剪辑时添加音频

合并视频剪辑时,你也可以加入音轨。比如,如果有一个音乐文件或其他音频片段,你可以将其覆盖到合并后的视频上。

带音频的剪辑合并


from moviepy.editor import AudioFileClip

# 创建音频剪辑
audio_clip = AudioFileClip("background_music.mp3")

# 将音频剪辑添加到合并视频中
final_clip_with_audio = final_clip.set_audio(audio_clip)
final_clip_with_audio.write_videofile("combined_with_audio.mp4")

这里:

  • AudioFileClip("background_music.mp3") 从音乐文件创建一个音频剪辑。
  • set_audio(audio_clip) 将音轨添加到合并的视频 final_clip

3. 剪辑间的过渡效果

在 MoviePy 中,可以通过 CompositeVideoClip 类以及各种效果创建剪辑间的过渡。核心想法是用特效(比如透明度变化或者移动)将一个剪辑叠加到另一个剪辑上。过渡效果通常包括调节透明度或者移动帧,让一个剪辑平滑地过渡到另一个剪辑。

渐隐过渡

渐隐 是最流行的过渡效果之一,第一段剪辑逐渐消失,第二段剪辑慢慢出现在屏幕上。这个效果可以用 crossfadein()crossfadeout() 实现。

两段剪辑间的渐隐过渡


from moviepy.editor import VideoFileClip, concatenate_videoclips

# 加载两个视频剪辑
clip1 = VideoFileClip("clip1.mp4").subclip(0, 5)  # 第一个5秒的视频
clip2 = VideoFileClip("clip2.mp4").subclip(0, 5)  # 第二个5秒的视频

# 设置渐隐效果
clip1 = clip1.crossfadeout(1)  # clip1 渐隐一秒
clip2 = clip2.crossfadein(1)   # clip2 渐现一秒

# 合并剪辑并加入过渡
final_clip = concatenate_videoclips([clip1, clip2], method="compose")
final_clip.write_videofile("fade_transition.mp4")

在这个例子中:

  • crossfadeout(1) 让第一个剪辑在1秒内逐渐透明。
  • crossfadein(1) 让第二个剪辑在1秒内逐渐清晰。
  • concatenate_videoclips([clip1, clip2], method="compose") 将两个剪辑通过渐隐过渡合并。

转黑过渡

转黑(或者“淡入黑”)是指第一个剪辑淡出到黑屏,然后下一个剪辑从黑屏中显现。这种过渡效果让一段场景结束而下一段开始。


from moviepy.editor import VideoFileClip, concatenate_videoclips

# 加载两个剪辑
clip1 = VideoFileClip("clip1.mp4").subclip(0, 5)
clip2 = VideoFileClip("clip2.mp4").subclip(0, 5)

# 设置转黑效果
clip1 = clip1.fadeout(1)  # clip1 淡出到黑
clip2 = clip2.fadein(1)   # clip2 从黑中显现

# 合并剪辑并加入转黑效果
final_clip = concatenate_videoclips([clip1, clip2], method="compose")
final_clip.write_videofile("fade_to_black_transition.mp4")

这里:

  • fadeout(1) 让剪辑在1秒内渐隐到黑屏。
  • fadein(1) 让下一剪辑在1秒内从黑屏渐现。

现在你的视频不仅仅是一些片段的合集,而是一部带有平滑过渡的真正力作。咱们给视频加了进出效果,让它看起来更流畅。

4. 实践应用

掌握了这些技巧后,你会发现它们非常实用。无论你是做编程教程、新库宣传片,还是为自己的猫进军 IT 的第一步做 montaje(是的,这也可能发生!),学会分割和合并视频是成为视频剪辑和自动化大师的入门技能。

常见错误

操作视频分割和合并时,一定要小心时间戳。我们都看过那些视频被突然打断的糟糕场面(还有那些无聊的会议幻灯片又重复播放)。确保时间戳设置正确,没有任何错误。MoviePy 有时候可能会因为格式错误或空剪辑而报错,所以在运行前多检查一下代码。

希望现在你不仅掌握了这些知识,还对面前无限的可能性感到兴奋。让我们一起用 Python 和 MoviePy 探索视频剪辑和创意的世界吧!

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION