知乎专栏 |
import os import moviepy.video.io.ImageSequenceClip def merge_image_to_video_moviepy(folder_name): fps = 25 image_files = [] for f1 in os.listdir(folder_name): filename = os.path.join(folder_name, f1) for index in range(fps): image_files.append(filename) clip1 = moviepy.video.io.ImageSequenceClip.ImageSequenceClip(image_files, fps=fps) clip1.write_videofile("output.mp4", fps=fps) return clip1 if __name__ == '__main__': # 图片文件尺寸必须一致 folder_name = r"test/images" clip1 = merge_image_to_video_moviepy(folder_name)
from moviepy.editor import * image = ImageClip("image.png") image = image.set_duration(5) image = image.set_position(('center', 'top')) # image = image.resize(height=200) image.write_videofile("movie.mp4",fps=30)
resized = resize(coverImageClip, 1.2).set_duration(3) clip = crop(resized, x_center=-480, y_center=-320, width=960, height=640)
audioFileClip1 = AudioFileClip("1.mp3") audioFileClip2 = AudioFileClip("2.mp3") audioFileClip3 = AudioFileClip("2.mp3") clips = [audioFileClip1,audioFileClip2,audioFileClip3] concat = concatenate_audioclips(clips) concat.write_audiofile("netkiller.mp3")
#coding=utf-8 import moviepy.editor as mov video = mov.VideoFileClip('test.mp4') audio = video.audio audio.write_audiofile('test.wav')
neo@MacBook-Pro-Neo ~/workspace/python/video % python3 audio.py MoviePy - Writing audio in test.wav MoviePy - Done. neo@MacBook-Pro-Neo ~/workspace/python/video % ls *.wav test.wav
clip1 = VideoFileClip("test1.mp4") clip2 = VideoFileClip("test2.mp4") clip3 = VideoFileClip("test3.mp4") video = CompositeVideoClip([clip1,clip2,clip3],size=(1920, 1080)) video.write_videofile("video.mp4")
from moviepy.editor import VideoFileClip, concatenate_videoclips # 重新设置视频大小 clip1 = VideoFileClip("chip1.mp4").resize((1920, 1080)) # 剪切指定时间片段(单位秒) clip2 = VideoFileClip("chip2.mp4").subclip(50,60) # 剪切持续时间(单位秒) clip3 = VideoFileClip("chip3.mp4").set_duration(5) # 按顺序拼接视频 final_clip = concatenate_videoclips([clip1,clip2,clip3]) final_clip.write_videofile("video.mp4")
from moviepy.editor import * video_path = 'my_video.avi' #视频地址 audio_path = 'my_audio.mp3' #提取音频保存位置 video = VideoFileClip(video_path) video.audio.write_audiofile(audio_path)
old_video = '有声音.avi' new_video = '无声音.avi' video = VideoFileClip(old_video) video = video.without_audio() #删除声音,返回新的视频对象,原有对象不更改 video.write_videofile(new_video)
old_video = '无声音.avi' audio = 'audio.mp3' new_video = '有声音.avi' video = VideoFileClip(video_path) audio_clip = AudioFileClip(audio) video = video.set_audio(audio_clip) video.write_videofile(new_video)
from moviepy.video.io.VideoFileClip import VideoFileClip from moviepy.video.fx import fadein, fadeout from moviepy.video.tools import subtitles # 加载视频剪辑 clip = VideoFileClip("input.mp4") # 添加淡入和淡出效果 clip = fadein.fadein(clip, 2) # 从开始处淡入2秒 clip = fadeout.fadeout(clip, 2) # 从结束处淡出2秒 # 添加字幕 subtitles_txt = [ ("Hello, World!", 1), # 在1秒时显示 "Hello, World!" ("Welcome to MoviePy", 3), # 在3秒时显示 "Welcome to MoviePy" ] clip = subtitles.subtitles(clip, subtitles_txt) # 保存视频 clip.write_videofile("output.mp4")
brew install ImageMagick
查看可用字体
from moviepy.editor import TextClip print ( TextClip.list("font") )
运行结果
neo@MacBook-Pro-Neo ~/workspace/python/video % /usr/bin/python3 /Users/neo/workspace/python/video/font.py ['AvantGarde-Book', 'AvantGarde-BookOblique', 'AvantGarde-Demi', 'AvantGarde-DemiOblique', 'Bookman-Demi', 'Bookman-DemiItalic', 'Bookman-Light', 'Bookman-LightItalic', 'Courier', 'Courier-Bold', 'Courier-BoldOblique', 'Courier-Oblique', 'fixed', 'Helvetica', 'Helvetica-Bold', 'Helvetica-BoldOblique', 'Helvetica-Narrow', 'Helvetica-Narrow-Bold', 'Helvetica-Narrow-BoldOblique', 'Helvetica-Narrow-Oblique', 'Helvetica-Oblique', 'NewCenturySchlbk-Bold', 'NewCenturySchlbk-BoldItalic', 'NewCenturySchlbk-Italic', 'NewCenturySchlbk-Roman', 'Palatino-Bold', 'Palatino-BoldItalic', 'Palatino-Italic', 'Palatino-Roman', 'Symbol', 'Times-Bold', 'Times-BoldItalic', 'Times-Italic', 'Times-Roman']
指定字体路径
from moviepy.editor import TextClip font_path = './font/heimi.ttf' txtClip = TextClip('《Netkiller Python 手札》',color='white', font=font_path,kerning = 5, fontsize=100)
苹果电脑的字体安装在 /System/Library/Fonts/ 目录中。
from moviepy.editor import * video = VideoFileClip("test.mp4").subclip(50,60) # Make the text. Many more options are available. txt_clip = ( TextClip("《Netkiller Python 手札》",font="/System/Library/Fonts/PingFang.ttc", fontsize=70,color='white') .set_position('center') .set_duration(10) ) result = CompositeVideoClip([video, txt_clip]) # Overlay text on video result.write_videofile("test.webm",fps=25) # Many options...
# 保存视频第一帧的画面 clip.save_frame("Screenshot.jpeg") # 保存视频第10秒的画面 clip.save_frame("Screenshot.png", t=10)