Come convertire una singola immagine in un file AVI di 10 secondi con ffmpeg di alta qualità e dimensioni di file ridotte?


0

Ho provato a utilizzare FFMPEG per convertire una singola immagine 640x480 (nel mio caso, un'immagine PNG da 8 bpp, anche se probabilmente dovrò farlo con altri tipi e qualità di immagine) in un file AVI XVID da 10 secondi senza traccia audio. Sto eseguendo questo su un vecchio looper video per scopi speciali che richiede l'AVI XVID. Afferma di avere una profondità di colore di 16 bpp sul suo display VGA (640 x 480). Sì, non stiamo parlando di alta o nuova tecnologia. Questo è un "oh, sai dei computer?" progetto per un amico.

Non sono un esperto di FFMPEG o anche un utente normale. Lo scoppio ogni 6-9 mesi per attaccare qualche strano problema come questo che mi viene incontro.

Idealmente, sto creando una presentazione video. Ma i vari tentativi che ho provato danno come risultato file AVI "bloccati" durante la riproduzione o finiscono con sezioni "lampeggianti" in cui alcune piccole sezioni cambiano colore durante la riproduzione del video.

Ho provato a convertire i file di output a 1 fps e ho provato a creare 10 copie del file di input con nomi sequenziali e a creare 1 fps (e provare da 3 a 5 fps come esperimento) dall'elenco dei file sequenziali.

Ho provato ad aumentare la velocità dei dati video -b: v 1000K e questo mi aiuta. Ho provato -b: v 2000k e questo aiuta alcuni, ma non molto.

Provo a limitare il framerate di output perché, una volta mostrata l'immagine, non dovrebbe cambiare molto. Se lascio che FFMPEG utilizzi i suoi valori predefiniti, ottengo un video a 25 fps che è piuttosto grande e onestamente la qualità non è molto migliore - ottengo comunque le sezioni "lampeggianti".

Ho provato le codifiche One-Pass e Two-Pass sulla base di alcuni esempi che ho trovato tramite Google e questo sito. Il doppio passaggio sembra leggermente migliore, ma è soggettivo.

C'è un modo per convincere FFMPEG a fare inizialmente una copia di altissima qualità dell'immagine di input e poi una sorta di "costa" perché non cambia?

Per richiesta per le righe di comando provato:

Per convertire un'immagine JPG 640x480 da 73 KB (per Irfanview, 24 bpp, 34849 colori unici)

ffmpeg.exe -f image2 -loop 1 -t 10 -i lion3.jpg -s 640x480 -aspect 4:3 -r 1 -vcodec libxvid -b:v 1000k  lion3_jpg_dr1000k_r01.avi

La qualità è abbastanza buona in questo, e la dimensione del file finisce a 100 KB.

Se salvo il file come GIF (8 bpp, 254 colori univoci, dimensione del file 214 KB) e solo un singolo fotogramma, ho provato la seguente conversione:

ffmpeg.exe -r 1/10 -i lion3.gif -s 640x480 -aspect 4:3 -r 1  -vcodec libxvid -b:v 1000k -vsync cfr lion3_gif_dr1000k_r01.avi

Il comando JPG non ha funzionato sulla GIF (suppongo che non sia una sorpresa), e i parametri di cui sopra sono stati messi insieme da una serie di esempi trovati online.

L'AVI risultante della conversione GIF ha un sacco di blocchi "scintillanti" in alcune parti dello sfondo - ci sono ovvie modifiche in corso durante i 10 secondi che il video mostra sullo schermo.

Ho quindi trovato esempi di come unire più immagini per creare un video, quindi ho realizzato dieci copie dell'immagine, con l'aggiunta di 01-10, e ho eseguito questo

ffmpeg.exe -f image2 -framerate 1 -i image_%02d.png -c:v libxvid -vtag xvid -bf 0 -pix_fmt yuv420p -vf "fps=1" -b:v 2000K image_img_fps01_2000k_yuv420p_img2_bf0.avi

Il risultato è stato che alcune aree erano inizialmente molto bloccate e si sono risolte un po 'nel tempo. Ma nell'immagine originale, la stessa area è un insieme di piccole aree nere e grigio scuro, forse 2x2 pixel. L'AVI risultante ha blocchi che sembrano 8x8 o più grandi.

Spero che aiuti a capire cosa stavo provando.


Condividi il comando completo.
Gyan,

1
Post originale aggiornato con alcuni comandi di esempio che ho provato, con descrizione dei risultati.
GuyWithDogs
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.