【问题标题】:100% of gif does not convert to mp4 with moviepy100% 的 gif 不能使用 moviepy 转换为 mp4
【发布时间】:2018-11-03 19:07:33
【问题描述】:

当我执行以下代码时:

import requests
import moviepy.editor as mp

url = "https://i.imgur.com/VaTidQA.gif"
with open('temp.gif', 'wb') as f:
    f.write(requests.get(url).content)
clip = mp.VideoFileClip("temp.gif")
print(clip.duration)
clip.write_videofile("temp.mp4")

我遇到 mp4 文件丢失帧的问题。 mp4 将始终从头开始,但似乎会在某些时候任意中断。

这是一个例子:

GIF:https://i.imgur.com/VaTidQA.gif

MP4:https://giphy.com/gifs/pesky-wabbit-5UqQOjkYLuWrvHzvsA

gif 确实是完整下载的。

经过测试,我发现如果我把最后一行改成:

clip.set_duration(clip.duration + X).write_videofile("temp.mp4")

那么它确实会扩展 MP4 并减少剪裁,但这需要是一个可变脚本,因为它将用于很多很多 gif。几乎可以肯定的是,moviepy 从 gif 中获取了错误的持续时间。关于如何解决这个问题的任何建议?

更新:我确定 moviepy 从 gif 获取不正确的持续时间。当该持续时间传递给write_videofile() 调用时,它只写入较短的间隔。我正在研究它如何确定 gif 持续时间。

【问题讨论】:

    标签: python ffmpeg moviepy


    【解决方案1】:

    我将 .gif 转换为

    os.system('echo "y"| ffmpeg -i temp.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" temp.mp4')

    然后使用

    将持续时间剪辑到最长 15 秒
           if (dur > 15):
                print("changing duration")
                clip.set_duration(15).write_videofile("buffertemp.mp4")
                clip = mp.VideoFileClip("buffertemp.mp4")
                clip.write_videofile("temp.mp4")
    

    【讨论】:

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