Jak mogę przekonać ffmpeg do konwersji .mov do .gif?

98

Próbuję przekonwertować plik .mov na plik .gif i nie mam powodzenia.

Oto błąd:

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.

Jeśli pominę część -pix_fmt rgb24, narzeka. Myśli o tym, jak to naprawić?

Daniel Fischer
źródło
3
FYI, Jest to doskonałe rozwiązanie dla wysokiej jakości konwersji podanych tutaj .
ryanjdillon

Odpowiedzi:

161

Kolejność argumentów wiersza poleceń ma znaczenie. Ta linia poleceń powinna działać, ale wygeneruje gigantyczny plik:

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

Pamiętaj, że prawdopodobnie chcesz zmniejszyć liczbę klatek na sekundę i rozmiar podczas konwersji, a także określić czas rozpoczęcia i czas trwania. Prawdopodobnie nie chcesz konwertować całego pliku w oryginalnej rozdzielczości i liczbie klatek na sekundę.

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

Rozmiar pliku nadal będzie ogromny. Możesz użyć optymalizatora GIF ImageMagick , aby zmniejszyć rozmiar:

convert -layers Optimize output.gif output_optimized.gif
Proszę wstać
źródło
3
Niesamowita odpowiedź, dzięki :) GIF to szalony format ... oryginalny .mov miał 250k, skonwertowany .gif z ffmpeg miał convert8mb , a zoptymalizowana wersja była zdumiewająca 10k! Imponujący!
TooTallNate
19
ffmpeg narzeka na format pikseli i przełącza się z rgb24 na pal8; czy polecenie w odpowiedzi powinno zostać zaktualizowane?
user1071136
7
Niezgodny format pikseli „rgb24” dla kodeka „gif”
highmaintenance
1
@Andy automatycznie naprawiony do rgb8 w mojej wersji ffmpeg.
James Campbell
jak zrobić w Androidzie?
Ajay Shrestha
12

Po konwersji:

ffmpeg -i input.mp4 input.gif 

Spróbuj zoptymalizować ramki:

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

I użyj gifsicledo ostatecznej optymalizacji:

gifsicle -O2 input_optframe.gif -o optimized.gif

Mam 6,8 MB GIF z 12,2 MB wideo o niemal tej samej jakości!

Aleksey Kozhevnikov
źródło
3
Czy możesz wyjaśnić, jak działają te kroki i co robią?
Raystafarian,
10

Zrobiłem narzędzie, które łączy FFmpeg, ImageMagick i giflossy w jeden łatwy w użyciu program wiersza poleceń, który można zainstalować w jednym wierszu: https://github.com/vvo/gifify

Polecam każdemu, kto chce włączyć filmy => GIF, aby z niego korzystać, zamiast próbować spędzać dużo czasu przeglądając 3 witryny z dokumentacją, aby zrozumieć, jak zmienić rozmiar GIF lub zmienić czas rozpoczęcia / zakończenia.

vvo
źródło
1
A jeśli na komputerze działa Docker, po prostu zrób taki alias: alias gifify='docker run -it --rm -v $(pwd):/data maxogden/gifify'użyj gogifify 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

najpierw użyj ffmpeg do przekonwertowania pliku mp4 na obrazy za pomocą potoku, a następnie użyj imagemagick do skompresowania go do gifa i zoptymalizowania go za pomocą gifsicle

Nie wiem, dlaczego bezpośrednie używanie gifscicle nie zadziała.

lub możesz przez to zmniejszyć gif

convert -dither none -matte -depth 8 -deconstruct -layers optimizePlus -colors 32 in.gif out.gif
Shuman
źródło