把 vedio 比如.mp4 格式的短视频转换为 gif 图 有啥方便的办法么。。查了个 Python 的库 moviepy, but 有个问题需要 fix 才能使用

2017-02-23 15:32:03 +08:00
 linzhi
4500 次点击
所在节点    Python
23 条回复
liujun3712
2017-02-23 15:48:40 +08:00
你这个 vedio 我看了半天
timwei
2017-02-23 15:52:09 +08:00
我 research 下;再 answer 你的 question 。
justou
2017-02-23 15:53:47 +08:00
moviepy 用的 ffmpeg, imagemagick 为底层, 可以直接在 py 中调用它们的命令行.
moviepy 有啥问题捏?
kera0a
2017-02-23 16:16:32 +08:00
我调研一番后, 是直接 python 调 ffmpeg 命令行~
linzhi
2017-02-23 16:22:17 +08:00
@liujun3712 sorry 写错了。。。
linzhi
2017-02-23 16:22:47 +08:00
justou
2017-02-23 16:38:07 +08:00
把 write_gif 的 program 参数改成'ffmpeg'或者'ImageMagick'试试, 默认的的 imageio 不好用, 兼容性似乎也有问题. 不过要另外去下 ffmpeg 或者 imagemagick 安装
ys0290
2017-02-23 16:52:55 +08:00
ps
linzhi
2017-02-23 16:56:08 +08:00
@justou 恩 感谢 program 使用 ffmpeg 可以正常
justou
2017-02-23 17:29:15 +08:00
我这儿试了下, 两个都可以用. 转化成 gif imagemagick 要比 ffmpeg 好很多, ffmpeg 的输出有时很诡异, 画面会花, 使用 imagemagick 的时候要把参数 opt 设置为 optimizeplus 或 OptimizeTransparency, 不然 py 可能卡死. 虽然生成的图会大点, 但是效果很好. 想要精确控制的话还是直接调用相应命令行, 传一摞参数进去, moviepy 只提供了简单功能.
exoticknight
2017-02-23 18:02:08 +08:00
直接用 ffmpeg ?根据我的经验,凡是视频的东西找它就对了……
likuku
2017-02-23 18:28:19 +08:00
刚刚随手测试了下, ffmpeg 先视频转 dpx 序列帧,再从序列帧转成 gif ,这样 OK 的。

69M h264 1080p 30fps 视频,转 dpx 序列帧 6.6GB ,转 480p 10fps gif , 88M

ffmpeg -i IMG_.MOV dpx/t_%06d.dpx
ffmpeg -y -i dpx/t_%06d.dpx -vf scale=-1:480 -r 10 t.gif

Orz
likuku
2017-02-23 18:33:12 +08:00
ffmpeg 直接视频转 480p 10fps gif , gif 74MB
ffmpeg -i IMG.MOV -vf scale=-1:400 -r 10 t.gif

ffmpeg 直接视频转成 100p 10fps gif , gif 2.1MB
ffmpeg -y -i IMG.MOV -vf scale=-1:100 -r 10 t.gif

$ file t.gif
t.gif: GIF image data, version 89a, 178 x 100

$ du -sh t.gif
2.1M t.gif
myself659410
2017-02-23 19:19:14 +08:00
@likuku ffmpeg 真是音视频处理的瑞士军刀
biubuibiu
2017-02-23 20:55:40 +08:00
imlinhanchao
2017-02-23 22:28:38 +08:00
UPYUN
2017-02-24 11:17:54 +08:00
又拍云可以定制此功能,需要的话可联系 https://www.upyun.com/index.html 客服:)
linzhi
2017-02-24 21:02:19 +08:00
@justou 用 imagemagick 看来要设置参数,直接用的话 会一直卡在 0%。。。
linzhi
2017-02-24 21:04:05 +08:00
@likuku 这个视频转 gif ,一般会选择 10 fps 么,选的过大,造成 gif 太大 无法展示,选择太小又容易失真
likuku
2017-02-24 21:58:32 +08:00
@linzhi 这个得自己测试了,得看画面动态幅度大小吧... 我尝试用 mediainfo 来检查 gif 文件,发现并无 fps 这个属性。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/342635

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX