Slideshow ffmpeg-gel (vagy barmilyen mas mukodo CLI tool-lal)

Fórumok

Vany egy gondom:

 

Van kb 15 db JPG kepem, ebbol szeretnek egy slideshow csinalni. (FONTOS, a videonak 25fps-nek KELL lennie, azaz az fps csokkento dolgok nem opciok.)

ffmpeg -framerate 25 -loop 1 -r 5 -i image-%01d.jpg -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p output.mp4

 

Itt a gondom, az, hogy ez csinal egy olyan videot, ami 2 mp hosszu, es be vannak szorva a kepek beleje.

Magyarul, nem csinal a kepek kozott semmi delay-t.

Nekem minden 5 masodpercben kellene megjelenni egy kepnek.

 

Otlet?

Hozzászólások

Szerkesztve: 2023. 09. 18., h – 10:16

Innen vettem, épp csak minimálisan kellett módosítani:

ffmpeg -framerate 1/5 -i image%03d.png -c:v libx264 -r 25 -pix_fmt yuv420p out.mp4

(az image melletti számformátum amit te megadtál, az nekem érthetetlen: %01d az én értelmezésem szerint egy számjegyes, amit kiegészítesz vezető nullával. WTF?)

Ez sajna nem jo, mivel ez leveszi az fps-t kicsire. Mint irtam, a vegleges video fps-nek 25-nek kell lennie!!

Mint lathato itt:

 

 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt470bg/unknown/unknown), 1920x1080 [SAR 1:1 DAR 16:9], 782 kb/s, 0.20 fps, 0.20 tbr, 16

Nem az a baj, hogy hiányzik a -i image* opció elől a -f image2 format-specifikáció? Az a furcsa, hogy a doksi szerint -framerate vagy -r kell a -i elé, és a kimeneti fájl elé is, ezért lett olyan a parancssor, amilyen.

Szerintem az a verzió jó, kipróbáltam én is. (Hogy nálad mi történik, az más kérdés.)

 

VIDEÓ LINK

 

ffmpeg -framerate 1/5 -i img%03d.jpg -r 25 -c:v libx264 -pix_fmt yuv420p output.mp4

Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 940x422 [SAR 1:1 DAR 470:211], 8 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)

(A fenti videón is látszik, hogy 25 fps lett az elkészült videó az mpv szerint is.)

Nekem az is jo, ha barmilyen masik CLI tool kepes csinalni slideshow-t JPG-kbol, X felulet nincs a szerveren.

Mi az a (feltételezem műszaki?) indok, ami miatt állóképeknek másodpercenként 25x kell letárolva lenniük 5 másodpercen keresztül egy állóképvetítő slideshow-nál?

Hulye wörkaround de nem foglal azert talan annyi helyet: mi van akkor ha a 15 jpeg-ből csinálsz 1875 db jpeg-et? Akar ugy hogy symlinkelve. Ugyis jol be lesz tomoritve mert kicsik a difik :) 

egyebkent ezesetben sajna a fading/in/out nem mukodik, kellene valami tool erre is, ami CLI

Amikor a 15 jpegből csinálsz 1875 jpeget, használj ImageMagick-et (minden disztróban benne van, "convert" parancs). Azzal megadhatod, hogy az egy forrás jpeg fade-lve gyártódjon le az első pár és utolsó pár kimenet esetén. Ezzel akár cifrább átmeneteket is csinálhatsz, pl https://chris-lamb.co.uk/posts/generating-gradiented-fade-images-using-… (ez egyébként tud élből mpg-et generálni, de nem tudom, mennyire konfolható a kimenet formátuma, nem használtam még erre.)

Én egyébként mencoder-t használnék a képekből videó készítésére, tapasztalataim szerint sokkal, de sokkal gyorsabb, mint az ffmpeg, és sokszor jobb tömörítési arányt produkál (ez utóbbi mondjuk nagyban függ a képektől és megadott opcióktól is). http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-enc-images.html

az ffmpeg is tud crossdadinget alapbol (convert nelkul is), a problema a bemenet definialasa, ugyanis fileonkent kell ezt megtenned, ami problematikus

tul nagy parameterlistat kell generalni, elvetetettm

 

az mencoder mogott ha jol emlexem ffmpeg library (is) vannak

 

Ami nekem kellene, egy jo tool, ami kepes encoded mp4-et csinalni, crossfadinggel, kulonosebb megeroltetes nelkul, parametrizalhatoan

az ffmpeg is tud crossdadinget alapbol, a problema a bemenet definialasa, ugyanis fileonkent kell ezt megtenned, ami problematikus tul nagy parameterlistat kell generalni, elvetetettm

Látod, mencoder esetében nem. Ott megadhatod, milyen séma szerint vannak elnevezve a képek és kész. Vagy akár megadhatsz egy text fájlt is, amiben fel vannak sorolva a képek. De szerintem mivel a képkockákat úgyis bashből generálod, egyszerűbb a "frame(képkockasorszám).jpg" fájlnév sémás opciót használni. Valami ilyesmi:

