Migliora la qualità dei file jpg creati da ffmpeg


29

Sto usando ffmpeg per prendere un feed mjpeg da una telecamera IP e convertirlo in una serie di immagini jpeg fisse. Ecco il comando che sto usando:

ffmpeg -i http://xxx:xxx@xx.xx.xx.xx/vid.mjpg -f image2 -vcodec mjpeg %05d.jpg

Qualcuno sa un modo per specificare il livello di compressione jpg quando si utilizza ffmpeg per creare immagini fisse?

Risposte:


36

Ecco cosa ha finito per farmi il trucco:

ffmpeg -i http://xx.xx/mjpg/video.mjpg -q:v 1 %05d.jpg

L' -q:v 1era del biglietto. Imposta la qualità dell'encoder video, dove la -qqualità dei mezzi e i :vmezzi video. I valori vanno da 1 a 31, dove inferiore significa migliore.


2
Non so se questo fosse disponibile anni fa, ma se vuoi che le immagini JPEG di origine non vengano modificate da MJPEG, la risposta è qui: ffmpeg.org/ffmpeg-bitstream-filters.html#mjpeg2jpeg ---- In breve: -c:v copy -bsf:v mjpeg2jpeginvece di q:v 1.
juanitogan,

1
Qualcuno sa quale valore predefinito utilizza?
Jay R. Wren,

@ JayR.Wren ho fatto alcuni test e nel mio caso sembra iniziare in basso (buono) e dopo pochi secondi sale a 24,8 (cattivo). Non so perché. ffmpegs mostra la qualità corrente come q. Ecco ad esempio il 24,8frame= 64 fps=5.0 q=24.8 Lsize=N/A time=00:00:16.00 bitrate=N/A dup=10 drop=299 speed=1.25x
problemofficer

6

$ ffmpeg -r 1/4 -i %03d.jpg -b 5000 -vcodec mjpeg -qscale 1 5000.avi

O

$ ffmpeg -r 1/4 -i %03d.jpg -vcodec copy -qscale 1 copy.avi

Riferimento:

r       delay between next jpg, results 4 second
b       bitrate
vcodec  use jpeg encode
qscale  quality ratio

qscale "compete" con l'identificatore bitrate, mi chiedo?
rogerdpack,

1
Non è questo l'opposto di ciò che viene chiesto? Sembra jpeg a mjpeg. mjpeg a jpeg è la domanda.
juanitogan,

4

Potresti provare ad esportare in PPM e usare qualche altro strumento per convertire in JPEG.

Ho esaminato ffmpeg / libavcodec / mjpeg.c. Credo che la qualità sia impostata su un valore fisso.

Inoltre ti sembra di convertire un video MJPEG in fotogrammi fissi JPEG. Penso che in questo caso il codice in ffmpeg / libavcodec / mjpeg2jpeg_bsf.c venga eseguito e i dati non vengano ricodificati. Quindi la qualità dell'immagine non migliorerebbe comunque.

Questa è la definizione della tabella di quantizzazione, non ho visto alcun riferimento a * val_? C dove i valori sono stati ridimensionati prima dell'uso.

/* Set up the standard Huffman tables (cf. JPEG standard section K.3) */
/* IMPORTANT: these are only valid for 8-bit data precision! */
const uint8_t ff_mjpeg_bits_dc_luminance[17] =
{ /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 };
const uint8_t ff_mjpeg_val_dc[12] =
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };

const uint8_t ff_mjpeg_bits_dc_chrominance[17] =
{ /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };

const uint8_t ff_mjpeg_bits_ac_luminance[17] =
{ /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d };
const uint8_t ff_mjpeg_val_ac_luminance[] =
{ 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,

Non ho familiarità con PPM, che cos'è?
weotch

Inoltre, le immagini sembrano migliori quando accedo alla telecamera dal browser rispetto ai jpg che sto creando. Ecco perché pensavo si stesse verificando una certa compressione.
weotch

PPM è il formato di immagine a colori più semplice che si possa immaginare. È solo un'intestazione come "P6 640 480 255 \ n" e quindi i dati non elaborati. Ho appena guardato. Forse in realtà non può produrre questo formato. L'unica altra opzione sarebbe quindi -vc rawvideo. Hai provato -qualità?

1
-vcodec ppmè necessario per esportare ppm
Stop Harming Monica
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.