100% gif не конвертируется в mp4 с moviepy - PullRequest
0 голосов
/ 24 мая 2018

, когда я выполняю следующий код:

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 и обрезать меньше, но это должен быть переменный скрипт, так как он будет использоваться для многих, многих картинок.Это почти наверняка связано с тем, что moviepy получает неправильную продолжительность от GIF.Любые предложения о том, как я могу исправить это?

обновление: я определил, что moviepy получает неправильную продолжительность из GIF.когда эта длительность передается на вызов write_videofile(), он записывает только этот более короткий интервал.Я смотрю, как он определяет продолжительность GIF.

1 Ответ

0 голосов
/ 25 мая 2018

Я изменил свое .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")
...