2013-06-20 32 views
11

Muszę przetworzyć bardzo dużą liczbę (200 000+) krótkich mp4 (mniej niż 10 sekund) w animowane gify. Wydaje mi się, że wypróbowałem każdy możliwy sposób wykonania tej linii poleceń, ale tworzenie gifów jakościowych trwa zbyt długo. Obecnie używam ffmpeg do rozpakowywania ramek obrazu (jpg), a magika obrazu konwertuje je do ich złożenia. Tworzy gify o wysokiej jakości, ale zajmuje zbyt dużo czasu i zużywa zbyt dużo pamięci i procesora, nawet przy dostosowywaniu pamięci limitów i limitów map.Najszybszy sposób na tworzenie animowanych gifów z mp4

Próbowałem również tworzyć animowane gify bezpośrednio za pomocą ffmpeg, ale jakość jest w najlepszym wypadku straszna. Próbowałem także używać gifsicle, który wydaje się szybki, ale to wymaga tylko gifów jako danych wejściowych, a użycie ffmpeg do ich generowania tworzy gif o niskiej jakości.

Czy ktoś ma jakieś przepisy wiersza poleceń do szybkiego tworzenia wysokiej jakości gif?

+0

Miałem trochę ekspozycji na niektóre z tych narzędzi.Czy można przekazywać dane wyjściowe za pośrednictwem rur do różnych etapów. To może znacznie poprawić czas przetwarzania (czasami!). Ponadto w trakcie studiów nad zarządzaniem projektami dowiesz się, że prawie zawsze istnieje kompromis między czasem, zasobami i jakością. ; - /. Powodzenia. – shellter

+1

Zobacz także [ffmpeg konwertuje wideo .flv na .gif z okropną jakością] (http://superuser.com/a/556031/110524). – LordNeckbeard

Odpowiedz

0

To mogłoby poprawić przechodząc z nieskompresowanych obrazów, jak .ppm przykładowo z mplayera linia poleceń byłoby:

mplayer -benchmark -noframedrop -nosound -vf format=rgb24 -vo pnm *.avi -osdlevel 0 

Będą zapisać jpg kompresji/cykl uncompress.

Pomoże to również w pracy z dyskiem Solid State Drive.

17

Najpierw należy utworzyć zestaw obrazów jpg o maksymalnej jakości, stosując zestawy opcji mplayer i jpeg na 100 (jpeg: jakość = 100).

mplayer -ao null -ss 0:00:00 -endpos 10 mts.flv -vo jpeg:outdir=jpeg_dir:quality=100 

Następnie trzeba konwertować generowane JPG do GIF korzystających convert, wystarczy wpisać:

for i in ./jpeg_dir/*.jpg; do convert "$i" "${i%.jpg}.gif"; done 

i wreszcie za pomocą gifsicle stworzyć animowany gif:

gifsicle --delay=10 --loop ./jpeg_dir/*.gif > anim.gif 

Ponadto, można użyć flaga poziomu optymalizacji --optimize=03. Może to być pomocne, aby zmniejszyć rozmiar pliku:

gifsicle --delay=10 --optimize=03 --loop *.gif > anim.gif 

Dodatkowo można manipulować ilością kolorów --colors num aktualnej palety i --color-method method celu określenia najodpowiedniejszego palety.

jak dla mnie najbardziej odpowiedniej metody jest median-cut

median-cut is the median cut algorithm described by Heckbert 

Również staram się manipulować z opisanych flagi i znaleźć najbardziej przydatnych opcji, aby osiągnąć lepszą jakość generowanego GIF obrazu:

gifsicle --delay=3 --optimize=03 --color-method median-cut --loop *.gif > anim.gif 

Wykonaj dokładne pomiary przy pomocy --delay=NUM, aby dopasować prędkość animacji. Ten parametr zależy od FPS oryginalnego wideo.

+0

Jak wspomniano w moim oryginalnym komentarzu, próbowałem tej trasy. Indywidualne gify ffmpeg są bardzo niskiej jakości. Prowadzą one do niskiej jakości animowanych gifów w końcu. – stinkypyper

+0

Zaktualizowałem swoją odpowiedź, dodając kilka dodatkowych kroków, aby uzyskać zestaw obrazów o wyższej jakości niż można dostarczyć ffmpeg: mplayer -ao null -ss 0:00:00 -endpos 10 wideo.flv -vo jpeg: outdir = jpeg_dir; i dla i w * .jpg; skonwertuj "$ i" "$ {i% .jpg} .gif"; Gotowe –

0

Użyj programu "animuj" z pakietu imagemagick po podzieleniu wideo na obrazy. Podoba mi się to animacja ./*.jpg. Następnie wystarczy zapisać otwarte połączone w obrazach programu ImageMagick jako plik gif. Ale może być duży/Następnie musi zoptymalizować i zmienić rozmiar (lepiej zrobić to z pierwszą skalą mplayera = 240: 180).