使用moviepy,100%的gif不能转换为mp4

时间:2018-05-24 14:01:12

标签: python ffmpeg moviepy

当我执行以下代码时:

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持续时间。

1 个答案:

答案 0 :(得分:0)

我将.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")