Minulla on PNG-muotoisia videokehyksiä nopeudella 1 FPS ja yritän muuntaa ne videoiksi ffmpeg-toiminnolla.

Jos teen jotain tällaista:

ffmpeg -i data/input-%4d.png data/output.mp4

Saan videon nopeudella 25 FPS, joka on periaatteessa erittäin nopeasti eteenpäin syötettä (joka siepataan nopeudella 1 FPS).

Jos yritän:

ffmpeg -i data/input-%4d.png -r 1 data/output.mp4

Saan jotain, jota VLC ei halua toistaa 🙂

Jos otan ensimmäisen videon (FF-videon) ja käytän suodatinta hidastamaan sitä (esim. -filter:v "setpts=24.0*PTS"), saan sen toistamaan kuin yksi FPS-video, mutta hinta on tietysti tiedostokoko. Luulen, että se tuottaa joukon toistuvia kehyksiä.

Kysymys kuuluu, miten voin luoda videon, jolla on täsmälleen yksi FPS ja joka tosiasiallisesti toistetaan tällä nopeudella? Tulostusmuoto, btw, ei ole ” t, mikä on minulle tärkeä.

Kommentit

  • En ’ en ole varma ffmpeg on tarpeeksi älykäs selvittämään videokoodekki vain säilön muotoisesta tiedostotunnisteesta .mp4. Yritä lisätä -vcodec libx264 -vpre hq komentoriville, kertoa sille koodekki ja koodausparametrit.
  • Se tajusi sen oikein, ja kuten mainitsin, se toimi hyvin ja tuotti vain outoja tuloksia, kun lisäsin -r 1.
  • Luulen, että sinulla saattaa olla parempi onnea ffmpeg-vastauksessa osoitteessa stackoverflow.com tai superkäyttäjä.com .

Vastaa

Jos haluat yhden linjan FFMPEG: lle, joka luo videon, joka toistetaan 1 ruutu sekunnissa, sinun on määritettävä kehysnopeudet sekä tulolle että ulostulolle, kuten tämä:

ffmpeg -r 1 -i data / input-% 4d.png -pix_fmt yuv420p -r 10 data / output.mp4

-r 1 tarkoittaa, että videota toistetaan yhdellä alkuperäisestä kuvasta sekunnissa.
-r 10 tarkoittaa, että videota toistetaan 10 kuvaa sekunnissa.

(-pix_fmt yuv420p on vain varmistamassa yhteensopivuus monien toisto-ohjelmien kanssa. Esimerkiksi tässä vaaditaan, jotta video voidaan toistaa Windows Media Playerilla.)

Testasin monia erilaisia ulostulokehyksiä, ja 10 näyttää olevan pienin käytettävä luku, joka tuottaa edelleen video, jonka VLC toistaa.

Yllä oleva komento tarkoittaa tietysti sitä, että jokaista alkuperäistä kuvaa kerrotaan, mutta se on yksinkertaisempi menetelmä kuin mainitsemasi ”hidasta sitä” -tekniikka, ja koodekista riippuen ei ehkä tuota videota paljon suurempaa kuin aito 1-FPS-video.

Tämän testaamiseksi tuotin juuri oikean 1-FPS-videon, jonka arvo oli 2,24 kiB. Sitten tuotin videon, jolla oli samat tulokuvat, mutta lähtö 24 kuvaa sekunnissa, ja sen tulos oli 5,76 kiB. Se on hieman yli kaksinkertainen koko, eikä läheskään 24 kertaa suurempi. 🙂

Kommentit

  • +1 -pix_fmt: ssä. Helppo unohda, että jotkut ihmiset vaativat WMP: n käyttöä 🙂
  • miksi haluat, että tulostusmuoto on 10 kuvaa sekunnissa, kun tulo on vain 1? Eikö se ole ’ t luoda 90% tarpeettomia kehyksiä, jotka ovat täsmälleen samat?
  • @Herbert luo tarpeettomat kehykset, jotta saat kehysnopeuden jopa 10, mikä tehdään vain niin, että VLC ei tee ’ ei valittaa , eikä se visuaalisesti muuta ’ videota. Kooderi on tarpeeksi älykäs nähdäksesi, että kehykset ovat kaikki identtisiä, joten et ’ pääse paljon suurempaan tiedostoon
  • @chiliNUT clear, avainkehys, jota kaikki muodot, mutta useimmat järkevät muodot, tekevät. Kiitos !

Vastaa

Käytä molempia -framerate ja -r

Esimerkiksi, jos haluat lopullisen videon, joka näyttää olevan 1FPS:

ffmpeg -framerate 1 -pattern_type glob -i "*.png" \ -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4 

Tämä on samanlainen kuin PNG-kehysten muuntaminen videoiksi nopeudella 1 FPS | Unix & Linux Stack Exchange sanoo, mutta tarvitsin -framerate -r toimiakseen.