convert slideX.jpg -fill black -colorize 100% frame$[$Y].jpg
convert slideX.jpg -fill black -colorize 75% frame$[$Y+1].jpg
convert slideX.jpg -fill black -colorize 50% frame$[$Y+2].jpg
convert slideX.jpg -fill black -colorize 25% frame$[$Y+3].jpg
ln -s slideX.jpg frame$[$Y+4].jpg
...
ln -s slideX.jpg frame$[$Y+$n].jpg
convert slideX.jpg -fill black -colorize 25% frame$[$Y+$n+1].jpg
convert slideX.jpg -fill black -colorize 50% frame$[$Y+$n+2].jpg
convert slideX.jpg -fill black -colorize 75% frame$[$Y+$n+3].jpg
convert slideX.jpg -fill black -colorize 100% frame$[$Y+$n+4].jpg
X = $[$X + 1]
Y = $[$Y + $n + 4]

Aztán a mencoder parancssorában nem kell felsorolni az összes frameX.jpg fájlt, magától megkeresi és szépen sorbarakja őket. De az ffmpeg is tud ilyent, és a convertnek is megadható fájllista text fájl.

az mencoder mogott ha jol emlexem ffmpeg library vannak

És mégis. Nekem mondjuk általában arra van szükségem, hogy túl nagy felbontású videót leskálázzak 720p-re, de az eddig MINDIG nagyságrendekkel gyorsabb volt mencoder-rel, akármilyen bemenettel is próbáltam. És itt komoly különbségekről beszélek, pl a Minyonokkal az ffmpeg-et 2 és fél óra után lelőttem, mert még mindig futott, míg a mencoder ugyanezzel a fájllal kevesebb, mint fél óra alatt végzett.

Ami nekem kellene, egy jo tool, ami kepes encoded mp4-et csinalni, crossfadinggel, kulonosebb megeroltetes nelkul, parametrizalhatoan

convert. Mindezt tudja; azt nem állítom, hogy egyszerű lesz egyetlen paranssorban mindezt megadni, de lehetséges. Elég komolyan szkriptelhető, de rocketsience. Én tuti a bashes vonalon mennék tovább, hogy évekkel később is hozzá tudjak nyúlni.

Szerkesztve: 2023. 09. 18., h – 17:30

lehet, hogy rosszul értelmezem a kérdésed, de nekem ez működőnek látszik:

ffmpeg -framerate 1/5 -i image-%01d.jpg -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p -r 25 output.mp4

windows-on, ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers, built with gcc 12.2.0 (Rev10, Built by MSYS2 project)-vel próbáltam (a slideshow.bat-ban a % duplázva van, hogy az %-nak legyen értelmezve, de ez téged nem érint, mert Linux-on akarod használni): https://mab.to/dCKrSbANsqBHG

innen: https://shotstack.io/learn/use-ffmpeg-to-convert-images-to-video/ 

most nézem, hogy ez "ugyanaz" mint amit Zahy javasolt, nálam a fenti verziójú ffmpeg ezt mondja az output.mp4-ről:

Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt470bg/unknown/unknown, progressive), 320x180 [SAR 1:1 DAR 16:9], 7 kb/s, 25 fps, 25 tbr, 12800 tbn (default)

és mással (pld. MediaTab, VLC) nézve is 25 fps-es a kimenet, ott van a letölthető output.mp4 is, nézd meg, hogy nálad mi a helyzet...

A framerate kapcsoló az inputfájl UTÁN kell. Ez nagyon fontos ffmpeg-nél, hogy a kapcsolók sorrendje számít, ha az inputfájl előtt van, akkor arra vonatkozik, ha az output előtt, akkor arra. Agyrém, tudom, néha engem is csúnyán megkever, meg frusztrál.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

igen, ez "be szokott" kavarni, de Zahy javaslata is pontosan "ugyanúgy" működik, mint amit "én" írtam, bár én a kérdező eredeti szkriptjéből meghagytam mindent, amit lehetett abból, amit ő írt, és, ha jól láttam, akkor Toma_ is ugyanígy járt el...

Amire te gondolsz az is ott van, csak -r 25 néven :-) Ami az inpufile mögött van, az a következp (input-vagy-output) fájlra vonatkozik. A doksi szerint a -i előtti -framerate 1/5 azért kell, hogy a képeket X ideig mutassa, az outputfile előtti -r 25 pedig a kimeneti framerate beállításához kell.

Nos, valoban jonak tunik ez averzio:

ffmpeg -framerate 1/5 -i img%03d.jpg -r 25 -c:v libx264 -pix_fmt yuv420p output.mp4

Ezt tobben is javasoltak, koszonet nekik.

Ugy latszik, fontos a sorrend, elegge nagy szopodolog ez, a developerek egyertelmu handikeppje! Egyszeru parameter elnevezessel egyszerubb lenne.

Holnap kiprobalom a lejatszon, muxik e?