Jag har ingen kunskap om videokodning, jag har en applikation skriven i OpenGL och jag Jag sparar ramarna som genererades i png
bilder. Ramarna från min app är vid 7 FPS och jag försöker skapa en video från dessa.
För det ändamålet använder jag ffmpeg så här
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
som togs från den här webbplatsen , men jag undrade om det är möjligt att ha en video som visar animationen vid 30 FPS?
Kommentarer
Svar
Jag använder koden nedan för att göra samma sak.
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4
Bryta ner kommandot:
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
Detta läser inmatningen vid 30 fps (-framerate 30
option) och kodar den med libx264
codec med konstant hastighetsfaktor på 23 (-crf 23
alternativ).
Svar
Det finns två bildhastigheter att beakta: ingången och utgången.
Som standard är ingångshastigheten 25 , och utgången använder samma bildhastighet som ingången såvida du inte säger något annat.
Samma bildhastighet för in- och utdata
Om du vill mata in och för att ha samma bildhastighet, ange sedan bara ingångsramhastigheten. Detta exempel ställer in en bildfrekvens på 30000/1001 (NTSC-video):
ffmpeg -framerate 30000/1001 -i input output.mp4
-
Alternativt kan du i det här exemplet använda
ntsc
istället för30000/1001
, men använd inte29.97
eftersom det inte är korrekt eller korrekt. Se andra bildfrekvensalias . -
Eftersom standardinmatningsramfrekvensen är 25, och om du bara ställa in en utmatningsfrekvens, då kommer ramar att tappas eller dupliceras för att kompensera. Det är därför som inmatningsramhastigheten ställs in i denna situation.
Olika bildfrekvenser för inmatning och utdata
Ibland kanske du vill att inmatningsramhastigheten och utmatningsramhastigheten skiljer sig åt. Du kan till exempel ange ramarna med en viss hastighet och sedan duplicera eller släppa ramar så att utmatningen har en olika bildhastigheter. Du kanske vill göra detta på grund av kompatibilitetsproblem med behållaren för utdataformat, din spelare och / eller din enhet:
-
I det här exemplet dupliceras ramar för att gå från 10 till 25. Konsolutgången berättar om ramar tappas eller dupliceras.
-
demuxer för bildfiler använder
-framerate
medan bildutmatningshastigheten ställs in med-r
. -
Du kan behöva lägga till alternativet
-pix_fmt yuv420p
i vissa omständigheter om du ”matar ut H.264-video (ffmpeg
konsolutgången varnar dig om du behöver). Detta använder ett schema för delprovtagning som är kompatibelt med alla spelare.
Kommentarer
- ffmpeg version 3.2.2 säger till mig:
Option framerate not found.
🙁 - Ja, du har rätt. Men ändå finns alternativet
-framerate
inte Jag kommer att ta bort min kommentar, eftersom det egentligen inte har något att göra med att konvertera en serie bilder till en video med en viss bildruta. - @erik
-framerate
finns. Den ' används av bilden och rawvideo-demuxers och vissa inmatningsenheter som x11grab och v4l2. - Var är alternativet
-framerate
dokumenterad? Jag ' har lästman ffmpeg
sidan, men jag kunde inte ' hittar inte det. Någon pekare, kanske? - OK, hittade den …
FFMPEG-DEVICES(1)
.
Svar
ffmpeg -framerate 30 -i img%03d.png output.mp4
räcker i slutet t version av ffmpeg.
Kommentarer
- Glöm inte
-pix_fmt yuv420p
eller så kanske du får filer att många programverktyg inte gillar ' t: trac.ffmpeg.org/ticket/8856
Svar
Du pratar om videointerpolering. Det finns inget sätt för 7 bilder per sekund att bli 30 bilder per sekund utan videointerpolation … I grund och botten vill du få 30 bilder per sekund från början, i färd med att skapa videor … Eftersom videointerpolering tar mycket resurser och tid, och det kan fylls med artefakter.Jag hörde att du kan göra en enstaka bild till kortfilmer, med adobe, men mycket manuellt arbete där …
-framerate
-parametern för att få önskat resultat.