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?
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.
$ 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
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,