Odpowiedzi:
ffmpeg
3.4.4 może to zrobić bezpośrednio na Ubuntu 18.04
Prawdopodobnie chcesz użyć czegoś takiego:
sudo apt-get install ffmpeg
wget -O opengl-rotating-triangle.mp4 https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.mp4?raw=true
ulimit -Sv 1000000
ffmpeg \
-i opengl-rotating-triangle.mp4 \
-r 15 \
-vf scale=512:-1 \
-ss 00:00:03 -to 00:00:06 \
opengl-rotating-triangle.gif
Testuj procedurę generowania danych opisaną w tym poście .
Bardziej bezpośredni:
sudo apt-get install ffmpeg
ffmpeg -i in.mp4 out.gif
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 pirackie rozpowszechnianie 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, że ffmpeg
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 # 1044894
Polecam 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średnich
ffmpeg
nie mógł wcześniej obsługiwać GIF-ów. Najlepsze, co miałem, to coś takiego:
sudo apt-get install ffmpeg imagemagick
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - | \
convert -delay 5 -loop 0 - output.gif
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
oznacza 1 / 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:
convert input.mp4 rpi2-bare-metal-blink.gif
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.
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:
ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.jpg'
-r 5 stands for FPS value
for better quality choose bigger number
adjust the value with the -delay in 2nd step
to keep the same animation speed
%03d gives sequential filename number in decimal form
cd frames
convert -delay 20 -loop 0 *.jpg myimage.gif
-delay 20 means the time between each frame is 0.2 seconds
which match 5 fps above.
When choosing this value
1 = 100 fps
2 = 50 fps
4 = 25 fps
5 = 20 fps
10 = 10 fps
20 = 5 fps
25 = 4 fps
50 = 2 fps
100 = 1 fps
in general 100/delay = fps
-loop 0 means repeat forever
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.
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 rozmiar
ffmpeg -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
, i imagemagick
które są dostępne w repo.
Po npm
zainstalowaniu możesz zainstalować gifify
globalnie za pomocą:
npm install -g gifify
Wideo można przekonwertować na format .GIF za pomocą:
gifify video.mp4 -o video.gif
Możesz również opcjonalnie ustawić pozycję początkową i końcową w filmie i dodać podpis tekstowy:
gifify clip.mp4 -o clip.gif --from 01:48:23.200 --to 01:48:25.300 --text 'we are the knights who say nip!'
For Konwersja może potrwać kilka minut, nawet w przypadku mniejszych filmów.
UWAGA:
ffmpeg
iimagemagick
może wymagać kompilacji z niektórymi konkretnymi bibliotekami (tj. Odpowiednio libass i fontconfig).
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!