Jeg har ingen kunnskap om videokoding, jeg har et program skrevet i OpenGL og jeg Jeg lagrer bildene det genererte i png
bilder. Bildene fra appen min er på 7 FPS, og jeg prøver å lage en video fra disse.
Til det formålet bruker jeg ffmpeg som dette
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
som ble tatt fra dette nettstedet , men jeg lurte på om det er mulig å ha en video som viser animasjonen ved 30 FPS?
Kommentarer
Svar
Jeg bruker koden nedenfor for å gjøre det samme.
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4
Bryte ned kommandoen:
ffmpeg <- call ffmpeg -framerate 30 <- set the input framerate to 30 -i img%03d.png <- read PNG images with filename img001, img002, img003, etc.. img can be changed to another prefix %03d can be changed to %04d for 0001, %05d for 00001 formats, etc... -c:v libx264 <- Set the codec to libx264 -pix_fmt yuv420p <- Set the pixel format to planar YUV 4:2:0, 12bpp -crf 23 <- set the Constant Rate Factor to 23 (default value) -output.mp4 <- the output filename
Dette leser inngangen ved 30 fps (-framerate 30
alternativ) og koder den ved hjelp av libx264
kodeken med konstant hastighetsfaktor på 23 (-crf 23
alternativ).
Svar
Det er to bildefrekvenser å ta i betraktning: inngang og utgang.
Som standard er inngangsfrekvens 25 , og utgangen vil bruke samme bildefrekvens som inngangen, med mindre du sier noe annet.
Samme bildefrekvens for inngang og utgang
Hvis du vil legge inn og -utgang for å ha samme bildefrekvens, så er det bare å gi inngangsfrekvens. Dette eksemplet vil sette en bildefrekvens på 30000/1001 (NTSC-video):
ffmpeg -framerate 30000/1001 -i input output.mp4
-
Alternativt, i dette eksemplet, kan du bruke
ntsc
i stedet for30000/1001
, men ikke bruk29.97
fordi det ikke er nøyaktig eller korrekt. Se andre aliaser for bildefrekvens . -
Fordi standard innrammefrekvens er 25, og hvis du bare angi en utgangshastighetsfrekvens, så vil rammer bli droppet eller duplisert for å kompensere. Det er derfor inngangsrammehastigheten er satt i denne situasjonen.
Ulike bildefrekvens for inngang og utdata
Noen ganger kan det hende du vil at bildefrekvens for inngang og utgangsfrekvens skal være forskjellig. For eksempel kan det være lurt å legge inn bildene med en bestemt hastighet, og deretter duplisere eller slippe bilder, slik at utgangen har en annen bildefrekvens. Det kan være lurt å gjøre dette på grunn av kompatibilitetsproblemer med utdataformatbeholderen, spilleren og / eller enheten din:
-
I dette eksemplet dupliseres rammer for å gå fra 10 til 25. Konsollutgangen vil fortelle deg om rammer blir droppet eller duplisert.
-
demuxer for bildefiler bruker
-framerate
, mens utgangshastigheten er angitt ved hjelp av-r
. -
Det kan hende du må legge til alternativet
-pix_fmt yuv420p
i noen omstendigheter hvis du sender ut H.264-video (ffmpeg
konsollutgangen vil advare deg hvis du trenger det). Dette vil bruke en chroma-undersamplingsordning som er kompatibel med alle spillere.
Kommentarer
- ffmpeg versjon 3.2.2 forteller meg:
Option framerate not found.
🙁 - Ja, du har rett. Men allikevel eksisterer ikke alternativet
-framerate
Jeg vil slette kommentaren min, da den egentlig ikke har noe å gjøre med å konvertere en serie bilder til en video med en viss framerate. - @erik
-framerate
eksisterer. Den ' brukes av bildet og rawvideo-demuxere og noen inngangsenheter som x11grab og v4l2. - Hvor er alternativet
-framerate
dokumentert? Jeg ' har lestman ffmpeg
siden, men jeg kunne ikke ' t finner den. Enhver peker, kanskje? - OK, fant den …
FFMPEG-DEVICES(1)
.
Svar
ffmpeg -framerate 30 -i img%03d.png output.mp4
vil være tilstrekkelig i slutten t versjon av ffmpeg.
Kommentarer
- Ikke glem
-pix_fmt yuv420p
eller du kan ende opp med filer at mange programvareverktøy ikke liker ' t: trac.ffmpeg.org/ticket/8856
Svar
Du snakker om videointerpolering. Det er ingen måte for 7 bilder per sekund å bli 30 bilder per sekund uten videointerpolasjon … I utgangspunktet vil du få 30 bilder per sekund fra begynnelsen, i ferd med å lage videoer … Da videointerpolering vil ta mange ressurser og tid, og det kan fylles med gjenstander.Jeg hørte at du kan lage et enkeltbilde til korte filmer, med Adobe, men mye manuelt arbeid der …
-framerate
-parameteren for å få de ønskede resultatene.