【发布时间】:2017-12-29 06:23:42
【问题描述】:
我正在编写一个函数来加速/减速给定的 GIF(或 .gifv)文件,并将生成的动画保存为 .mp4 文件。
我正在使用 python imageio 包(及其 ffmpeg 插件)来执行此操作 - 从 gif 下载原始二进制数据,将每一帧写入 mp4,并将 mp4 的 fps 设置为任意值。
我的代码是 -
def changespeed(vid, mult):
vid = vid.replace('.gifv', '.gif')
data = urllib2.urlopen(vid).read()
reader = imageio.get_reader(data, 'gif')
dur = (float(reader.get_meta_data()['duration']))
oldfps = 1000.0 / (10 if dur == 0 else dur)
writer = imageio.get_writer('output.mp4', fps=(oldfps*mult), quality=8.0)
for frame in reader:
writer.append_data(frame)
writer.close()
问题是,有时输出颜色会严重损坏,而且似乎没有任何可预测性。某些 gif 会发生这种情况,而其他 gif 不会发生这种情况。我已经尝试在writer 中设置一个高质量的参数,但这并没有帮助。
这是一个有问题的 GIF 示例 -
输入:https://i.imgur.com/xFezNYK.gif
输出:https://giant.gfycat.com/MelodicShimmeringBarb.mp4
我可以在 output.mp4 本地看到这个问题,所以问题不在于上传到 Gfycat。
我能做些什么来避免这种行为吗?谢谢。
【问题讨论】:
-
如果直接运行ffmpeg,结果一样吗?
-
@Mulvya 直接运行ffmpeg,输出没问题。 (尝试设置输出的 fps 没有效果,但颜色问题消失了)。顺便说一句,输出视频无法在 WMP 中播放,但在 Chrome 中播放。
标签: python ffmpeg python-imageio