MP4 videosundan komut satırı ile animasyonlu bir GIF nasıl oluşturulur?

76

.gif videosundan bir animasyon .mp4 yapmak istiyorum. Komut satırından bunu yapmayı tercih ederim, bu yüzden lütfen sadece komut satırı araçlarını listeleyin.

    
sordu Maythux 15.07.2015 10:01

3 cevap

91

İki adım:

  • Görüntülerin Görüntüden Çıkarılması

    .mp4 dosyanızla aynı dizinde çerçeve adı verilen bir dizin oluşturun. Komutu kullan:

    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
    

    kaynak

  • Resimleri Gif'e Dönüştürme

    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ürme

Oldukça büyük bir dosyayla sonuçlanacaksınız, gif optimize etmek için resim magick rehberine göz atın. Daha küçük bir dosya elde etmek için ikinci adım komutuna ekleyebileceğiniz seçenekler.

    
verilen cevap Maythux 15.07.2015 10:01
65

ffmpeg + convert ara dosyalar olmadan tek liner

sudo apt-get install ffmpeg imagemagick
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - | \
  convert -delay 5 -loop 0 - output.gif

çıktıyı çıktı dosyasına göre daha hızlı ve makul bir boyutta üretti.

Kaynak: İşte

Bazı argümanların açıklaması:

  • -r 10 : örnekleme FPS. Örneğin, orijinal videoda 30 FPS varsa, -r 10 , ffmpeg öğesinin her 3 öğesinde bir kare seçeceği anlamına gelir. FPS girişi ffprobe ile bulunabilir ve toplam giriş karesi sayısı bulunabilir. Açıklandığı şekilde mediainfo : İşte 10 gibi nispeten düşük bir değer daha az çıktı karesi ve dolayısıyla daha küçük GIF'ler anlamına gelir. TODO biraz

  • -loop 0 : Netscape Gif uzantısı Döngü sayısı alanını çıktıya ekleyin. 0, şu şekilde açıklandığı gibi sonsuz döngüdür: İşte eog , firefox ve chromium tüm döngü sonsuz olarak sınırsız olarak varsayılan, bu yüzden artık ne kadar gerekli olduğundan emin değilim.

  • -delay 5 : bir sonraki kareyi göstermeden önce beklenilen süre, ikinci planda, aşağıdaki gibi açıklanmıştır: İşte byte 324. Yani 100 1 FPS, 5 1 / 0.5 == 20FPS demektir.

İstediğiniz olası isteğe bağlı argümanlar:

  • ffmpeg -vf scale=320:-1 : çıktıyı 320 piksel yüksekliğinde yapmak. Bu web için GIF'ler için yaygın kullanım durumudur. Bu seçeneği kaldırırsanız, GIF çıkışı giriş videosuyla aynı yüksekliğe sahiptir. Orijinal yükseklik ffprobe ile bulunabilir: İşte ve identify ile çıktı.

  • ffmpeg -ss 00:02:26 -to 00:02:36 : yalnızca videoyu 02 dakika 26 saniyeden 02 dakika 36 saniyeye dönüştürür. Ayrıca bkz .: İşte

Yüksekliği küçültseniz ve çerçevelemeseniz bile, GIF çıkışı, "gerçek" GIF olmayan video formatları çerçeveler arasında sıkıştığından, GIF yalnızca tek tek çerçeveleri sıkıştırdığı için videodan daha büyük olabilir.

Doğrudan:

convert input.mp4 rpi2-bare-metal-blink.gif

çalıştı, ancak neredeyse bellek taşması nedeniyle bilgisayarımı öldürdü ve 2s 1Mb giriş dosyam için 100 kat daha büyük bir çıkış üretti. Belki bir gün ImageMagick yetişir.

Ubuntu 17.10'da test edildi.

    
8

gifify , dönüşümü kolaylaştıran hepsi bir arada düğüm tabanlı bir yardımcı programdır. Bu, nodejs , npm , ffmpeg ve imagemagick değerine bağlıdır. Bu, reposlarda kullanılabilir.

npm yüklendikten sonra aşağıdakilerle gifify yükleyebilirsiniz:

    npm install -g gifify

Bir video aşağıdakilerle bir .GIF'e dönüştürülebilir:

    gifify video.mp4 -o video.gif

Ayrıca isteğe bağlı olarak videoda bir başlangıç ​​ve bitiş konumu belirleyebilir ve bir metin yazısı 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️ Küçük videolarda bile dönüşümün tamamlanması birkaç dakika sürebilir.

  

NOT: ffmpeg ve imagemagick 'in bazı belirli kitaplıklar (yani, buna göre libass ve fontconfig) ile derlenmesi gerekebilir.

    
verilen cevap ccpizza 03.09.2017 21:44

Etiketlerdeki diğer soruları oku