Як перетворити анімований gif в mp4 або mv4 в командному рядку?


79

Яку команду я використовував би для перетворення mp4 або mv4 відеофайлу в анімований gif, і навпаки. Тобто перетворіть анімований gif в mp4 або mv4.

Відповіді:


107

Ось що для мене спрацювало:

ffmpeg -i animated.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" video.mp4

movflags - Цей параметр оптимізує структуру файлу MP4, щоб браузер міг завантажити його якнайшвидше.

pix_fmt - MP4 відео зберігає пікселі в різних форматах. Ми включаємо цю опцію, щоб вказати конкретний формат, який має максимальну сумісність у всіх браузерах.

vf - Відео MP4, що використовують H.264, повинні мати розміри, які поділяються на 2. Цей параметр гарантує, що це так.

Джерело: http://rigor.com/blog/2015/12/optimizing-animated-gifs-with-html5-video


4
Дякую, це єдина версія, яка працювала для мене на OSX.
Pykler

1
Це працювало для мене на Ubuntu 16.10 з ffmpeg 3.0.2, де найкраща відповідь не була
кішка

1
Можна також обрізати замість масштабування (замінити scaleна crop), оскільки ви збираєтеся скоротити не більше 1 пікселя. Масштабування може спричинити розмитість
Джеззамон

Це перервало останні кілька секунд для мене. Результат mp4 закінчився рано.
callum

38

У моєму випадку, ffmpegбезпосередньо використовуючи трюк, забезпечив найкращий результат:

$ ffmpeg -f gif -i infile.gif outfile.mp4

2
створив порожнє (зіпсоване) відео на os x
Pykler

2
@Pykler, ймовірно, ви повинні збільшити багатослівність та / або перевірити файл журналу, щоб зрозуміти, що відбувається.
BenC

Мені теж, напевно, "ділиться на 2 виміри" запропоновано у відповіді vico Vault. (що працювало для мене)
lapo

Цей метод спрацював ідеально для мене. (Верхня відповідь призвела до відключення кінця на 3 секунди.) EDIT: о, але це не грає на iOS :(
callum

Веб - сторінки говорить , що ви повинні просто додати -pix_fmt yuv420p
beefeather

2

Ще один спосіб конвертувати анімацію GIF у відео:

ffmpeg -i your_gif.gif -c:v libvpx -crf 12 -b:v 500K output.mp4

-crf значення можуть переходити від 4 до 63. Нижчі значення означають кращу якість. -b: v - максимально дозволений бітрейт. Вища означає кращу якість.


2

Якщо ви хочете зробити результат у "n циклі" , подивіться на це рішення за один кадр

Отже, давайте перетворимо нормальний.gif в loop.mp4

для прикладу фільму на 2 петлі:

ffmpeg -stream_loop 2 -i normal.gif loop.gif -y;ffmpeg -i loop.gif -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" loop.mp4 -y

для прикладу фільму на 5 циклів:

ffmpeg -stream_loop 5 -i normal.gif loop.gif -y;ffmpeg -i loop.gif -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" loop.mp4 -y

БУДУТЬ ЗАЯВЛЕННЯ: є -y [для перезапису]


Якщо ви запустите першу ffmpegкоманду без -y , у вас буде набагато менше шансів випадково перезаписати те, чого ви не хочете. ( Мабуть, також є спосіб передати ffmpegвідео в себе, і зробити це за допомогою однієї трубопровідної команди без проміжного файлу та перезапису.)
FeRD,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.