美文网首页@IT·互联网短故事技术研发汇集
【Python】轻松剪辑、合并和添加特效,快速完成视频处理——掌

【Python】轻松剪辑、合并和添加特效,快速完成视频处理——掌

作者: 知信学源 | 来源:发表于2024-02-04 09:16 被阅读0次

你喜欢看电影吗?🍿不知道你有没有想过,如果能够自己编辑视频就好了!🤩

没错,现在有了MoviePy,Python视频编辑库,让你可以在Python中轻松实现各种视频处理操作,包括剪辑、合并、滤镜等多种功能。💻

🎉 剪辑视频

你有没有想过,想要裁剪一个视频,把其中某一部分提取出来呢?🤔

使用MoviePy,你只需要使用subclip函数选择需要剪辑的视频段,然后使用write_videofile函数输出新的视频文件就可以啦!👍

from moviepy.video.io.VideoFileClip import VideoFileClip

# 载入视频文件 📁

clip = VideoFileClip("video.mp4")

# 从第5秒开始,截取3秒钟的视频 ⏱

clip = clip.subclip(5, 8)

# 输出为新的视频文件 🎞

clip.write_videofile("new_video.mp4")

🎵 添加音频

如果你想给视频添加音乐,那么MoviePy同样能够帮到你。🎶

使用AudioFileClip函数载入音频文件,然后使用set_audio函数将音频添加到视频中,最后使用write_videofile函数输出新的视频文件就可以了!👏

from moviepy.audio.io.AudioFileClip import AudioFileClip

# 载入音频文件 🎵

audio = AudioFileClip("audio.mp3")

# 将音频添加到视频中 🎧

clip = clip.set_audio(audio)

# 输出为新的视频文件 🎥

clip.write_videofile("new_video.mp4")

🎨 添加文本和特效

如果你想给视频添加一些特效和文本,那么MoviePy也能够帮到你。🎉

使用TextClip函数添加文本,然后使用CompositeVideoClip函数合成视频和文本,最后使用fx函数添加特效。🤗

from moviepy.video.VideoClip import TextClip

from moviepy.video.compositing.CompositeVideoClip import CompositeVideoClip

from moviepy.video.fx.all import *

# 添加文本 📝

text = TextClip("Hello, World!", fontsize=70, color='white').set_position('center')

# 合成视频和文本 🎬

clip = CompositeVideoClip([clip, text])

# 添加特效 🌈

clip = clip.fx(vfx.colorx, 0.5)

# 输出为新的视频文件 🎥

clip.write_videofile("new_video.mp4")

🤩 结论

使用MoviePy,你可以在Python中轻松实现各种视频处理操作,包括剪辑、合并、添加音频、文本、特效等多种功能。同时,MoviePy库具有易于使用、灵活性高的特点,即使是初学者也能够很容易地上手。

相关实现的代码:

先安装moviepy模块

pip install moviepy

from moviepy.editor import VideoFileClip, concatenate_videoclips

import os

# 首先使用 os.path.getsize() 函数获取视频文件的大小(以字节为单位)

# 然后使用 get_video_duration() 函数获取视频的时长(以秒为单位)

# 最后,我们将文件大小乘以8(将单位从字节转换为比特)除以视频时长,来计算视频的比特率。

def get_video_bitrate(file_path):

    file_size = os.path.getsize(file_path)  # 获取视频文件大小,单位是字节

    video_duration = VideoFileClip(file_path).duration  # 获取视频时长,单位是秒

    video_bitrate = file_size * 8 / video_duration  # 比特率的单位是 bps(比特每秒)

    return video_bitrate

def merge_videos(video_paths, output_path):

    clips = []

    for path in video_paths:

        clip = VideoFileClip(path)

        clips.append(clip)

    final_clip = concatenate_videoclips(clips)

    final_clip.write_videofile(output_path)

# target_bitrate 的合适值取决于你对视频文件的期望和具体情况,以下是一些一般建议:

# 如果你需要上传视频到视频网站,例如 YouTube,建议压缩后的比特率为 4-6 Mbps(即 4-6 兆比特/秒),这样可以保证高质量的视频和较小的文件大小。这也是 YouTube 推荐的比特率范围,超过这个范围,可能会导致视频压缩后的质量变差或者上传速度变慢。

# 如果你的视频需要在移动设备上播放,也需要考虑视频质量和文件大小的权衡。根据设备和网络速度的不同,建议的比特率范围是 1-2 Mbps。

# 如果你的视频是特定用途或适用于特定场景,也可以根据偏好和需求调整比特率,比如 8 Mbps 或者 10 Mbps。

# 需要注意的是,压缩后的比特率越高,视频质量越好,但文件大小也越大。因此,你需要根据实际需求权衡比特率和文件大小,以达到最佳效果。建议在压缩视频时先尝试不同的比特率值,然后根据实际效果选择合适的值。

def compress_video(input_path, output_path, target_bitrate='2M'):

    video = VideoFileClip(input_path)

    # 在进行视频压缩时,你可以选择保留音频或移除音频。如果你打算保留音频,请确保视频文件中包含音频轨道。如果你想删除音频,请使用without_audio()方法。

    if video.audio is not None:

        audio_clip = video.audio

        # 定义分离的音频文件路径为 后缀变成mp3的output_path

        # 这里其实用os模块来定义路径最好

        audio_clip.write_audiofile('.'.join(output_path.split('.')[:-1]) + '.mp3', codec='mp3')

        # 删除音频轨道

        video = video.without_audio()

    # compressed_video = video.resize(width=1280)  # 调整视频分辨率(可选)

    video.write_videofile(output_path, codec='libx264', audio_bitrate=target_bitrate, fps=video.fps, audio_codec='aac')

# 调用示例

video_paths = [r'E:\CameraSave\2023-12-03\0730.mp4', r'E:\CameraSave\2023-12-03\0740.mp4',

              r'E:\CameraSave\2023-12-03\0750.mp4', r'E:\CameraSave\2023-12-03\0800.mp4']

output_path = r'E:\CameraSave\2023-12-03\0730-0800.mp4'

final_path = r'E:\CameraSave\2023-12-03\0730-0800_compress.mp4'

# 合并视频

merge_videos(video_paths, output_path)

# 压缩视频

compress_video(output_path, final_path)

# 查看视频比特率

video_bitrate = get_video_bitrate(output_path)

print(video_bitrate)

video_bitrate = get_video_bitrate(final_path)

print(video_bitrate)

使用movie进行视频剪辑

from moviepy.editor import *

import time

# 需要剪辑视频的起始时间 00:01:20

t_start = (0, 1, 20)

# 需要剪辑视频的结束时间 00:02:20

t_end = (0, 2, 20)

# 进行剪辑

clip = VideoFileClip('../1-1.mp4').subclip(t_start, t_end)

# new_file是剪辑后视频的文件名

new_file = str(int(time.time())) + '_subclip.mp4'

# 导出视频

clip.write_videofile(new_file)

3 使用movie进行视频拼接

from moviepy.editor import VideoFileClip, concatenate_videoclips

# 需要拼接的第一个视频

clip1 = VideoFileClip("./8_1.mp4")

# 需要拼接的第二个视频

clip2 = VideoFileClip("./8_2.mp4")

# 进行视频拼接

final_clip = concatenate_videoclips([clip1,clip2])

# 导出视频

final_clip.write_videofile("8.mp4")

相关文章

网友评论

    本文标题:【Python】轻松剪辑、合并和添加特效,快速完成视频处理——掌

    本文链接:https://www.haomeiwen.com/subject/dgdxadtx.html