Mejora la calidad de fpmpeg creado jpgs


29

Estoy usando ffmpeg para tomar una alimentación mjpeg de una cámara IP y convertirla en una serie de imágenes jpeg fijas. Aquí está el comando que estoy usando:

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

¿Alguien sabe una manera de especificar el nivel de compresión jpg cuando se usa ffmpeg para crear imágenes fijas?

Respuestas:


35

Esto es lo que terminó haciendo el truco para mí:

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

El -q:v 1fue el boleto. Establece la calidad del codificador de video, donde la -qcalidad media y el :vvideo medio. Los valores oscilan entre 1 y 31, donde menor significa mejor.


2
No sé si esto estaba disponible hace años, pero si desea que las imágenes JPEG de origen no se modifiquen desde MJPEG, la respuesta está aquí: ffmpeg.org/ffmpeg-bitstream-filters.html#mjpeg2jpeg ---- En resumen: en -c:v copy -bsf:v mjpeg2jpeglugar de q:v 1.
juanitogan

1
¿Alguien sabe qué valor predeterminado utiliza?
Jay R. Wren

@ JayR.Wren Hice algunas pruebas y en mi caso parece que comienza bajo (bueno) y después de unos segundos sube a 24.8 (malo). No se porque. ffmpegs muestra la calidad actual como q. Aquí es 24.8 por ejemploframe= 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

Referencia:

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

¿qscale "compite" con el especificador de bitrate, me pregunto?
rogerdpack

1
¿No es esto opuesto a lo que se pregunta? Esto parece jpeg a mjpeg. mjpeg a jpeg es la pregunta.
juanitogan

4

Puede intentar exportar a PPM y utilizar alguna otra herramienta para convertir a JPEG.

Miré en ffmpeg / libavcodec / mjpeg.c. Creo que la calidad se establece en un valor fijo.

También parece convertir un video MJPEG en cuadros fijos JPEG. Creo que en este caso el código en ffmpeg / libavcodec / mjpeg2jpeg_bsf.c se ejecuta y los datos no se recodifican. Entonces la calidad de imagen no mejoraría de todos modos.

Esta es la definición de la tabla de cuantización, no vi ninguna referencia a * val_? C donde los valores se escalaron antes de su 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,

No estoy familiarizado con PPM, ¿qué es eso?
Weotch

Además, las imágenes se ven mejor cuando accedo a la cámara desde el navegador en comparación con los jpgs que estoy creando. Es por eso que estaba pensando que estaba ocurriendo algo de compresión.
Weotch

PPM es el formato de imagen en color más simple que uno pueda imaginar. Es solo un encabezado como "P6 640 480 255 \ n" y luego los datos sin procesar. Acabo de mirar. Tal vez en realidad no puede generar este formato. La única otra opción sería -vc rawvideo. ¿Intentaste con la calidad?

1
-vcodec ppmse necesita para exportar ppm
OrangeDog
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.