Ik heb geen enkele kennis van videocodering, ik heb een applicatie geschreven in OpenGL en ik bewaar de gegenereerde frames in png
afbeeldingen. De frames van mijn app zijn 7 FPS en ik probeer daar een video van te maken.
Voor dat doel gebruik ik ffmpeg op deze manier
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
die van deze site is gehaald, maar ik vroeg me af of het mogelijk is om een video te maken die de animatie laat zien bij 30 FPS?
Reacties
Antwoord
Ik “gebruik de onderstaande code om hetzelfde te doen.
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4
De opdracht opsplitsen:
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
Dit leest de invoer met 30 fps (de -framerate 30
optie) en codeert deze met de libx264
codec met constante-snelheidsfactor van 23 (de -crf 23
optie).
Answer
Er zijn twee framesnelheden om te overwegen: de invoer en de uitvoer.
Standaard is de invoerframesnelheid 25 , en de uitvoer zal dezelfde framesnelheid gebruiken als de invoer, tenzij je het anders vertelt.
Dezelfde framesnelheid voor invoer en uitvoer
Als je en output om dezelfde frame rate te hebben, geef dan gewoon de input frame rate op. In dit voorbeeld wordt een framesnelheid van 30000/1001 (NTSC-video) ingesteld:
ffmpeg -framerate 30000/1001 -i input output.mp4
-
Als alternatief kunt u in dit voorbeeld
ntsc
in plaats van30000/1001
, maar gebruik29.97
niet omdat dat niet juist is of correct. Zie andere frame rate aliassen . -
Omdat de standaard input frame rate 25 is, en als je stel alleen een outputframesnelheid in, dan worden frames verwijderd of gedupliceerd om dit te compenseren. Daarom wordt de inputframesnelheid in deze situatie ingesteld.
Verschillende framesnelheid voor invoer en uitvoer
Soms wilt u misschien dat de invoerframesnelheid en de uitvoerframesnelheid verschillen. U wilt bijvoorbeeld de frames met een bepaalde snelheid invoeren en vervolgens frames dupliceren of verwijderen, zodat de uitvoer een verschillende framesnelheid. Misschien wilt u dit doen vanwege compatibiliteitsproblemen met uw uitvoerformaatcontainer, uw speler en / of uw apparaat:
-
In dit voorbeeld zullen frames worden gedupliceerd om van 10 naar 25 te gaan. De console-uitvoer zal je vertellen of er frames worden verwijderd of gedupliceerd.
-
De demuxer voor afbeeldingsbestanden gebruikt
-framerate
, terwijl de outputframesnelheid wordt ingesteld met-r
. -
Mogelijk moet u de optie
-pix_fmt yuv420p
toevoegen aan sommige omstandigheden als je “H.264-video uitvoert (deffmpeg
console-uitvoer zal je waarschuwen als dat nodig is). Dit zal een chroma-subsampling-schema gebruiken dat compatibel is met alle spelers.
Reacties
- ffmpeg versie 3.2.2 vertelt me:
Option framerate not found.
🙁 - Ja, je hebt gelijk. Maar toch bestaat de optie
-framerate
niet meer. Ik zal mijn opmerking verwijderen, omdat deze niets te maken heeft met het converteren van een reeks afbeeldingen naar een video met een bepaalde framerate. - @erik
-framerate
bestaat. Het ' wordt gebruikt door de image- en rawvideo-demuxers en sommige invoerapparaten zoals x11grab en v4l2. - Waar is de optie
-framerate
gedocumenteerd? Ik ' heb deman ffmpeg
pagina gelezen, maar ik kon niet ' kan het niet vinden. Een aanwijzer misschien? - OK, vond het …
FFMPEG-DEVICES(1)
.
Answer
ffmpeg -framerate 30 -i img%03d.png output.mp4
zal voldoende zijn in de laatste tijd t-versie van ffmpeg.
Reacties
- Vergeet de
-pix_fmt yuv420p
niet, anders krijg je mogelijk bestanden dat veel softwaretools ' niet leuk vinden: trac.ffmpeg.org/ticket/8856
Answer
Je hebt het over video-interpolatie. Er is geen manier waarop 7 fps 30 fps wordt zonder video-interpolatie … In principe wil je vanaf het begin 30 fps krijgen tijdens het maken van videos … Omdat video-interpolatie veel middelen en tijd in beslag neemt, en het kan worden gevuld met artefacten.Ik heb gehoord dat je van een enkele opname een korte film kunt maken, met Adobe, maar veel handmatig werk daar …
-framerate
aan om de gewenste resultaten te krijgen.