jueves, 13 de noviembre de 2014

Extracción de imágenes desde un vídeo mkv

Recordemos ese vídeo que extraímos hace unos días de un DVD y convertimos en mkv utilizando de Handbrake, y que luego recortamos mediante avidemux. De ese vídeo me han preguntado si era capaz de extraer unas imágenes en jpg para utilizarlas individualmente sin tener que incluir un vídeo. Por supuesto dije que sí. Luego estuve valorando las diferentes posibilidades.
Primera, avidemux, pero no descubrí la forma de extraer imágenes fuera de ir pidiendo de una en una (File -> Save image). Siempre es mejor sacar tiras completas para escoger la que nos de la mejor visualización.
Segunda opción por mi conocida; si disponemos de un vídeo con formato adecuado para él, VirtualDub nos convierte un vídeo en una tira de imágenes en milésimas de segundo. Aunque es una aplicación pensada para windows, podemos utilizarla en Linux, por que VirtualDub funciona perfectamente por wine. El problema es que nos exigiría una codificación más, ya que VirtualDub solo admite "Video for Windows (VFW) compatible codec..."


y es preferible evitarlo, ya que HandBrake ya lo ha recodificado una vez, y ahora otra más siempre genera pérdida de calidad; eso sin olvidar de que para convertirla a imagen JPG se va a recodificar otra.

Tercera, y más sencilla y adecuada, ffmpeg. En concreto en sus FAQ encontramos la instrucción básica

ffmpeg -i movie.mkv movie%d.jpg

Perfecto. El único problema es que el vídeo dura 1 hora y 5 minutos y solo se necesitan para lo que queremos 13 segundos. La orden directamente sobre el vídeo nos generaría 97500 imágenes (65minutos x 60 segundos x 25fps). Así que lo mejor es ejecutar solo sobre la porción menor posible del vídeo.
Podríamos volver a dividir mediante avidemux, pero genera diferentes problemas en función de la localización de los "keyframes", los fotogramas base sobre los que se marca la compresión de todos los siguientes. Sin embargo, la división mediante mkvmerge GUI no generó ningún problema y lo pudimos dejar en 13 segundos (primero en cortes de 20 minutos, luego 5 del que nos interesaba, luego 1 minuto y luego de 20 segundos, que el programa dejó en 13)


En la pestaña de Opciones generales, Modo de corte (Dividir según duración) y luego los segundos (formato horas:minutos:segundos).

Luego aplicamos la orden ffmpeg y se obtienen un lote completo de fotos. Ahora solo nos queda elegir las mejores y las podemos poner en una presentación, sin tener que cargar un vídeo.

PD. Por cierto, aplicaciones gráficas, pero al final, recurrimos al terminal

No hay comentarios:

Publicar un comentario