100% 的 GIF 不会转换为带有电影的 mp4



当我执行以下代码时:

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 总是从头开始,但似乎会在某个时候任意切断。

下面是一个示例:

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

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

然后

使用
if (dur > 15):
print("changing duration")
clip.set_duration(15).write_videofile("buffertemp.mp4")
clip = mp.VideoFileClip("buffertemp.mp4")
clip.write_videofile("temp.mp4")

最新更新