Melhorar a qualidade dos jpgs criados pelo ffmpeg

29

Estou usando o ffmpeg para pegar um feed mjpeg de uma câmera IP e convertê-lo em uma série de imagens jpeg estáticas. Aqui está o comando que estou usando:

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

Alguém sabe uma maneira de especificar o nível de compactação jpg ao usar ffmpeg para criar fotos?

weotch
fonte

Respostas:

36

Aqui está o que acabou fazendo o truque para mim:

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

O -q:v 1foi o bilhete. Ele define a qualidade do codificador de vídeo, onde a -qqualidade e o :vvídeo são os meios. Os valores variam de 1 a 31, onde menor significa melhor.

weotch
fonte
2
Não sei se isso estava disponível anos atrás, mas se você deseja que as imagens JPEG de origem não sejam modificadas do MJPEG, a resposta está aqui: ffmpeg.org/ffmpeg-bitstream-filters.html#mjpeg2jpeg ---- Em resumo: em -c:v copy -bsf:v mjpeg2jpegvez de q:v 1.
Juanitogan
1
Alguém sabe qual valor padrão ele usa?
Jay R. Wren
@ JayR.Wren Eu fiz alguns testes e, no meu caso, parece começar baixo (bom) e depois de alguns segundos sobe para 24,8 (ruim). Não sei porque. ffmpegs mostra a qualidade atual como q. Aqui está 24,8, por exemploframe= 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

Referência:

r       delay between next jpg, results 4 second
b       bitrate
vcodec  use jpeg encode
qscale  quality ratio
YumYumYum
fonte
qscale "compete" com o especificador de taxa de bits, gostaria de saber?
Rogerdpack
1
Não é esse o oposto do que está sendo perguntado? Parece jpeg para mjpeg. mjpeg para jpeg é a pergunta.
Juanitogan
4

Você pode tentar exportar para o PPM e usar alguma outra ferramenta para converter em JPEG.

Eu olhei para ffmpeg / libavcodec / mjpeg.c. Eu acredito que a qualidade é definida como um valor fixo.

Além disso, você parece converter um vídeo MJPEG em quadros estáticos JPEG. Penso que, neste caso, o código em ffmpeg / libavcodec / mjpeg2jpeg_bsf.c é executado e os dados não são recodificados. Portanto, a qualidade da imagem não melhoraria de qualquer maneira.

Esta é a definição da tabela de quantização, não vi nenhuma referência a * val_? C onde os valores foram redimensionados antes do 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,

fonte
Eu não estou familiarizado com o PPM, o que é isso?
weotch
Além disso, as imagens ficam melhores quando eu acesso a câmera no navegador em comparação com os jpgs que estou criando. Por isso estava pensando que alguma compressão estava ocorrendo.
weotch
O PPM é o formato de imagem em cores mais simples que se pode imaginar. É apenas um cabeçalho como "P6 640 480 255 \ n" e depois os dados brutos. Eu apenas olhei. Talvez ele realmente não possa gerar esse formato. A única outra opção seria -vc rawvideo. Você tentou -quality?
1
-vcodec ppmé necessário para exportar ppm
Pare de prejudicar Monica