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 hqhozzáadásával a parancssorba, hogy elmondja neki a kodeket és a kódolási paramétereket.

  • Valójában rendben találta ki, és ahogy említettem, jól működött, és csak furcsa eredményeket produkált, amikor hozzáadtam a -r 1 elemet.
  • Azt hiszem, jobb szerencséd lehet egy ffmpeg válasznál a stackoverflow.com vagy superuser.com .
  • 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.

    Lásd még: https://stackoverflow.com/questions/19267443/vlc-freezes-for-low-1-fps-video-created-from-images-with-ffmpeg

    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.

    Az FFmpeg dokumentációból :

    Á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 …

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük