Как я могу получить ffmpeg для преобразования .mov в .gif?

99

Я пытаюсь преобразовать. 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
PleaseStand
источник
3
Отличный ответ, спасибо :) GIF - безумный формат ... исходный .mov был 250k, конвертированный .gif из ffmpeg был 8mb, а convertоптимизированная версия была поразительной 10k! Впечатляет!
TooTallNate
19
ffmpeg жалуется на формат пикселей и переключается с rgb24 на pal8; должна ли быть обновлена ​​команда в ответе?
user1071136
7
Несовместимый формат пикселей 'rgb24' для кодека 'gif'
highmaintenance
1
@ В моей версии ffmpeg Энди автоматически исправил rgb8.
Джеймс Кэмпбелл
как это сделать в 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
Не могли бы вы объяснить, как эти шаги работают и что они делают?
Райстафариан
10

Я сделал инструмент, который объединяет FFmpeg, ImageMagick и giflossy в одну простую в использовании программу командной строки, которую вы можете установить в одну строку: https://github.com/vvo/gifify

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

ВВО
источник
1
И если у вас на компьютере запущен Docker, просто сделайте псевдоним, например, так: alias gifify='docker run -it --rm -v $(pwd):/data maxogden/gifify'используйте егоgifify screencast.mkv -o screencast.gif --resize 800:-1
sabbour
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
Шуман
источник