Utilizzo di ffmpeg per codificare un video di alta qualità [chiuso]


92

Ho una serie di fotogrammi video salvati come immagini in una directory e sto cercando di codificarli in un video di buona qualità, tuttavia ogni impostazione e ogni formato che provo produce artefatti molto evidenti.

Il comando di base è questo:

ffmpeg -r 25 -i %4d.png myvideo.mpg

e ho provato i flag minrate e maxrate. Va bene qualsiasi formato {mpg, avi, mov, flv}.

Qualche suggerimento per le impostazioni? La dimensione del file finale non è un problema.


7
Sul mio Mac, io uso il seguente comando: ffmpeg -r 20 -f image2 -i myImage%04d.png -f mp4 -q:v 0 -vcodec mpeg4 -r 20 myVideo.mp4. Ho scoperto che per forzare il framerate, dovevo specificarlo sia per i file di input che per i file di output. Questo codec sembra funzionare per me - potrebbe non essere necessario specificarlo. Volevo solo includere quello che ho fatto perché ho passato molto tempo a lavorarci. L'unico svantaggio è che le mie immagini di input sono ad alto contrasto (palline blu e rosse su uno sfondo bianco) e più avanti nel film, le palline iniziano a diventare tutte dello stesso colore scuro - un effetto di contrasto indesiderato.
jvriesem

Grazie @jvriesem! Questo ha funzionato benissimo per me.
Dan Loewenherz

Suggerisco di porre questa domanda in StackOverflow per sistemi multimediali
Hamed

C ++ versione stackoverflow.com/a/43464269/6180077~~MD~~aux~~singular~~3rd Visita questo link per lavorare FFMPEG c formato mp4 registratore di schermo ++.
Abdullah Farweez

controllare questo link che dimostra il file video scrittura utilizzando FFMPEG LIBS programatically: stackoverflow.com/a/43464269/6180077
Abdullah Farweez

Risposte:


64

Un paio di cose:

  • Devi impostare il bitrate del video. Non ho mai usato minrate e maxrate quindi non so esattamente come funzionano, ma impostando il bitrate tramite l' -binterruttore, sono in grado di ottenere video di alta qualità. Devi trovare un bitrate che offra un buon compromesso tra compressione e qualità video. Potrebbe essere necessario sperimentarlo perché tutto dipende dalle dimensioni dei fotogrammi, dalla frequenza dei fotogrammi e dalla quantità di movimento nel contenuto del video. Tieni presente che il DVD tende ad essere in media intorno ai 4-5 Mbit / s per 720x480, quindi di solito parto da lì e decido se ho bisogno di più o meno e poi mi limito a sperimentare. Ad esempio, puoi aggiungere -b 5000kalla riga di comando per ottenere più o meno bitrate video DVD.

  • Devi specificare un codec video. In caso contrario, ffmpeg imposterà per impostazione predefinita MPEG-1, che è piuttosto vecchio e non fornisce la quantità di compressione vicina a MPEG-4 o H.264. Se la tua versione di ffmpeg è compilata con il supporto di libx264, puoi specificarlo -vcodec libx264come parte della riga di comando. Altrimenti -vcodec mpeg4farà anche un lavoro migliore di MPEG-1, ma non altrettanto bene di x264.

  • Ci sono molte altre opzioni avanzate che ti aiuteranno a ottenere la migliore qualità con i bitrate più bassi. Dai un'occhiata qui per alcuni esempi.


6
Il bitrate costante è negativo per la qualità. L'uso del fattore di velocità costante è superiore (è una delle modalità di funzionamento x264). Ad esempio: ffmpeg -i … -c:a copy -c:v libx264 -crf 18 -preset veryslow …. 18 è il CRF con una perdita di qualità molto marginale, ma il bitrate sarà probabilmente basso. E puoi provare valori CRF più grandi se hai bisogno di file di dimensioni inferiori. E come vedi, questo è piuttosto semplice.
Nome visualizzato

nota che -b deve essere prima del video ma dopo l'ingresso -i
mateuszb

45

È necessario specificare l'opzione -vb per aumentare il bitrate del video, altrimenti si ottiene l'impostazione predefinita che produce video più piccoli ma con più artefatti.

Prova qualcosa di simile:

ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg


1
questo funziona bene per me, grazie;)
thiago.adriano26

15

Assicurati che i PNG siano completamente opachi prima di creare il video

ad esempio con imagemagick, dai loro uno sfondo nero:

convert 0.png -background black -flatten +matte 0_opaque.png

Dai miei test, nessun bitrate o codec è sufficiente per far sembrare il video buono se si alimentano PNG ffmpeg con trasparenza


Questo ha risolto il problema per me.
Matěj Kripner

0

A meno che tu non faccia qualche tipo di lavoro di post-elaborazione, il video non sarà mai migliore dei fotogrammi originali. Inoltre, proprio come un libro sfogliabile, se hai un grande "salto" tra i fotogrammi chiave sembrerà divertente. In genere è necessario un numero sufficiente di "tween" tra i fotogrammi chiave per ottenere un'animazione fluida. HTH


Le immagini provengono originariamente da una sequenza video. Hanno appena avuto un po 'di ritaglio, ridimensionamento e quant'altro non è stato fatto con imagemagick. Gli effetti sono sicuramente artefatti da compressione. Ora ho visto questo post, che sembra avere una risposta: stackoverflow.com/questions/3158235/...
CakeMaster

@CakeMaster Non ho menzionato la compressione con perdita perché nel tuo esempio sono presenti immagini ".png". .png può essere con perdita di dati, ma trovo che di solito non lo sia. I file .jpg sono quasi sempre lossy quindi gli artefatti quando li si utilizza. Se puoi, potresti salvare nuovamente i tuoi file .png con compressione senza perdita di dati.
JustBoo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.