Atualmente estou usando este comando para extrair as imagens:
ffmpeg.exe -i 10fps.h264 -r 10 -f image2 10fps.h264_% 03d.jpeg
Mas como posso melhorar a qualidade da imagem JPEG?
Atualmente estou usando este comando para extrair as imagens:
ffmpeg.exe -i 10fps.h264 -r 10 -f image2 10fps.h264_% 03d.jpeg
Mas como posso melhorar a qualidade da imagem JPEG?
Respostas:
-qscale:v
Use -qscale:v
(ou o alias-q:v
) como uma opção de saída. O intervalo efetivo para JPEG é de 2 a 31, com 31 sendo a pior qualidade. Eu recomendo tentar valores de 2-5.
ffmpeg -i input.mp4 -qscale:v 2 output_%03d.jpg
ffmpeg -ss 60 -i input.mp4 -qscale:v 4 -frames:v 1 output.jpg
Isso funcionará com qualquer entrada de vídeo. Veja abaixo se sua entrada é MJPEG.
Se a sua entrada for MJPEG (Motion JPEG), as imagens podem ser extraídas sem qualquer perda de qualidade.
A saída do console ffmpeg
ou ffprobe
pode dizer se sua entrada é MJPEG:
$ ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=nw=1 input.avi
codec_name=mjpeg
Em seguida, você pode extrair os quadros usando o mjpeg2jpeg
filtro de fluxo de bits :
$ ffmpeg -i input.avi -codec:v copy -bsf:v mjpeg2jpeg output_%03d.jpg
-qmin 1 -qmax 1
além do -q:v 1
dobro do tamanho do arquivo. E também posso ver uma ligeira melhora.
-qmin 1 -qmax 1
resultou em um arquivo maior, mas me dá exatamente a mesma imagem. Eu validei isso via photoshop, 2 camadas e filtro de diferença. Os pixels são iguais.
-qmin 1 -q:v 1
.
Envie as imagens em um formato sem perdas, como PNG:
ffmpeg.exe -i 10fps.h264 -r 10 -f image2 10fps.h264_%03d.png
Em seguida, use outro programa (onde você pode especificar com mais precisão a qualidade, subamostragem e método DCT - por exemplo, GIMP) para converter os PNGs que deseja em JPEG.
É possível obter imagens um pouco mais nítidas no formato JPEG desta forma do que com -qmin 1 -q:v 1
e saída como JPEG diretamente do ffmpeg
.
ffmpeg
produz PNG8
arquivos que usam apenas 256 cores (igual ao GIF). portanto, é realmente muito prejudicial.
ffmpeg
comando [ ], obtenho png de alta qualidade que são de qualidade idêntica ao vídeo original." Qual versão do ffmpeg
você está usando que está gerando PNG8
arquivos e qual é o seu formato de entrada?
identify image.png
dá o resultado "8 bits" quando na verdade não é realmente um único canal de 8 bits, mas de 8 bits para R, G e B. IDK como o identify
usuário comum deve entender aquele tho.