FFmpeg - 4. deo

Share on:

FFmpeg - animirani GIF-ovi



Kao što smo radili ovde, daunlodujmo probni fajl sa YouTube-a:

1cd /folder/gde/vrsimo/konverziju
2youtube-dl -f 247+251 https://youtu.be/-2b79B6iaj8
3mv Tutorial\ video--2b79B6iaj8.webm test.webm  # preimenujmo fajl u test.webm

Naš probni fajl ima parametre:

1mediainfo test.webm

dobijamo:

General
Complete name : test.webm
Format : WebM
Format version : Version 4
File size : 2.40 MiB
Duration : 15 s 121 ms
Overall bit rate : 1 331 kb/s
Writing application : Lavf58.20.100
Writing library : Lavf58.20.100

Video ID : 1
Format : VP9
Codec ID : V_VP9
Duration : 15 s 100 ms
Width : 720 pixels
Height : 1 280 pixels
Display aspect ratio : 0.562
Frame rate mode : Constant
Frame rate : 30.000 FPS
Color space : YUV
Language : English
Default : Yes
Forced : No
Color range : Limited
Color primaries : BT.709
Transfer characteristics : BT.709
Matrix coefficients : BT.709

Audio
ID : 2
Format : Opus
Codec ID : A_OPUS
Duration : 15 s 121 ms
Channel(s) : 2 channels
Channel layout : L R
Sampling rate : 48.0 kHz
Bit depth : 32 bits
Compression mode : Lossy
Language : English
Default : Yes
Forced : No

  1. Napravimo animirani gif od fajla kakav jeste

    1ffmpeg -i test.webm test_HD.gif
    

    Novonastali test_HD.gif ima ~54 MB, što je previše mada izgleda vrlo lepo.

    1. Smanjimo fejmrejt sa 30 na 20, i rezoluciju sa 1280 na 640 Px. prema preporukama :
    1ffmpeg -i test.webm -r 20 -vf scale=-1:640 test_640_r20.gif
    
    • -r 20 # ovo je rate, broj frejmova u sekundi
    • scale=-1:640 # skalirano sa 1280 na 640 Px po y osi

    Parametri za test_640_r20:

1mediainfo test_640_r20.gif

General
Complete name : test_640_r20.gif
Format : GIF
Format/Info : Graphics Interchange Format
File size : 11.3 MiB

Image Format : GIF
Format/Info : Graphics Interchange Format
Format profile : 89a
Width : 360 pixels
Height : 640 pixels
Display aspect ratio : 0.562
Compression mode : Lossless

  1. Isprobajmo još 2 varijante:
  • -r 8 i scale=-1:640

test_640_r8__5.7 MB;nedovoljan bitrejt

  • -r 12 i scale=-1:512

test_512_r12__5.2 MB; optimalno

proba 2:

Skinimo sa YouTube-a ovaj klip u najnižoj rezoluciji: 640x360 Px u MP4 formatu.

1youtube-dl -f 18 https://youtu.be/x1Os8NcSrbI

Preimenujmo ga u time_lapse_640x360.mp4 i pogledajmo njegov mediainfo izveštaj:

1mv 24\ Hour\ Time\ Lapse-x1Os8NcSrbI.mp4 time_lapse_640x360.mp4	
2mediainfo time_lapse_640x360.mp4

2.9 MB nije mnogo ali njegov Animirani GIF bi bio mnogo veći.

Rezoluciju nećemo menjati, ali 60 sekundi koliko traje možemo malo da >skratimo. Tačnije odstranićemo prvih 15 sekundi i poslednjih 7:

1ffmpeg -i time_lapse_640x360.mp4 -ss 00:00:15 -to 00:00:53 -c copy -avoid_negative_ts make_zero "time_lapse_640x360_38.mp4"

To je to. Ipak, 38 sekundi je predugačko.Hajde da klip ubrzamo 4 puta.

1ffmpeg -i time_lapse_640x360_38.mp4 -vf  "setpts=0.25*PTS" -an time_lapse_38_0.25.mp4
2

Ako se pitate šta je -an , to je isključivanje audio strima iz konverzije. Audio nam nije potreban, a da smo ga ostavili FFmpeg bi nam ubrzao video strim ali trajanje ne bi skratio 4 puta ostavljajući poslednji frejm smrznut do 38. sekunde

Dobili smo klip koji traje ispod 10 sekundi.
Hajde da mu frejmrejt smanjimo sa 30 na 20, skaliramo mu dužinu na 512 Px i pretvorimo ga u GIF.

1ffmpeg -i time_lapse_38_0.25.mp4 -r 20 -vf scale=512:-1 time_lapse_38_0.25.gif
2

Sasvim pristojno:
Time Lapse