影片截图、图片转影片
这篇文章会介绍使用 Python 的 moviepy 第三方函数库,将影片进行单张图片的截图 ( 截取某个影格储存为图片 ),以及将单张图片或 gif 动画图片转换成影片。
快速导览:
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
安装 moviepy
输入下列指令安装 moviepy,根据个人环境使用 pip 或 pip3。
!pip install moviepy
由于影片转档会使用 ffmpeg,因此也要安装 ffmpeg ( 影片存档常见错误“TypeError: must be real number, not NoneType”往往都是 ffmpeg 没有安装导致 ),根据个人环境使用 pip 或 pip3,Anaconda Jupyter 可以使用 conda install。
!pip install ffmpeg
影片截图
加载 moviepy 读取影片后,使用 save_frame 方法,就能将指定时间的影格,储存为图片 ( 支援 jpg、png ),下方的程序码执行后,会截取 20 秒、20.1 秒和 20.2 秒三张图片。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from moviepy.editor import *
video = VideoFileClip("oxxostudio.mp4")
frame = video.save_frame("frame1.jpg", t = 22)
frame = video.save_frame("frame2.jpg", t = 22.1)
frame = video.save_frame("frame3.jpg", t = 22.2)
print('ok')
单张图片转影片
使用 ImageClip 方法搭配 set_duration,可以读取单张图片,并将其转换成指定秒数的影片,需要注意的是,因为单张图片没有 fps ( 一秒几格 ),所以输出时要额外设定 fps。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from moviepy.editor import *
img_clip = ImageClip("oxxostudio.jpg", transparent=True).set_duration(2)
img_clip.write_videofile("output.mp4",fps=30, temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
print('ok')
如果在转换图片时,额外设定 set_start 起始时间以及 crossfadein 淡入时间,搭配 CompositeVideoClip 混合影片,就能套用“淡入淡出”的效果,组合多张静态图片。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from moviepy.editor import *
img1 = ImageClip("oxxo1.jpg", transparent=True).set_duration(3)
img2 = ImageClip("oxxo2.jpg", transparent=True).set_duration(4).set_start(2).crossfadein(1)
img3 = ImageClip("oxxo3.jpg", transparent=True).set_duration(3).set_start(5).crossfadein(1)
output = CompositeVideoClip([img1,img2,img3])
output.write_videofile("output.mp4",fps=30, temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
print('ok')
组合的原理如下图所示,img1 有三秒,img2 四秒,img3 三秒,总长度八秒。
gif 图片转影片
使用读取影片的 VideoFileClip 方法打开 gif 动画,再使用 write_videofile 方法,就能将 gif 动画图档转换成影片。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from moviepy.editor import *
video = VideoFileClip("oxxostudio.gif")
video.write_videofile("output.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
print('ok')
微信扫码关注
抖音扫码关注