Tämä mainitaan wikissä osoitteessa: http://trac.ffmpeg.org/wiki/Slideshow#Framerates

Se asettaa ulostulokehyksen arvoksi 30, jota VLC pystyy käsittelemään, ja kopioi jokaisen kuvan 30 kertaa niin, että lähtevän kuvan nopeus näyttää olevan 1 kuvaa sekunnissa. Katso myös: Toisto-ongelmat VLC: ssä, kun videoiden fps-arvo on alhainen fps | Pinon ylivuoto

VLC pystyy sitten toistamaan videon normaalisti.

Testattu Ubuntu 16.10, VLC 2.2.4, ffmpeg 3.0.5, hakemistossa, jossa on 10 PNG: tä.

Katso myös: https://stackoverflow.com/questions/19267443/vlc-freezes-for-low-1-fps-video-created-from-images-with-ffmpeg

kommentit

  • Mikä ’ erottaa -r ja -framerate?
  • @Royi En todellakaan tiedä ’, paitsi että se on ainoa asia, joka toimi minulle 🙂 Mutta jos onnistuit poimi se man -sivuilta, kerro minulle 😉 Merkityksellinen lainaus on ” -r Ohita syöttövaihtoehtona kaikki tiedostoon tallennetut aikaleimat ja sen sijaan synnyttävät aikaleimat olettaen vakionopeuden fps. Tämä ei ole sama kuin -framerate -vaihtoehto, jota käytetään joissakin tulomuodoissa, kuten image2 tai v4l2 (se oli sama FFmpegin vanhemmissa versioissa). Jos olet epävarma, käytä -framerate syöttöasetuksen -r sijasta. ”

Vastaa

Entä jos täydennät toista esimerkkiä hieman seuraavasti:

$ ffmpeg -r 1 -i data/input-%4d.png -c:v libx264 out.mp4 

-r 1 täytyy tulla ennen .png-tiedostoja, ei niiden jälkeen.

FFmpeg-ohjeista :

Yleensä asetuksia käytetään seuraavaan määritettyyn tiedostoon. Siksi järjestys on tärkeä, ja sinulla voi olla sama vaihtoehto komentorivillä useita kertoja. Jokainen esiintymä lisätään sitten seuraavaan tulo- tai lähtötiedostoon.

Kommentit

  • Valitettavasti tämä ei toimi. Mainitsen, että tilaus on tärkeä , säästin kuitenkin paljon aikaa. Kiitos.

Vastaa

Tämä on vika VLC: ssä (joka on edelleen versiossa 3.0.6). Joidenkin kokeiden jälkeen tajusin, että VLC kaatuu videoille, joiden FPS on alle 10 . Joten kaikki videot, joissa on vähintään 10 FPS, eivät saisi olla ongelma. Joten tällä hetkellä ei ole puhdasta tapaa saada 1 FPS: n video, joka on toistettavissa VLC: ssä ( don ”t anna periksi, jatka lukemista ).

Yksi kiertotapa on – kuten yllä olevassa vastauksessa on esitetty – 1 FPS: n vaikutuksen väärentämiseksi kopioimalla kuvia (kun FPS on tosiasiallisesti vähintään 10, mikä on ok VLC: lle).

Esimerkki: jos sinulla on kansio, jossa on 12 kuvaa, ja haluat luoda videon yhdellä FPS: llä (joka on toistettavissa VLC: ssä), sinun on kopioitava jokainen kuva useita kertoja (sanotaan 10 kertaa) ja kerrot sitten FFMPEG 10 FPS -videon luomiseksi. Tällä tavoin saamme videon, jonka kehykset ovat yhteensä 120, jossa jokaista kuvaa toistetaan 1 sekunnin ajan (koska sitä kopioidaan 10 kertaa), mikä on yksinkertaisesti väärennös yhdelle FPS: lle.

Mieluummin käyttää parametria fps parametrin

(joka näkyy toisessa vastauksessa), joka voi joissain tapauksissa olla ongelmallista ( virallinen dokumentaatio ).

ffmpeg -framerate 1 -i "img (%d).jpg" -c:v libvpx-vp9 -vf "fps=10,format=yuv420p" out.mkv 

Koska syöte -framerate on pienempi kuin lähtö fps, FFMPEG kopioi kehyksiä halutun tulostuskehysnopeuden saavuttamiseksi (joka on 10 yllä olevan komennon mukaan).

Se on myös tärkeää huomata että -framerate ja -vf fps on tärkeä , koska tätä kokoonpanoa sovelletaan seuraavaan videoon (sisään- tai ulostuloon). Tämä on virallisten asiakirjojen mukaan:

vaihtoehtoja käytetään seuraavaan määritettyyn tiedosto. Siksi järjestys on tärkeää …

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *