.gifBir .mp4videodan 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.
.gifBir .mp4videodan 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ı 512piksellerini 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 15anlamı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 ffprobeve toplam giriş çerçevesi sayısı mediainfoaçı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+ convertara dosya içermeyen bir astar
ffmpegGIF ö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 , firefoxve 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 1001 FPS, 5anlamı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 10GIF'i normal hızına getirecektir.
İki adım:
Videodan Görüntüleri Çıkar
.mp4Dosyanı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 convertkomutu 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, ffmpegve imagemagicktüm depolarındakii hangi.
Kurduktan sonra global olarak npmaş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:
ffmpegveimagemagickbazı ö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 installve kök olarak çalıştırıp çalıştırmayacağımızı söyler misiniz ? Teşekkürler!