.gif
Bir .mp4
videodan bir animasyon yapmak istiyorum . Bunu komut satırından yapmayı tercih ederim, bu yüzden lütfen yalnızca komut satırı araçlarını listeleyin.
.gif
Bir .mp4
videodan bir animasyon yapmak istiyorum . Bunu komut satırından yapmayı tercih ederim, bu yüzden lütfen yalnızca komut satırı araçlarını listeleyin.
Yanıtlar:
ffmpeg
3.4.4 doğrudan Ubuntu 18.04 üzerinden yapabilir
Muhtemelen şöyle bir şey kullanmak istersiniz:
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
Bu gönderide açıklanan test veri oluşturma prosedürü .
Daha doğrudan:
sudo apt-get install ffmpeg
ffmpeg -i in.mp4 out.gif
ayrıca çalışır, ancak GIF çıkışı giriş videosundan çok daha büyük olur çünkü video formatları kareler arasında akıllıca sıkıştırma yapar.
Argüman dağılımı:
ulimit -Sv 1000000
: program için maksimum 1 Gb hafıza boyutu ayarlayınız.
Çoğunlukla ben komutun önceki girişimlerdeki gibi sınırsız bellek kullanmamasını sağlıyorum.
500 Mb, ffmpeg'in paylaşılan kütüphaneleri yüklemesini engeller ... RAM'inizi yükseltme zamanı?
-ss 00:00:03 -to 00:00:06
: Videoyu kesmek için başlama ve bitiş zamanı.
Hayır, GIF için en iyi yol değildir korsan çevrimiçi videoları dağıtmak.
Ayrıca bakınız: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
-vf scale=512:-1
: çıktı 512
piksellerini yüksekliğe getirin ve en boy oranını korumak için genişliği ayarlayın.
Bu, web’deki görüntüler için, videodan çok daha küçük çözünürlüğe sahip olma eğiliminde olan yaygın bir kullanım durumudur.
Bu seçeneği kaldırırsanız, GIF çıkışı giriş videosuyla aynı yüksekliğe sahiptir.
Orijinal video yüksekliği ile örneğin bulunabilir ffprobe
: https://superuser.com/questions/595177/how-to-retrieve-video-file-information-from-command-line-under-linux/1035178#1035178 ve olduğu Bizim durumumuzda 1024 x 1024.
-r 15
: örnekleme FPS.
Örneğin, orijinal video 30 FPS idi, bu nedenle her 2 ( ) 'de bir kare seçeceği -r 15
anlamına geliyor .ffmpeg
= 30 / 15
Algılanan FPS çıkışı, girişle eşleşecek şekilde ayarlanmıştır, böylece bir hızlanma, yalnızca daha büyük ayrıntı dereceleri fark etmezsiniz.
FPS girişi ile bulunabilir ffprobe
ve toplam giriş çerçevesi sayısı mediainfo
açıklandığı şekilde bulunabilir : https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames -in-a-video-on-the-linux-komut satırı / 1044894 # 1044894
Bu seçeneği öneririm, çünkü video formatları daha büyük çözünürlük nedeniyle genellikle daha yüksek kare hızına sahiptir. Küçük GIF'lerde, düşük kare hızı daha az fark edilir ve bu nedenle bazı kareleri atlayıp daha küçük GIF'ler yapabiliriz.
18.04 öncesi öncesi: ffmpeg
+ convert
ara dosya içermeyen bir astar
ffmpeg
GIF önceden işlenemedi. Sahip olduğum en iyi şey bir şeydi:
sudo apt-get install ffmpeg imagemagick
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - | \
convert -delay 5 -loop 0 - output.gif
Bazı argümanların açıklaması:
-loop 0
: Netscape Gif uzatma döngü sayısı alanını çıktıya ekler 0 sonsuz adresinde belirttiğimiz gibi döngü anlamı: http://www.vurdalakov.net/misc/gif/netscape-looping-application-extension eog
, firefox
ve krom bile onsuz varsayılan olarak sonsuz bütün döngü, bu yüzden emin değilim ne kadar gerekli onu artık.
-delay 5
: Bir sonraki kareyi göstermeden önce, saniye cinsinden, https://en.wikipedia.org/wiki/GIF#Animated_GIF byte 324'te açıklanan süre beklenir. Yani 100
1 FPS, 5
anlamına gelir 1 / 0.5 == 20FPS
.
Yüksekliği ve kare hızını azaltsanız bile, GIF çıkışı videodan daha büyük olabilir, çünkü "gerçek" GIF olmayan video biçimleri kareler arasında sıkıştırırken GIF yalnızca bireysel kareleri sıkıştırır.
Doğrudan:
convert input.mp4 rpi2-bare-metal-blink.gif
çalıştı, ancak neredeyse bilgisayarımın taşması nedeniyle bilgisayarımı öldürdü ve 2s 1Mb giriş dosyam için 100 kat daha fazla çıkış üretti. Belki bir gün ImageMagick yakalar.
Ayrıca bakınız: https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality
Ubuntu 17.10'da test edilmiştir.
scale=320:-1
-r 10
GIF'i normal hızına getirecektir.
İki adım:
Videodan Görüntüleri Çıkar
.mp4
Dosyanızla aynı dizinde çerçeveler adı verilen bir dizin oluşturun . Komutunu kullanın:
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
Dokümanlar: gif seçeneklerini dönüştür
Oldukça büyük bir dosya ile sonlanacak, daha küçük bir dosya elde etmek için ikinci adım komutuna ekleyebileceğiniz seçenekleri optimize etmek için görüntü magick kılavuzuna bir göz atacaksınız .
frames
İlk komutun çalışması için klasörün var olması gerektiğini unutmayın .
-layers Optimize
önceki son convert
komutu ekleyin *.jpg
. Çıkışı kontrol et, etkilenmiş olabilir. Benim için gif boyutunu 5 MB'tan 700 KB'a
ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.png'
.
gifify , dönüştürmeyi basitleştiren hepsi bir arada düğüm tabanlı bir yardımcı programdır. Bu bağlıdır nodejs
, npm
, ffmpeg
ve imagemagick
tüm depolarındakii hangi.
Kurduktan sonra global olarak npm
aşağıdakileri kurabilirsiniz gifify
:
npm install -g gifify
Bir video şu şekilde bir .GIF'e dönüştürülebilir:
gifify video.mp4 -o video.gif
İsteğe bağlı olarak videoda bir başlangıç ve bitiş konumu ayarlayabilir ve bir metin başlığı ekleyebilirsiniz:
gifify clip.mp4 -o clip.gif --from 01:48:23.200 --to 01:48:25.300 --text 'we are the knights who say nip!'
Smaller️ Dönüşümün daha küçük videolarla bile tamamlanması birkaç dakika sürebilir.
NOT:
ffmpeg
veimagemagick
bazı özel kütüphanelerle derlenmesi gerekebilir (yani, buna göre libass ve fontconfig).
gifsicle
, fakat sonra başka bir sorun ortaya çıkıyor: github.com/vvo/gifify/issues/95 Ayrıca, npm acemilerine hangi dizinde çalışacağını npm install
ve kök olarak çalıştırıp çalıştırmayacağımızı söyler misiniz ? Teşekkürler!