Imageio python错误地将GIF转换为MP4

时间:2017-12-29 06:23:42

标签: python ffmpeg python-imageio

我正在编写一个函数来加速/关闭给定的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会发生这种情况,其他人不会发生这种情况。我尝试在writer中设置高质量参数,但这没有用。

以下是有问题的GIF示例 -

输入:https://i.imgur.com/xFezNYK.gif

输出:https://giant.gfycat.com/MelodicShimmeringBarb.mp4

我可以在output.mp4本地查看此问题,因此问题不在于上传到Gfycat。

我能做些什么来避免这种行为吗?感谢。

1 个答案:

答案 0 :(得分:0)

更新 - 想出来了。颜色本身没有被破坏 - 黑色部分实际上是透明部分,意味着被前一帧中的数据替换。

使用此代码确保透明部分保持透明(以后可以与PIL进行alpha合成)而不是黑色: https://gist.github.com/BigglesZX/4016539