如何在 moviepy 中的剪辑之间添加转场?
How to add transitions between clips in moviepy?
我目前的尝试:
这是我当前的代码:
from moviepy.editor import *
clips = [VideoFileClip('a.mp4'), VideoFileClip('b.mp4'), VideoFileClip('c.mp4')]
transitioned_clips = [demo_clip.crossfadein(2) for demo_clip in clips]
for_delivery = concatenate_videoclips(transitioned_clips)
for_delivery.write_videofile(target_path, fps=clip.fps, bitrate='%dK' % (bitrate), threads=50, verbose=False, logger=None, preset='ultrafast')
我也试过使用 CompositeVideoClip
,但是:
它导致视频全黑。
即使是全黑视频,写入视频文件的时间也比没有过渡的视频长 50 倍。
我当前的输出:
我当前的输出是一个包含 3 个视频的视频(这很好),但剪辑之间没有过渡(这不好).
我的目标:
我的目标是在剪辑之间添加 crossfadein
2 秒的过渡,并将剪辑连接成一个视频并输出。
换句话说,我想要它像(从左到右的顺序):
| | + | | + | |
| clip 1 | transition 1 | clip 2 | transition 2 | clip 3 |
| | + | | + | |
有转换吗?任何帮助表示赞赏。
您可以尝试这种手动设置开始时间来处理转换的方法。
padding = 2
video_clips = [VideoFileClip('a.mp4'), VideoFileClip('b.mp4'), VideoFileClip('c.mp4')]
video_fx_list = [video_clips[0]]
idx = video_clips[0].duration - padding
for video in video_clips[1:]:
video_fx_list.append(video.set_start(idx).crossfadein(padding))
idx += video.duration - padding
final_video = CompositeVideoClip(video_fx_list)
final_video.write_videofile(target_path, fps=clip.fps) # add any remaining params
编辑:
这是使用 concatenate
:
的尝试
custom_padding = 2
final_video = concatenate(
[
clip1,
clip2.crossfadein(custom_padding),
clip3.crossfadein(custom_padding)
],
padding=-custom_padding,
method="chain"
)
final_video.write_videofile(target_path, fps=clip.fps) # add any remaining params
我目前的尝试:
这是我当前的代码:
from moviepy.editor import *
clips = [VideoFileClip('a.mp4'), VideoFileClip('b.mp4'), VideoFileClip('c.mp4')]
transitioned_clips = [demo_clip.crossfadein(2) for demo_clip in clips]
for_delivery = concatenate_videoclips(transitioned_clips)
for_delivery.write_videofile(target_path, fps=clip.fps, bitrate='%dK' % (bitrate), threads=50, verbose=False, logger=None, preset='ultrafast')
我也试过使用 CompositeVideoClip
,但是:
它导致视频全黑。
即使是全黑视频,写入视频文件的时间也比没有过渡的视频长 50 倍。
我当前的输出:
我当前的输出是一个包含 3 个视频的视频(这很好),但剪辑之间没有过渡(这不好).
我的目标:
我的目标是在剪辑之间添加 crossfadein
2 秒的过渡,并将剪辑连接成一个视频并输出。
换句话说,我想要它像(从左到右的顺序):
| | + | | + | |
| clip 1 | transition 1 | clip 2 | transition 2 | clip 3 |
| | + | | + | |
有转换吗?任何帮助表示赞赏。
您可以尝试这种手动设置开始时间来处理转换的方法。
padding = 2
video_clips = [VideoFileClip('a.mp4'), VideoFileClip('b.mp4'), VideoFileClip('c.mp4')]
video_fx_list = [video_clips[0]]
idx = video_clips[0].duration - padding
for video in video_clips[1:]:
video_fx_list.append(video.set_start(idx).crossfadein(padding))
idx += video.duration - padding
final_video = CompositeVideoClip(video_fx_list)
final_video.write_videofile(target_path, fps=clip.fps) # add any remaining params
编辑:
这是使用 concatenate
:
custom_padding = 2
final_video = concatenate(
[
clip1,
clip2.crossfadein(custom_padding),
clip3.crossfadein(custom_padding)
],
padding=-custom_padding,
method="chain"
)
final_video.write_videofile(target_path, fps=clip.fps) # add any remaining params