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.