Vraag Hoe maak je een geanimeerde GIF van MP4-video via de opdrachtregel?


Ik wil een animatie maken .gif van een .mp4 video. Details hand404040 details hand404040 details hand details hand4040 details hand details 3404040 hand hand4040 details 340 3 details details details 3 hand404040 3 details40 3 hand 3 3 hand40 details 3 3 3 3 3 3 3 details details hand 340 hand details 3 340 3 340 3 340 3 3 3 3 3 3 3 3


76
2017-07-15 08:01


oorsprong




antwoorden:


Twee stappen:

  • Extract Images from Video

    Maak een map met de naam frames in dezelfde map met uw .mp4 het dossier. Gebruik commando:

    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
    

    bron

  • Converteer afbeeldingen naar gif

    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
    

    Documenten: converteer gif-opties

Je zult eindigen met een nogal groot bestand, kijk eens naar de afbeelding magick gids om gif te optimaliseren over opties die u aan de opdracht tweede stap kunt toevoegen om een ​​kleiner bestand te verkrijgen.


92
2017-07-15 08:01



geweldig antwoord - wat extra info: ffmpeg kan worden geïnstalleerd met behulp van routebeschrijvingen hier - chepyle
Houd er rekening mee dat de frames map moet bestaan ​​om de eerste opdracht te laten werken. - totymedli
Voor diegenen die een snelle manier willen optimaliseren die over het algemeen werkt en te lui zijn om de link te lezen, voeg je gewoon toe -layers Optimize naar de laatste convert commando, vóór *.jpg. Controleer echter de uitvoer, deze kan worden beïnvloed. Voor mij verminderde het de GIF-grootte van 5 MB tot 700 KB zonder enig waarneembaar kwaliteitsverlies :) - cpury
Bedankt dat het een interessant proces was, een 5.6 MB mp4 eindigde in een gif van 236MB, ik weet niet zeker of ik dit op mijn website zal plaatsen;) Mogelijk moet een gif worden beperkt tot seconden in plaats van een minuut. - cardamom
In plaats van het gebruik van de JPG-bestandsindeling, zeer lossy met de standaardinstellingen, raad ik aan om PNG te gebruiken voor de initiële export van bestanden. ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.png'. - Pierre F


ffmpeg + convert one-liner zonder tussenliggende bestanden

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

hand hand hand4040 details hand details details 3 hand40404040404040404040404040404040404040 details hand 3 hand 340 34040404040 details hand40 3 3 3 hand40404040404040404040404040404040404040404040404040404040 details hand 3

Bron: https://superuser.com/a/730389/128124

Uitleg van enkele van de argumenten:

  • -r 10: sampling FPS. Dus bijvoorbeeld, als de originele video 30 FPS had, -r 10 betekent dat ffmpeg zal één frame kiezen in elke 3. De invoer-FPS is te vinden met ffprobeen het totale aantal invoerframes is te vinden met mediainfo zoals uitgelegd bij: https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames-in-a-video-on-the-linux-command-line/1044894#1044894 Een relatief lage waarde zoals 10 betekent minder uitvoerframes en dus kleinere GIF's. TODO wat

  • -loop 0hand4040 3 details 3 details 3 details 3 details 3 details details 3 hand details details40 details 3 details40 3 details40 3 hand 3 details40 3 3 hand details 3 hand 3 hand hand hand 340 3 hand 3 details40 3 hand 3 hand details 340 3 details details 3 details40 3 hand 3 hand 3 hand 3 3 3 3 3 3 3 3 3 3 3 3 3 0 betekent oneindige lus zoals beschreven bij: http://www.vurdalakov.net/misc/gif/netscape-looping-application-extension  eog, firefox en chromium all loop oneindig standaard ook zonder, dus ik weet niet zeker hoe nodig het is.

  • -delay 5: wachttijd voordat het volgende frame wordt getoond, in honderdsten van seconden, zoals beschreven bij: https://en.wikipedia.org/wiki/GIF#Animated_GIF byte 324. Dus 100 betekent 1 FPS, 5 middelen 1 / 0.5 == 20FPS.

Verdere optionele argumenten die u waarschijnlijk wilt:

Zelfs als u de hoogte en framerate verlaagt, is de uitvoer-GIF mogelijk nog steeds groter dan de video, aangezien 'echte' niet-GIF-video-indelingen worden gecomprimeerd over frames, terwijl GIF alleen afzonderlijke frames comprimeert.

Een directe:

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

werkte, maar mijn computer bijna vermoord vanwege geheugenoverloop, en produceerde een ouptput van 100x groter voor mijn 2s 1Mb invoerbestand. Misschien zal ImageMagick op een dag inhalen.

Getest op Ubuntu 17.10.


65
2017-10-15 18:56



Downvoters leg uit ;-) - Ciro Santilli 新疆改造中心 六四事件 法轮功
Je vertraging komt niet overeen met je -r-waarde (het resulterende GIF is 2x Snelheid). Je hebt ook zonder reden een schaalargument toegevoegd (het maakt het gif erg klein). - asmeurer
Ik ben het eens. Klein formaat gifs zijn beter voor het web. Bedankt voor scale=320:-1 - zombic
Voor degenen die zich afvragen: verwijderen -r 10 brengt de GIF terug naar de normale snelheid. - Mitch
Ik kreeg een gif 20% groter dan de mp4: O - Adam Goldman


gifify is een alles-in-één op knooppunten gebaseerd hulpprogramma dat de conversie vereenvoudigt. Het hangt af van nodejs, npm, ffmpeg, en imagemagick die allemaal beschikbaar zijn in de repo's.

Eens je hebt npm geïnstalleerd die u kunt installeren gifify wereldwijd met:

    npm install -g gifify

Een video kan worden geconverteerd naar een .GIF met:

    gifify video.mp4 -o video.gif

Je kunt ook optioneel een start- en eindpositie in de video instellen en een tekstbijschrift toevoegen:

    gifify clip.mp4 -o clip.gif --from 01:48:23.200 --to 01:48:25.300 --text 'we are the knights who say nip!'

️ Het kan enkele minuten duren voordat de conversie is voltooid, zelfs met kleinere video's.

NOTITIE: ffmpeg en imagemagick mogelijk moet worden gecompileerd met een aantal specifieke bibliotheken (dat wil zeggen libass en fontconfig dienovereenkomstig).


8
2017-09-03 19:44



Kan ong.> 40 sec clips niet aan: github.com/vvo/gifify/issues/99 - oligofren