Wie kann ich ffmpeg dazu bringen, eine .mov in eine .gif zu konvertieren?

99

Ich versuche eine .mov in eine .gif zu konvertieren und habe keinen Erfolg.

Hier ist der Fehler:

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.

Wenn ich den Teil -pix_fmt rgb24 weglasse, beschwert es sich. Überlegungen zur Behebung?

Daniel Fischer
quelle
3
Zu Ihrer Information, Es ist eine ausgezeichnete Lösung für qualitativ hochwertige Umwandlungen gegeben hier .
Ryanjdillon

Antworten:

161

Die Reihenfolge der Befehlszeilenargumente ist wichtig. Diese Befehlszeile sollte funktionieren, generiert jedoch eine riesige Datei:

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

Beachten Sie, dass Sie wahrscheinlich die Bildrate und -größe beim Konvertieren reduzieren sowie eine Startzeit und -dauer angeben möchten. Sie möchten wahrscheinlich nicht die gesamte Datei mit der ursprünglichen Auflösung und Bildrate konvertieren.

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

Die Dateigröße wird immer noch riesig sein. Möglicherweise können Sie den GIF-Optimierer von ImageMagick verwenden , um die Größe zu verringern:

convert -layers Optimize output.gif output_optimized.gif
PleaseStand
quelle
3
Tolle Antwort, danke :) GIF ist ein verrücktes Format ... die ursprüngliche .mov war 250k, die konvertierte .gif von ffmpeg war 8mb und die convertoptimierte Version war erstaunliche 10k! Beeindruckend!
TooTallNate
19
ffmpeg beschwert sich über das Pixelformat und wechselt von rgb24 zu pal8; Sollte der Befehl in der Antwort aktualisiert werden?
user1071136
7
Inkompatibles Pixelformat 'rgb24' für Codec 'gif'
Wartung
1
@Andy in meiner Version von ffmpeg automatisch auf rgb8 gefixt.
James Campbell
Wie mache ich in Android?
Ajay Shrestha
12

Nach dem Konvertieren:

ffmpeg -i input.mp4 input.gif 

Versuchen Sie, Frames zu optimieren:

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

Und verwenden Sie gifsicle, um die endgültige Optimierung vorzunehmen:

gifsicle -O2 input_optframe.gif -o optimized.gif

Erhielt 6,8 MB GIF von 12,2 MB Video mit fast der gleichen Qualität!

Aleksey Kozhevnikov
quelle
3
Möchten Sie erklären, wie diese Schritte funktionieren und was sie tun?
Raystafarian
10

Ich habe ein Tool entwickelt, das FFmpeg, ImageMagick und Giflossy in einem einzigen benutzerfreundlichen Befehlszeilenprogramm zusammenfasst, das Sie in einer einzigen Zeile installieren können: https://github.com/vvo/gifify

Ich empfehle jedem, der bereit ist, Videos zu drehen => GIF, um es zu verwenden, anstatt viel Zeit damit zu verbringen, 3 Dokumentationswebsites zu durchsuchen, um zu verstehen, wie die Größe des GIF geändert oder die Start- / Endzeit geändert wird.

vvo
quelle
1
Und wenn Docker auf Ihrem Computer ausgeführt wird, alias gifify='docker run -it --rm -v $(pwd):/data maxogden/gifify'gifify screencast.mkv -o screencast.gif --resize 800:-1
erstellen
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

Verwende zuerst ffmpeg, um mp4-Dateien per Pipe in Bilder zu konvertieren. Dann benutze imagemagick, um sie zu komprimieren

Ich weiß nicht, warum die direkte Verwendung von Gifscicle nicht funktioniert.

oder Sie können das GIF dadurch verkleinern

convert -dither none -matte -depth 8 -deconstruct -layers optimizePlus -colors 32 in.gif out.gif
Shuman
quelle