Solución:
Usar -qscale:v
para controlar la calidad
Usar -qscale:v
(o el alias -q:v
) como una opción de salida.
- El rango normal para JPEG es 2-31, siendo 31 la peor calidad.
- La escala es lineal con el doble de qscale siendo aproximadamente la mitad de la tasa de bits.
- Recomendamos probar valores de 2-5.
- Puede usar un valor de 1 pero debe agregar el
-qmin 1
opción de salida (porque el valor predeterminado es-qmin 2
).
Para generar una serie de imágenes:
ffmpeg -i input.mp4 -qscale:v 2 output_%03d.jpg
Consulte la documentación del muxer de imágenes para obtener más opciones que involucran salidas de imagen.
Para generar una sola imagen con una duración de ~ 60 segundos:
ffmpeg -ss 60 -i input.mp4 -qscale:v 4 -frames:v 1 output.jpg
Ver también
- Preguntas frecuentes de FFmpeg: ¿Cómo codifico películas en imágenes individuales?
- Wiki de FFmpeg: crea una imagen en miniatura cada X segundos del video
Imprima las imágenes en un formato sin pérdidas como PNG:
ffmpeg.exe -i 10fps.h264 -r 10 -f image2 10fps.h264_%03d.png
Editar / Actualizar: No estoy muy seguro de por qué originalmente di un ejemplo de nombre de archivo extraño (con una extensión posiblemente inventada).
Desde entonces he descubierto que
-vsync 0
es más simple que-r 10
porque evita la necesidad de conocer la velocidad de fotogramas.Esto es algo parecido a lo que uso actualmente:
mkdir stills ffmpeg -i my-film.mp4 -vsync 0 -f image2 stills/my-film-%06d.png
Para extraer solo los fotogramas clave (que probablemente sean de mayor calidad después de la edición):
ffmpeg -skip_frame nokey -i my-film.mp4 -vsync 0 -f image2 stills/my-film-%06d.png
Luego use otro programa (donde puede especificar con mayor precisión la calidad, el submuestreo y el método DCT, por ejemplo, GIMP) para convertir los PNG que desea a JPEG.
Es posible obtener imágenes ligeramente más nítidas en formato JPEG de esta manera de lo que es posible con -qmin 1 -q:v 1
y la salida como JPEG directamente desde ffmpeg
.