如何合并视频文件并添加淡入淡出效果

import os
from moviepy.editor import VideoFileClip, concatenate_videoclips


def merge_videos_in_folder(folder_path, output_file, transition_duration=1):
    # 获取文件夹中所有视频文件,并按数字顺序排序
    video_files = sorted(
        [f for f in os.listdir(folder_path) if f.endswith(('.mp4', '.mov', '.avi'))],
        key=lambda x: int(os.path.splitext(x)[0])
    )

    # 检查文件夹是否为空
    if not video_files:
        print("文件夹中没有视频文件。")
        return

    clips = []
    for video_file in video_files:
        video_path = os.path.join(folder_path, video_file)
        video_clip = VideoFileClip(video_path)

        # 添加淡入淡出效果
        video_clip = video_clip.fadein(transition_duration).fadeout(transition_duration)

        # 保留音频
        clips.append(video_clip.set_audio(video_clip.audio))

    # 合并视频
    final_video = concatenate_videoclips(clips, method="compose")

    # 输出合成后的视频
    final_video.write_videofile(output_file, codec="libx264", audio_codec="aac")

    print(f"视频合成完成,输出文件为: {output_file}")


# 示例用法
folder_path = "  # 替换为你的文件夹路径
output_file = "
merge_videos_in_folder(folder_path, output_file)

代码解析

  1. 导入必要的库

    • os 用于处理文件和目录。
    • moviepy.editor 提供视频处理的功能。
  2. 定义函数

    • merge_videos_in_folder(folder_path, output_file, transition_duration=1):这个函数接收视频文件夹路径、输出文件路径和过渡时长作为参数。
  3. 获取视频文件

    • 使用 os.listdir() 获取文件夹中的所有视频文件,并按文件名中的数字进行排序。
  4. 检查文件夹

    • 如果没有找到视频文件,输出提示信息并返回。
  5. 处理每个视频

    • 使用 VideoFileClip 加载每个视频文件,添加淡入淡出效果,并保留音频。
  6. 合并视频

    • 使用 concatenate_videoclips() 合并所有视频片段。
  7. 输出结果

    • 使用 write_videofile() 保存最终合成的视频。

使用示例

在代码的最后,你可以根据自己的需要替换 folder_pathoutput_file 的值,运行代码即可合并指定文件夹中的视频文件,并生成一个新的合成视频。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值