web-dev-qa-db-fra.com

Améliorer la qualité des fichiers jpgs créés par ffmpeg

J'utilise ffmpeg pour prendre un fichier mjpeg d'une caméra IP et le convertir en une série d'images fixes. Voici la commande que j'utilise:

ffmpeg -i http://xxx:[email protected]/vid.mjpg -f image2 -vcodec mjpeg %05d.jpg

Est-ce que quelqu'un connaît un moyen de spécifier le niveau de compression jpg lors de l'utilisation de ffmpeg pour créer des images fixes?

29
weotch

Voici ce qui a fini par faire le tour pour moi:

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

Le -q:v 1 était le ticket. Il définit la qualité de l'encodeur vidéo, où -q signifie qualité et :v signifie vidéo. Les valeurs vont de 1 à 31, où bas signifie mieux.

35
weotch

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

OR

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

Référence:

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

Vous pouvez essayer d’exporter dans PPM et d’utiliser un autre outil pour convertir en JPEG.

J'ai regardé dans ffmpeg/libavcodec/mjpeg.c. Je crois que la qualité est fixée à une valeur fixe.

Aussi, vous semblez convertir une vidéo MJPEG en images fixes JPEG. Je pense que dans ce cas, le code dans ffmpeg/libavcodec/mjpeg2jpeg_bsf.c est exécuté et les données ne sont pas recodées. Donc, la qualité d'image ne s'améliorerait pas de toute façon.

Ceci est la définition de la table de quantification, je n'ai vu aucune référence à * val_? C où les valeurs ont été mises à l'échelle avant utilisation.

/* 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,
4
whoplisp