赞
踩
目录
安装:pip install moviepy
中文官网:moviepy-cn 文档
'''
moviepy.editor模块类
'''
1、视频加载:调用`VideoFileClip(文件名)`即可将视频加载进来,可以支持不同格式的视频文件。VideoFileClip类的构造函数参数如下:
2、视频输出:write_videofile或to_videofile方法用于视频输出,可以将处理之后的视频写入本地。
- from moviepy.editor import VideoFileClip
- clip = VideoFileClip('./21.mp4')
- clip.write_gif('21.gif')
- # clip.write_gif('21.gif', fps=1) # fps设置每秒的帧数,这将直接影响gif文件的大小(帧数越小,文件越小),不设置的时候,默认取视频的原帧数
gif缩放:视频分辨率往往比较高,直接转化为Gif,比较大,不利于网络传播,所以可以使用resize,来进行缩放
- clip = (VideoFileClip("21.mp4").subclip(1, 3).resize(0.5)) # 宽度和高度乘以0.1
- clip.write_gif("Video.gif")
用 subclip 这个方法就可以实现视频的截取,添加参数传入起始时间和结束时间即可截取视频中的指定部分。subclip(t_start,t_end) 方法中的时间参数:
- clip = VideoFileClip(video_path)
- video_clip = clip.subclip(5, -2) # 表示从5s开始到结束前2s截止之前的视频
- video_clip.to_videofile('demo_video001.mp4')
- video = VideoFileClip(video_path)
- video = video.volumex(0.5) # 调整音量,变为原来的0.5
- video_file.write_videofile('volumex_video.mp4')
- video_file = VideoFileClip('demo_video.mp4')
- video_file = video_file.without_audio()
- video_file.write_videofile('out_audio.mp4')
- video1, video2 = VideoFileClip('demo_video.mp4'), VideoFileClip('21.mp4')
- audio1 = video1.audio # 提取第一个视频的音频部分(可截取部分音频,使用subclip()先将读取的视频文件截取后再操作即可)
- # audio1.write_audiofile('audio.mp3') # 可以保存提取的音频为MP3格式文件
- video3 = video2.set_audio(audio1) # 将提取的视频1的音频合成到2视频中
- video3.write_videofile('demo001.mp4')
- video = VideoFileClip('demo_video.mp4')
- print(video.size) # 获取分辨率大小
- print(video.w, video.h) # 获取宽高
- print(video.fps) # 获取帧数
- print(video.duration) # 获取视频时长
-
- # 使用OS模块获取大小
- import os
- # 方法1:
- video_size = os.stat('demo_video.mp4').st_size
- print(video_size, video_size / 1024 / 1000) # 经测试除以1024**2与原来的大小相差大,除以(1024*1000)的结果和实际大小基本一致
- # 方法2:
- size = os.path.getsize('demo_video.mp4')
- print(size)
案例:获取视频时长
- import cv2
- import time
- from moviepy.editor import VideoFileClip
-
-
- def video_duration_1(filename):
- start = time.time()
- clip = VideoFileClip(filename)
- end = time.time()
- spend = end - start
- print("获取视频时长方法1耗时:", spend)
- return float(clip.duration)
-
-
- def video_duration_2(filename):
- start = time.time()
- cap = cv2.VideoCapture(filename)
- if cap.isOpened():
- rate = cap.get(5)
- frame_num = cap.get(7)
- # print(rate, frame_num)
- duration = frame_num / rate
- end = time.time()
- spend = end - start
- print("获取视频时长方法2耗时:", spend)
- return duration
- return -1
-
-
- if __name__ == '__main__':
- file = "demo_video.mp4"
-
- video_time_1 = video_duration_1(file)
- print(video_time_1)
-
- print("*" * 100)
-
- video_time_2 = video_duration_2(file)
- print(video_time_2)
speedx()方法设置要加速到的倍数
- video = VideoFileClip('demo_video.mp4')
- video_speed = video.speedx(2) # 设置两倍速度播放
- video_speed.write_videofile('speed2.mp4')
t默认为0,保存0秒时的一帧,t标识保存某时间的那一帧,时间单位为秒
- video = VideoFileClip('demo_video.mp4')
- video.save_frame('frame.jpg', t=3)
多视频按顺序前后拼接
多个clip进行拼接,并不需要这些clip之间有相同的尺寸、时长等,仅仅是将它们按照顺序拼接起来
'''
from moviepy import editor
videos = ["1.mp4", "2.mp4", "3.flv", "4.mp4", "5.flv"]
clips = []
for video in videos:
clips.append(editor.VideoFileClip(video))
editor.concatenate_videoclips(clips).write_videofile("xxx.mp4")
'''
- from moviepy.editor import VideoFileClip, concatenate_videoclips
-
- video1, video2 = VideoFileClip('demo_video.mp4').subclip(0, 2), VideoFileClip('demo_video.mp4').subclip(-6,-2)
- video_con = concatenate_videoclips([video1, video2]) # 可以指定一个transition参数(也是一个VideoFileClip对象),作为衔接之间的过渡
- video_con.write_videofile('splicing_video.mp4')
多视频显示在同一个屏幕
- from moviepy.editor import VideoFileClip, vfx
- from moviepy import editor
-
- video = VideoFileClip('demo_video.mp4').margin(10) # margin设置外边距
- video1, video2 = video.fx(vfx.mirror_x), video.fx(vfx.mirror_y) # x轴镜像;y轴镜像
- video3 = video.resize(.5) # 等比缩放
-
- # 列表里面有两个列表,所以会将屏幕上下等分
- # 上半部分显示 video1, video2
- # 下半部分显示video3, video
- video_clip = editor.clips_array([[video1, video2], [video3, video]])
- video_clip.to_videofile('joint_video.mp4')
- from moviepy.editor import VideoFileClip, AudioFileClip
-
- video = VideoFileClip('demo_video.mp4')
- audio = AudioFileClip('红尘.mp3')
- video = video.set_audio(audio) # 給視頻文件設置新的音頻
- video.audio.to_audiofile('old_audio.mp3') # 保存在視頻中提取的音頻
- video.write_videofile('change_audio.mp4')
- from moviepy.editor import AudioFileClip, concatenate_audioclips
-
- audio1, audiio2 = AudioFileClip('红尘.mp3'), AudioFileClip('听见凉山.mp3')
- join_audio = concatenate_audioclips([audio1, audiio2])
- join_audio.to_audiofile('new_audio.mp3')
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。