Non ho alcuna conoscenza della codifica video, ho unapplicazione scritta in OpenGL e io Sto salvando i frame che ha generato nelle immagini png
. I frame della mia app sono a 7 FPS e sto cercando di creare un video da quelli.
A tale scopo utilizzo ffmpeg in questo modo
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
che è stato preso da questo sito , tuttavia mi chiedevo se sia possibile avere un video che mostri lanimazione a 30 FPS?
Commenti
Risposta
Sto usando il codice seguente per fare la stessa cosa.
ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4
Suddivisione del comando:
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
Questo legge linput a 30 fps (il -framerate 30
opzione) e lo codifica utilizzando il libx264
codec con fattore di velocità costante di 23 (il -crf 23
opzione).
Risposta
Ci sono due frame rate da considerare: linput e loutput.
Per impostazione predefinita, il frame rate in input è 25 e loutput utilizzerà la stessa frequenza di fotogrammi dellinput a meno che tu non dica diversamente.
Stessa frequenza di fotogrammi per input e output
Se desideri inserire e output per avere lo stesso frame rate, quindi fornire solo il frame rate di input. Questo esempio imposterà una frequenza fotogrammi di 30000/1001 (video NTSC):
ffmpeg -framerate 30000/1001 -i input output.mp4
-
In alternativa, in questo esempio, potresti usare
ntsc
invece di30000/1001
, ma non utilizzare29.97
perché non è preciso o corretto. Vedi altri alias frequenza fotogrammi . -
Poiché la frequenza fotogrammi di input predefinita è 25 e se imposta solo una frequenza fotogrammi di output, quindi i fotogrammi verranno eliminati o duplicati per compensare. Ecco perché la frequenza fotogrammi di input è impostata in questa situazione.
Frequenza fotogrammi diversa per linput e output
A volte potresti volere che la frequenza dei fotogrammi in ingresso e in uscita siano diverse. Ad esempio, potresti voler inserire i fotogrammi a una certa velocità, quindi duplicare o eliminare i fotogrammi in modo che loutput abbia un frame rate diverso. Puoi farlo a causa di problemi di compatibilità con il contenitore del formato di output, il tuo lettore e / o il tuo dispositivo:
-
In questo esempio i frame verranno duplicati per passare da 10 a 25. Loutput della console indicherà se i frame vengono eliminati o duplicati.
-
Il file immagine demuxer utilizza
-framerate
, mentre la frequenza fotogrammi di output viene impostato utilizzando-r
. -
Potrebbe essere necessario aggiungere lopzione
-pix_fmt yuv420p
in alcune circostanze se “stai riproducendo video H.264 (loutput della consoleffmpeg
ti avviserà se necessario). Questo utilizzerà uno schema di sottocampionamento della crominanza compatibile con tutti i lettori.
Commenti
- ffmpeg versione 3.2.2 mi dice:
Option framerate not found.
🙁 - Sì, hai ragione. Tuttavia lopzione
-framerate
non esiste Eliminerò il mio commento, poiché in realtà non ha nulla a che fare con la conversione di una serie di immagini in un video con un certo framerate. - @erik
-framerate
esiste. ' è utilizzato dai demuxer di immagini e rawvideo e da alcuni dispositivi di input come x11grab e v4l2. - Dovè lopzione
-framerate
documentato? ' ho letto la paginaman ffmpeg
, ma non ho potuto ' Non trovarlo. Forse un puntatore? - OK, lho trovato …
FFMPEG-DEVICES(1)
.
Risposta
ffmpeg -framerate 30 -i img%03d.png output.mp4
sarà sufficiente negli ultimi tempi t di ffmpeg.
Commenti
- Non dimenticare
-pix_fmt yuv420p
o potresti ritrovarti con dei file a molti strumenti software ' non piace: trac.ffmpeg.org/ticket/8856
Risposta
Stai parlando di interpolazione video. Non cè modo che 7 fps diventino 30 fps senza interpolazione video … Fondamentalmente vuoi ottenere 30 fps dallinizio, nel processo di creazione dei video … Poiché linterpolazione video richiederà molte risorse e tempo, e potrebbe essere pieno di artefatti.Ho sentito che puoi trasformare una singola immagine in un cortometraggio, con Adobe, ma molto lavoro manuale lì …
-framerate
per ottenere i risultati desiderati.