【问题标题】:Imageio python converts GIF to MP4 incorrectlyImageio python错误地将GIF转换为MP4
【发布时间】: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


【解决方案1】:

更新 - 想通了。颜色本身没有损坏 - 黑色部分实际上是透明部分,意在用前一帧的数据替换。

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

【讨论】:

    猜你喜欢
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2014-12-01
    • 2022-11-02
    • 2015-02-08
    • 2021-10-20
    • 2016-09-30
    相关资源
    最近更新 更多