【玩废了】用Python在MP4和GIF间互转,简单到爆_mp4转gif转换 代码

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Python学习交流Q群:906715085####
def convert\_mp4\_to\_jpgs(input_file):
    # 先将mp4文件的所有帧读取出保存为图片
    video_capture = cv2.VideoCapture(input_file)
    still_reading, image = video_capture.read()
    frame_count = 0
    while still_reading:
        cv2.imwrite(f"output/frame\_{frame\_count:03d}.jpg", image)
        # read next image
        still_reading, image = video_capture.read()
        frame_count += 1

在这里插入图片描述

def convert\_images\_to\_gif(output_file):
    # 读取目录下图片,用Pillow模块的Image和所有图片合并
    # 成一张gif
    images = glob.glob(f"output/\*.jpg")
    images.sort()
    frames = [Image.open(image) for image in images]
    frame_one = frames[0]
    frame_one.save(output_file, format="GIF", append_images=frames[1:],
                   save_all=True, duration=40, loop=0)

def convert\_mp4\_to\_gif(input_file, output_file):
    convert_mp4_to_jpgs(input_file)
    convert_images_to_gif(output_file)

if __name__ == "\_\_main\_\_":
    convert_mp4_to_gif("demo.mp4", "output.gif")

执行完成后,发现gif文件大小暴增

在这里插入图片描述

可以尝试通过减少帧的数量来优化gif的大小,比如这个视频一共有60帧,我们只取30帧,大小就会减半

frame_one.save(output_file, format="GIF", append_images=[f for i, f in enumerate(frames[1:]) if i % 2 == 0],
                   save_all=True, duration=40, loop=0)

实现逻辑是用enumerate函数过滤取偶数张图片来合成,最小大小从3.9M压缩到2M。

写完这个代码后,发现还有另一个牛逼的库moviepy,2行代码就可以搞定

def mp4\_to\_gif2():
    clip = VideoFileClip("demo.mp4")
    clip.write_gif("output2.gif")

moviepy把实现细节已经封装非常简约了,然后提供了一大堆参数可以让开发者自行配置。但使用moviepy转的文件有9M,我相信可以用参

数来优化调整。

在这里插入图片描述

你不得不承认Python生态就是库多,各种各样的轮子都有,没有做不到的,只有你找不到的。

当然,你也可以将gif转回成MP4格式,比如你看到一些搞笑的gif将它转换成mp4放到短视频平台,说不定就火了。

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值