Як я можу отримати ffmpeg для перетворення .mov в .gif?


98

Я намагаюся перетворити .mov у .gif, і я не маю успіху.

Ось помилка:

ffmpeg -pix_fmt rgb24 -i yesbuddy.mov output.gif
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
  built on Jun 12 2012 17:47:34 with clang 2.1 (tags/Apple/clang-163.7.1)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/0.11.1 --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-libfreetype --cc=/usr/bin/clang --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libvo-aacenc --disable-ffplay
  libavutil      51. 54.100 / 51. 54.100
  libavcodec     54. 23.100 / 54. 23.100
  libavformat    54.  6.100 / 54.  6.100
  libavdevice    54.  0.100 / 54.  0.100
  libavfilter     2. 77.100 /  2. 77.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Option pixel_format not found.

Якщо я не залишаю частини -pix_fmt rgb24, вона скаржиться. Думки про те, як виправити?


3
FYI, Існує відмінне рішення для перетворення високої якості наданого тут .
ryanjdillon

Відповіді:


161

Порядок аргументів командного рядка має значення. Цей командний рядок повинен працювати, але генерує файл-гігант:

ffmpeg -i yesbuddy.mov -pix_fmt rgb24 output.gif

Зауважте, що ви, мабуть, хочете зменшити частоту кадрів та розмір під час перетворення, а також вказати час початку та тривалість. Напевно, ви не хочете конвертувати весь файл у його початковому дозволі та частоті кадрів.

ffmpeg -ss 00:00:00.000 -i yesbuddy.mov -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif

Розмір файлу все ще буде величезним. Можливо, ви зможете використовувати оптимізатор GIF ImageMagick для зменшення розміру:

convert -layers Optimize output.gif output_optimized.gif

3
Дивовижна відповідь, дякую :) GIF - це божевільний формат ... оригінал .mov був 250k, конвертований .gif з ffmpeg - 8mb, а convert-оптимізована версія - приголомшливі 10k! Вражає!
TooTallNate

19
ffmpeg скаржиться на формат пікселя і переходить з rgb24 на pal8; чи слід оновити команду у відповіді?
користувач1071136

7
Несумісний формат пікселів 'rgb24' для кодека 'gif'
високе обслуговування

1
@Andy автоматично виправлено до rgb8 у моїй версії ffmpeg.
Джеймс Кемпбелл

як робити в Android?
Аджай Шреща

12

Після перетворення:

ffmpeg -i input.mp4 input.gif 

Спробуйте оптимізувати кадри:

convert input.gif -verbose -coalesce -layers OptimizeFrame input_optframe.gif

І використовуйте gifsicleдля остаточної оптимізації:

gifsicle -O2 input_optframe.gif -o optimized.gif

Отримано 6,8 Мб GIF від 12,2 Мб відео майже однакової якості!


3
Розумійте, як ці кроки працюють і що вони роблять?
Raystafarian

10

Я створив інструмент, який поєднує FFmpeg, ImageMagick та giflossy в єдину просту у користуванні програму командного рядка, яку можна встановити в одному рядку: https://github.com/vvo/gifify

Я рекомендую всім, хто бажає перетворити відео => GIF, щоб використовувати його замість того, щоб намагатися витратити багато часу на перегляд 3 веб-сайтів документації, щоб зрозуміти, як змінити розмір GIF або змінити час початку / кінця.


1
А якщо на вашій машині працює Докер, просто зробіть псевдонім так: alias gifify='docker run -it --rm -v $(pwd):/data maxogden/gifify'тоді використовуйте йогоgifify screencast.mkv -o screencast.gif --resize 800:-1
субота

2
ffmpeg -y -i input.mp4 -f image2pipe -vcodec ppm - | convert -delay 2 -loop 0 -layers Optimize - gif:- | gifsicle -d 3 -O3 -o optimized.gif

спочатку використовуйте ffmpeg для перетворення файлу mp4 у зображення через трубу, потім використовуйте imagemagick, щоб стиснути його до gif, нарешті оптимізувавши його gifsicle

Я не знаю, чому використання gifscicle безпосередньо не вийде.

або ви можете зробити gif цим меншим

convert -dither none -matte -depth 8 -deconstruct -layers optimizePlus -colors 32 in.gif out.gif
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.