PNG formátumú videokeretem van 1 FPS-nél, és megpróbálom videofájlokká konvertálni őket az ffmpeg használatával.
Ha ilyesmit csinálok:
ffmpeg -i data/input-%4d.png data/output.mp4
25FPS-en kapok egy videót, ami alapvetően nagyon gyors előre a bemenet (amelyet az 1FPS rögzít).
Ha megpróbálom:
ffmpeg -i data/input-%4d.png -r 1 data/output.mp4
Kapok valamit, amit a VLC nem akar lejátszani 🙂
Most, ha elkészítem az első videót (az FF-et), és szűrőt alkalmazok a lassításhoz (pl. -filter:v "setpts=24.0*PTS"
), rá tudom venni, hogy úgy játsszon, mint egy 1 FPS-es videó, de természetesen az ár fájlméret. Azt hiszem, egy csomó ismétlődő keretet generál.
Tehát a kérdés az, hogy hogyan hozhatok létre egy videót, amelynek pontosan 1 FPS-je van, és valóban ilyen sebességgel játszik? A kimeneti formátum, btw, nem ” t ez számomra fontos.
Megjegyzések
- Nem vagyok biztos abban, hogy iv id = ”
Az eff1fb133c “> elég okos ahhoz, hogy kitalálja a videokodeket csak a tároló formátumú fájlkiterjesztésből,.mp4
. Próbálkozzon a-vcodec libx264 -vpre hq
hozzáadásával a parancssorba, hogy elmondja neki a kodeket és a kódolási paramétereket.
-r 1
elemet. Válasz
Ha egy egyvonalasat szeretne az FFMPEG-hez, amely másodpercenként 1 képkocka sebességgel lejátszott videót állít elő, akkor azt kell tennie, hogy a bemeneti és a kimeneti képkockákat is meg kell határoznia:
ffmpeg -r 1 -i data / input-% 4d.png -pix_fmt yuv420p -r 10 data / output.mp4
A -r 1
azt jelenti, hogy a videó másodpercenként az eredeti képek egyikével fog lejátszani.
A -r 10
azt jelenti, hogy a videó másodpercenként 10 képkockával fog lejátszani.
(A -pix_fmt yuv420p
csak azért van, hogy biztosítsa a kompatibilitást a lejátszási programok széles skálájával. Szükség van itt például arra, hogy a videót a Windows Media Player játssza le.)
Sokféle kimeneti képkockát teszteltem, és a 10 tűnik a legalacsonyabb számnak, amelyet használhat, és így is videó, amelyet a VLC fog lejátszani.
Természetesen a fenti parancs azt jelenti, hogy minden eredeti képet szaporítanak, de ez egyszerűbb módszer, mint az általad említett “lassítás”, és a kodektől függően lehet, hogy nem készít sokkal nagyobb videót, mint egy igazi 1-FPS videó.
Ennek tesztelésére most készítettem egy igazi 1-FPS videót, amely 2,24 kiB-ra került. Ezután készítettem egy videót ugyanazokkal a bemeneti képekkel, de 24 FPS sebességgel, és 5,76 kiB-ra sikerült. Ez alig több mint kétszerese, és közel sem 24-szerese. 🙂
Megjegyzések
- +1 a -pix_fmt oldalon. Könnyű felejtsd el, hogy egyesek ragaszkodnak a WMP használatához 🙂
- miért akarod, hogy a kimeneti formátum 10 fps legyen, miközben a bemenet csak 1? Nem ‘ hozzon létre 90% -ban redundáns képkockákat, amelyek teljesen megegyeznek?
- @Herbert felesleges képkockákat hoz létre, így akár 10 képkockasebességet is elérhet, ami csak azért történik, hogy a VLC ne ‘ t nem panaszkodnak , és vizuálisan nem változtatja meg a videót. A kódoló elég okos ahhoz, hogy lássa, hogy a keretek mind azonosak, tehát nem ‘ nem lesz sokkal nagyobb fájl
- @chiliNUT clear, a kulcsképes dolog, amit nem minden formátum, de a legtöbb értelmes formátum megtesz. Köszönöm !
Válasz
Mindkét -framerate
és -r
Például, hogy legyen egy utolsó videó, amely 1FPS-nek tűnik:
ffmpeg -framerate 1 -pattern_type glob -i "*.png" \ -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Ez hasonló ahhoz, mint PNG-keretek videóvá konvertálása 1 FPS-en | Unix & Linux Stack Exchange mondja, de nekem -r
div helyett -framerate
kellett >, hogy működjön.
Ezt megemlíti a wiki: http://trac.ffmpeg.org/wiki/Slideshow#Framerates
A kimeneti képkockasebességet 30
értékre állítja, amelyet a VLC képes kezelni, és 30-szor másolja az egyes képeket, úgy, hogy a kimeneti videó 1 FPS-en legyen. Lásd még: Lejátszási problémák VLC-ben, alacsony kép / mp-es videókkal az ffmpeg | Verem túlcsordulás
A VLC ekkor képes normálisan lejátszani a videót.
Ubuntu 16.10, VLC 2.2.4, ffmpeg
3.0.5, 10 PNG-t tartalmazó könyvtárban.
megjegyzések
- Mi ‘ különbség
-r
és-framerate
? - @Royi nem igazán tudom ‘, csakhogy ez az egyetlen dolog, ami nekem bevált 🙂 De ha sikerült vonja ki a
man
oldalakról, tudassa velem 😉 Egy értelmes idézet a ” -r bemeneti opcióként hagyjon figyelmen kívül minden az időbélyegek a fájlban tárolódnak, és ehelyett az időbélyegeket generálják, állandó képsebességű fps-t feltételezve. Ez nem ugyanaz, mint a -framerate opció, amelyet egyes bemeneti formátumoknál, például az image2 vagy a v4l2 esetében használnak (az FFmpeg régebbi verzióiban régen ugyanaz volt). Ha kétségei vannak, használja a -framerate parancsot az -r beviteli opció helyett. ”
Válasz
Mi van, ha a második példát kissé az alábbiak szerint bővíti:
$ ffmpeg -r 1 -i data/input-%4d.png -c:v libx264 out.mp4
A -r 1
a .png fájlok elé kell kerülnie, nem utánuk.
Általános szabály, hogy a beállítások a következő megadott fájlra vonatkoznak. Ezért fontos a sorrend, és többször is megadhatja ugyanazt az opciót a parancssorban. Ezután minden előfordulást alkalmazunk a következő bemeneti vagy kimeneti fájlra.
Megjegyzések
- Sajnos ez nem működik. Azonban annak megemlítése, hogy a megrendelés fontos , rengeteg időt megspórolt. Köszönöm.
Válasz
Ez egy hiba a VLC-ben (amely még mindig létezik a 3.0.6 verzióban). Néhány kísérlet után rájöttem, hogy a VLC összeomlik azoknál a videóknál, amelyek FPS-je kevesebb, mint 10 . Tehát az összes 10 vagy több képsebességű videofájl nem okozhat problémát. Tehát jelenleg nincs tiszta módja annak, hogy 1 FPS-sel rendelkező videót készítsünk, amely VLC-ben lejátszható ( ne “t” add fel, olvasd tovább ).
Az egyik megoldás – amint a fenti válasz mutatja – az 1 FPS hatásának meghamisításához a képek másolásával (amikor valójában egy FPS van, amely legalább 10, ami VLC esetén rendben van).
Példa: ha van egy mappád 12 képpel, és 1 FPS-sel szeretnéd létrehozni a videót (ami VLC-ben is lejátszható), akkor minden képet többször meg kell másolnod (mondjuk 10-szer), majd mondd el Az FFMPEG egy 10 FPS felbontású videó előállításához. Ily módon egy olyan videót kapunk, amelynek teljes képkocka értéke 120, ahol az egyes képeket 1 másodpercig játsszák (mivel 10-szer másolják), ami egyszerűen hamis 1 FPS-re.
Inkább a fps
paramétert használom a
(amelyet egy másik válasz mutat be), amely bizonyos esetekben problematikus lehet (a hivatalos dokumentáció ).
ffmpeg -framerate 1 -i "img (%d).jpg" -c:v libvpx-vp9 -vf "fps=10,format=yuv420p" out.mkv
Mivel a bemenet -framerate
alacsonyabb, mint a kimenet fps
, az FFMPEG duplikálja a képkockákat, hogy elérje a kívánt kimeneti képkockasebességet (ami a fenti parancs szerint 10).
Ez is fontos észrevenni , hogy -framerate
és a -vf fps
fontos , mivel ezt a konfigurációt alkalmazzuk a következő videóra (bemenetre vagy kimenetre). Ez a hivatalos dokumentumok szerint:
beállításokat alkalmazunk a következő megadottakra fájl. Ezért fontos a sorrend …