你喜欢看电影吗?🍿不知道你有没有想过,如果能够自己编辑视频就好了!🤩
没错,现在有了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")
网友评论