O kódování videa vůbec nevím, mám aplikaci napsanou v OpenGL a já ukládám snímky, které vygeneroval, do png
obrázků. Rámečky z mé aplikace jsou na 7 FPS a snažím se z nich vytvořit video.
Za tímto účelem používám takto ffmpeg
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
který byl převzat z tohoto webu , ale zajímalo by mě, jestli je možné mít video, které ukazuje animaci při 30 FPS?
Komentáře
Odpověď
K tomu samému používám níže uvedený kód.
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4
Rozdělení příkazu:
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
Tím se přečte vstup při 30 fps (-framerate 30
možnost) a kóduje jej pomocí libx264
kodeku s faktorem konstantní rychlosti 23 (-crf 23
možnost).
Odpověď
Je třeba vzít v úvahu dvě snímkové frekvence: vstup a výstup.
Ve výchozím nastavení je vstupní snímková frekvence 25 , a výstup bude používat stejný počet snímků za sekundu jako vstup, pokud to neurčíte jinak.
Stejný počet snímků za sekundu pro vstup a výstup
Pokud chcete zadat a výstup pro stejnou snímkovou frekvenci, pak stačí zadat vstupní snímkovou frekvenci. Tento příklad nastaví snímkovou frekvenci 30000/1001 (video NTSC):
ffmpeg -framerate 30000/1001 -i input output.mp4
-
Alternativně v tomto příkladu můžete použít
ntsc
místo30000/1001
, ale nepoužívejte29.97
, protože to není přesné nebo správně. Viz další aliasy snímkové frekvence . -
Protože výchozí vstupní snímková frekvence je 25, a pokud nastavte pouze výstupní snímkovou frekvenci, pak se snímky za účelem kompenzace vypustí nebo duplikují. Proto je v této situaci nastavena vstupní snímková frekvence.
Různá snímková frekvence pro vstup a výstup
Někdy můžete chtít, aby se vstupní kmitočet snímků a výstupní kmitočet snímků lišily. Můžete například chtít zadat snímky s určitou rychlostí a poté snímky duplikovat nebo zrušit, aby měl výstup jinou snímkovou frekvenci. Možná to budete chtít udělat kvůli problémům s kompatibilitou s kontejnerem výstupního formátu, přehrávačem nebo zařízením:
-
V tomto příkladu budou snímky duplikovány tak, aby jdou od 10 do 25. Výstup z konzoly vám řekne, zda jsou snímky vynechány nebo duplikovány.
-
demuxer obrazových souborů používá
-framerate
, zatímco výstupní snímková frekvence se nastavuje pomocí-r
. -
Možná budete muset přidat možnost
-pix_fmt yuv420p
do za určitých okolností, pokud znovu vydáváte video H.264 (výstup konzolyffmpeg
vás upozorní, pokud to budete potřebovat). Použije se schéma podvzorkování chroma, které je kompatibilní se všemi hráči.
Komentáře
- ffmpeg verze 3.2.2 říká mi:
Option framerate not found.
🙁 - Ano, máš pravdu. Ale možnost
-framerate
neexistuje Už svůj komentář smažu, protože to opravdu nemá nic společného s převodem řady obrázků na video s určitou snímkovou rychlostí. - @erik
-framerate
neexistuje. ' Používá jej demuxery obrazu a rawvideo a některá vstupní zařízení, jako jsou x11grab a v4l2. - Kde je možnost
-framerate
dokumentováno? Přečetl jsem ' stránkuman ffmpeg
, ale nemohl jsem ' nenajdete ho. Možná nějaký ukazatel? - Dobře, našel jsem ho …
FFMPEG-DEVICES(1)
.
Odpověď
ffmpeg -framerate 30 -i img%03d.png output.mp4
bude v laté stačit Verze ffmpeg.
Komentáře
- Nezapomeňte na
-pix_fmt yuv420p
, jinak můžete skončit se soubory že mnoho softwarových nástrojů se ' nelíbí: trac.ffmpeg.org/ticket/8856
Odpověď
Mluvíte o video interpolaci. Neexistuje způsob, jak by se ze 7 snímků za sekundu stalo 30 snímků za sekundu bez video interpolace … V zásadě chcete získat 30 snímků za sekundu od začátku, v procesu vytváření videí … Protože video interpolace bude vyžadovat spoustu zdrojů a času a může být naplněn artefakty.Slyšel jsem, že můžete udělat jeden snímek do krátkých filmů s Adobe, ale je tam spousta manuální práce …
-framerate
.