最近遇到一个需求是需要将视频生成gif,这个看上去不是很难,所以有了以下的解决办法
首先想到的当然是自己写一个,用了两套代码:
- from moviepy.editor import *
-
- # 读取视频文件
- video_clip = VideoFileClip("280361337.mp4")
-
- # 将视频转为gif格式
- gif_clip = video_clip.to_gif("output.gif")
-
- # 关闭视频文件
- video_clip.close()
运行这个的话可能会遇到的问题就是没有moviepy这个module,pip install一下就可以了,但是安装完之后会报错提示有些依赖包没有,只需要按提示逐个安装就行了。
但是上述的代码不能够控制帧率和大小,于是又完善了一下。
- import imageio
- from PIL import Image
-
- def convert_video_to_gif(input_path, output_path, fps=10, scale=0.5):
- # 读取视频文件
- video = imageio.get_reader(input_path)
-
- # 获取视频的帧率、宽度和高度
- fps_video = video.get_meta_data()['fps']
- width, height = video.get_meta_data()['source_size']
-
- # 设置输出的帧率和尺寸
- output_fps = min(fps, fps_video)
- output_width = int(scale * width)
- output_height = int(scale * height)
-
- # 创建一个Image对象列表,用于保存每一帧的图像
- frames = []
- for frame in video:
- # 调整帧的尺寸
- frame_img = Image.fromarray(frame).resize((output_width, output_height), Image.ANTIALIAS)
- frames.append(frame_img)
-
- # 保存为gif动图
- frames[0].save(output_path, format='GIF', append_images=frames[1:], save_all=True, duration=1000/output_fps, loop=0, optimize=True)
-
- # 关闭视频文件
- video.close()
-
- # 调用函数进行视频转换为gif
- convert_video_to_gif("studio_video_1698138576505.mp4", "output4.gif", fps=20, scale=1)
这样一来就能比较控制帧率和大小了,但相比来说只压缩了一半,还是有点大,也正因为这个原因,没有办法在这里展示效果,简单来说,效果还是可以的,只是太大了超过了5M,所以不能上传。
像这种都有现成的工具,比如本次推荐的这个就是,效果挺好的,
压缩比大概为1/5
可以自己指定宽度
也可以进行压缩,只是这个过程有点曼,能再压缩1/2,效果几乎无变化
还支持其他的功能
如何将视频转换成gif?当我们看到视频中精彩片段,我们想着如何将视频转换成gif就好了。当我们看到其他小伙伴那些精彩绝伦的gif图的时候,我们想着这些是如何实现的呢?今天小编就来解密这些让人拍案叫绝的gif图是如何来的。将视频转换成GIF动图的技术主要是通过对视频进行帧截取和编码处理实现的。具体来说,该技术会将视频逐帧解析成一系列图像,并按照一定的时间间隔将这些图像序列编码压缩成一个GIF动图文件,从而实现视频向GIF格式的转换。
要将视频转换成GIF,您可以使用各种工具和软件,包括在线工具、桌面应用程序等。让我们一起将视频转换成GIF,这样可以让您享受到更高效、更流畅、更有趣的动画体验。很多小伙伴似乎并不知道怎么转换,下面就让我来分享几个视频转gif的方法,供大家学习和参考。