如何在 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,但是:

  1. 它导致视频全黑。

  2. 即使是全黑视频,写入视频文件的时间也比没有过渡的视频长 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