Chcę zrobić animację .gif
z .mp4
wideo. Wolałbym to zrobić z wiersza poleceń, więc proszę wypisać tylko narzędzia wiersza poleceń.
command-line
mp4
gif
Maythux
źródło
źródło
Odpowiedzi:
ffmpeg
3.4.4 może to zrobić bezpośrednio na Ubuntu 18.04Prawdopodobnie chcesz użyć czegoś takiego:
Testuj procedurę generowania danych opisaną w tym poście .
Bardziej bezpośredni:
również działa, ale wyjściowy GIF byłby znacznie większy niż wejściowy wideo, ponieważ formaty wideo inteligentnie kompresują się między ramkami.
Podział argumentów:
ulimit -Sv 1000000
: ustaw maksymalny rozmiar pamięci 1 Gb dla programu.Głównie ja upewniam się, że polecenie nie używa nieograniczonej pamięci, tak jak niektóre wcześniejsze próby.
500 Mb powoduje, że ffmpeg nie ładuje bibliotek współdzielonych ... czas na aktualizację pamięci RAM?
-ss 00:00:03 -to 00:00:06
: czas rozpoczęcia i zakończenia wycięcia filmu.Nie, pliki GIF nie są najlepszym sposobem na
pirackierozpowszechnianie filmów online.Zobacz także: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
-vf scale=512:-1
:512
ustaw wyjściowe piksele na wysokość i dostosuj szerokość, aby zachować proporcje.Jest to częsty przypadek użycia obrazów w Internecie, które mają znacznie mniejszą rozdzielczość niż wideo.
Jeśli usuniesz tę opcję, wyjściowy plik GIF ma taką samą wysokość jak wejściowe wideo.
Oryginalną wysokość wideo można znaleźć na przykład
ffprobe
: https://superuser.com/questions/595177/how-to-retrieve-video-file-information-from-command-line-under-linux/1035178#1035178 i jest 1024 x 1024 w naszym przypadku.-r 15
: próbkowanie FPS.Na przykład oryginalny film miał 30 klatek na sekundę, co
-r 15
oznacza, żeffmpeg
wybierze jedną klatkę na każde 2 (= 30 / 15
).Jednak postrzegana moc wyjściowa FPS jest dopasowywana do danych wejściowych, więc nie zauważysz przyspieszenia, a jedynie większą ziarnistość.
Wejściowy FPS można znaleźć za pomocą
ffprobe
, a całkowitą liczbę ramek wejściowych można znaleźć za pomocąmediainfo
wyjaśnienia na stronie : https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames -w-a-video-on-the-linux-command-line / 1044894 # 1044894Polecam tę opcję, ponieważ formaty wideo mają zwykle wyższą szybkość klatek ze względu na większą rozdzielczość. W przypadku mniejszych plików GIF niższa liczba klatek na sekundę jest mniej zauważalna, dlatego możemy pomijać niektóre klatki i tworzyć mniejsze pliki GIF.
Przed 18.04:
ffmpeg
+convert
jedna linijka bez plików pośrednichffmpeg
nie mógł wcześniej obsługiwać GIF-ów. Najlepsze, co miałem, to coś takiego:Wyjaśnienie niektórych argumentów:
-loop 0
: dodaj do danych wyjściowych pole Liczba pętli rozszerzenia Netscape Gif. 0 oznacza nieskończoną pętlę, jak opisano na stronie : http://www.vurdalakov.net/misc/gif/netscape-looping-application-extensioneog
,firefox
a chrom wszystkie pętle nieskończenie domyślnie nawet bez niej, więc nie jestem pewien, jak to konieczne jest już.-delay 5
: czas oczekiwania przed wyświetleniem następnej klatki, w setnych sekundach, jak opisano na stronie : https://en.wikipedia.org/wiki/GIF#Animated_GIF bajt 324.100
Oznacza to 1 FPS,5
oznacza1 / 0.5 == 20FPS
.Nawet jeśli zmniejszysz wysokość i liczbę klatek na sekundę, wyjściowy plik GIF może być nadal większy niż wideo, ponieważ „prawdziwe” formaty wideo inne niż GIF kompresują się między ramkami, podczas gdy GIF kompresuje tylko pojedyncze klatki.
Bezpośredni:
działało, ale prawie zabiłem mój komputer z powodu przepełnienia pamięci i wytworzyłem wydajność 100 razy większą dla mojego pliku wejściowego 2M 1Mb. Może pewnego dnia ImageMagick dogoni.
Zobacz także: https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality
Testowane na Ubuntu 17.10.
źródło
scale=320:-1
-r 10
przywróci GIF do normalnej prędkości.Dwa kroki:
Wyodrębnij obrazy z wideo
Utwórz katalog o nazwie ramki w tym samym katalogu ze swoim
.mp4
plikiem. Użyj polecenia:źródło
Konwertuj obrazy na gif
Dokumenty: konwersja opcji gif
Skończysz z dość dużym plikiem, spójrz na przewodnik magii obrazu, aby zoptymalizować gif na temat opcji, które możesz dodać do polecenia drugiego kroku, aby uzyskać mniejszy plik.
źródło
frames
folder musi istnieć, aby pierwsze polecenie działało.-layers Optimize
poprzedniąconvert
komendę*.jpg
. Sprawdź jednak dane wyjściowe, może to mieć wpływ. Dla mnie zmniejszyłem rozmiarffmpeg -i video.mp4 -r 5 'frames/frame-%03d.png'
.gifify to wszechstronne narzędzie oparte na węzłach, które upraszcza konwersję. To zależy od tego
nodejs
,npm
,ffmpeg
, iimagemagick
które są dostępne w repo.Po
npm
zainstalowaniu możesz zainstalowaćgifify
globalnie za pomocą:Wideo można przekonwertować na format .GIF za pomocą:
Możesz również opcjonalnie ustawić pozycję początkową i końcową w filmie i dodać podpis tekstowy:
For Konwersja może potrwać kilka minut, nawet w przypadku mniejszych filmów.
źródło
gifsicle
, ale potem pojawia się inny problem: github.com/vvo/gifify/issues/95 Ponadto, czy mógłbyś nam powiedzieć nowicjuszom npm w jakim katalogu uruchomićnpm install
i czy uruchomić go jako root, czy nie? Dzięki!