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

29

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

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

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

weotch
la source

Réponses:

36

Voici ce qui a fini par me faire l'affaire:

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

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

weotch
la source
2
Je ne sais pas si cela était disponible il y a des années mais si vous voulez que les images source JPEG ne soient pas modifiées depuis MJPEG, la réponse est ici: ffmpeg.org/ffmpeg-bitstream-filters.html#mjpeg2jpeg ---- En bref: -c:v copy -bsf:v mjpeg2jpegau lieu de q:v 1.
juanitogan
1
Quelqu'un sait-il quelle valeur par défaut il utilise?
Jay R. Wren du
@ JayR.Wren J'ai fait quelques tests et dans mon cas, il semble commencer bas (bon) et après quelques secondes monte à 24,8 (mauvais). Je ne sais pas pourquoi. ffmpegs affiche la qualité actuelle sous la forme q. Ici c'est 24.8 par exempleframe= 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

OU

$ 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
YumYumYum
la source
qscale "rivalise" avec le spécificateur de bitrate, je me demande?
rogerdpack
1
N'est-ce pas l'opposé de ce qui est demandé? Cela ressemble à jpeg à mjpeg. mjpeg à jpeg est la demande.
juanitogan
4

Vous pouvez essayer d'exporter en PPM et 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.

Vous semblez également convertir une vidéo MJPEG en images fixes JPEG. Je pense que dans ce cas, le code dans ffmpeg / libavcodec / mjpeg2jpeg_bsf.c s'exécute et les données ne sont pas recodées. La qualité d'image ne s'améliorerait donc 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,

la source
Je ne connais pas PPM, qu'est-ce que c'est?
weotch
De plus, les images sont plus belles lorsque j'accède à l'appareil photo depuis le navigateur par rapport aux jpgs que je crée. C'est pourquoi je pensais qu'une compression se produisait.
weotch
PPM est le format d'image couleur le plus simple que l'on puisse imaginer. C'est juste un en-tête comme "P6 640 480 255 \ n" puis les données brutes. J'ai juste regardé. Peut-être qu'il ne peut pas réellement sortir ce format. La seule autre option serait alors -vc rawvideo. Avez-vous essayé la qualité?
1
-vcodec ppmest nécessaire pour exporter ppm
Stop Harming Monica