来源:Python之禅

上次公众号写文章的时候,遇到个问题

公众号插入视频文件太繁琐,一个很小的视频,作为视频传上去平台还要审核,播放的时候也没gif来的直接。

于是想着找个工具将mp4转换成gif。网上搜一下,在线的工具好多,但是各种套路,有些要点广告,有些要先扫二维码。还是国外的网站好,没那么多套路。

我想Python肯定也可以处理这种问题,毕竟万能的Python除了不会生孩子,什么都能做。这样后面我把它做成一个在线工具,方便自己也顺便可以给其他人使用

mp4转gif的原理其实很简单,就是将mp4文件的帧读出来,然后合并成一张gif图。用cv2和PIL这两个库就可以轻松搞定

import globimport cv2
from PIL import Imagedef convert_mp4_to_jpgs(input_file):# 先将mp4文件的所有帧读取出保存为图片video_capture = cv2.VideoCapture(input_file)still_reading, image = video_capture.read()frame_count = 0while still_reading:cv2.imwrite(f"output/frame_{frame_count:03d}.jpg", image)# read next imagestill_reading, image = video_capture.read()frame_count += 1def convert_images_to_gif(output_file):# 读取目录下图片,用Pillow模块的Image和所有图片合并# 成一张gifimages = 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放到短视频平台,说不定就火了。

def convert_gif_to_mp4():import moviepy.editor as mpclip = mp.VideoFileClip("demo.gif")clip.write_videofile("output.mp4")

最后,如果你稍微懂点运营,把它做成工具,挂到网上,又是一个吸粉的神器,岂不美哉。

-------- End --------

用python处理mp4与gif格式互转,简单到爆!相关推荐

  1. python–颜色英文与RGB格式互转

    python–颜色英文与RGB格式互转 使用pip安装webcolors pip install webcolors 1- 导入webcolors import webcolors 2-英文转RGB ...

  2. python实现xmind转excel_用 python 实现 xmind 和 mindjet 格式互转

    一直想找一款跨平台的免费又好用的思维导图软件,可是哪有两全其美的事呢,个人感觉安卓版的 mindjet 相对好用一些,windows 和 linux 版的 xmind 相对好用一些,但是 xmind ...

  3. 用python画四叶草后输入到桌面上的代码-用 python 实现 xmind 和 mindjet 格式互转

    一直想找一款跨平台的免费又好用的思维导图软件,可是哪有两全其美的事呢,个人感觉安卓版的 mindjet 相对好用一些,windows 和 linux 版的 xmind 相对好用一些,但是 xmind ...

  4. 简单到爆——用Python在MP4和GIF间互转,我会了

    写在前面的一些P话: 昨天用公众号写文章的时候,遇到个问题. 我发现公众号插入视频文件太繁琐,一个很小的视频, 作为视频传上去平台还要审核,播放的时候也没gif来的直接. 于是想着找个工具将mp4转换 ...

  5. MP4和AVI格式互转

    MP4转AVI ffmpeg -i a.mp4 b.avi AVI转MP4 ffmpeg -i b.avi a.mp4

  6. python文件.csv和.dta格式互转

    # csv 转 dta dta_path = 'D:\标注\px支撑\脚本分项目\\test\dta\\' csv_path = 'D:\标注\px支撑\脚本分项目\\test\csv\\' for ...

  7. python实现txt文件批量格式互转

    import os import codecs#txt文件所在目录 path = input("Please input the file path:\n")if len(path ...

  8. python yaml dump_使用Python处理yaml格式的数据简单到爆!

    一.思考:question::grey_question: 1.什么是yaml? Python资源共享群:626017123不是标记语言 对用户极其友好 数据序列化标准 跨语言 所有编程语言都支持 跨 ...

  9. python xml字符串和dict字典互转

    python xml字符串和dict字典互转 字典 转 xml def trans_dict_to_xml(data_dict):"""字典转xml:param data ...

  10. Python实现RGB和Lab颜色空间互转

    Python实现RGB和Lab颜色空间互转 https://github.com/rubund/debian-home-assistant/blob/1a3e8f7e4b9ddec60a4380e14 ...

最新文章

  1. 悬浮框_纯HTML实现某宝优惠券、商品列表和活动悬浮等布局(文末有源码)
  2. js中四种创建对象的方式
  3. MyBatis:学习笔记(4)——动态SQL
  4. 《趣题学算法》—第1章1.2节简单的数学计算
  5. Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(
  6. SAP安装前应准备的事项
  7. 5G时代下的移动边缘计算(MEC)探索系列之一
  8. go build报错,提示错误can‘t load package: package xxx is not in GOROOT (D:\Go\Go\src\xxx)
  9. 拖拉机大战更新了,更多新功能
  10. C#调用大华相机SDK获取图片,转换成VisionPro的Icogimage格式
  11. 打印俄文字母表java,俄语字母与英语字母对照表
  12. 这里记录几个国外的网站
  13. CMWAP和CMNET
  14. 你离拍出好的雪景作品,还有多远? @教摄影
  15. Windows常见DOS命令
  16. 千团大战再现社区团购 下一个“拼多多”会在这里诞生吗?
  17. 30岁以后的华丽转身
  18. Android 侧边栏NavigationView与toolbar
  19. 干洗店收银系统应具备的功能
  20. 期货开户不同的资金可以做哪些品种

热门文章

  1. 编程实践精华总结集锦系列1: SpringBoot/Maven/IDEA/Java/Kotlin/Redis等等
  2. S3C2440 GPIO控制器
  3. 激活码方式注册的实现原理述
  4. 商业智能和分析软件市场现状及发展趋势分析-
  5. 中睿天下入选《2022年中国网络安全市场全景图》
  6. 禁用计算机中的u盘功能,电脑设置禁用U盘的四大方法 怎么让电脑无法使用U盘...
  7. 一场对爱情的反思《少有人走的路:心智成熟的旅程》
  8. 读书 | 少有人走的路心智成熟的旅程读后感
  9. 空气质量指数范围对应的类型有哪些?
  10. java为什么打不开jar文件_win7系统双击打不开jar文件的解决方法