viernes, 14 de diciembre de 2018

Bailando con videos, imágenes y powerpoints

A lo largo del tiempo he ido poniendo, en este Blog, diversas entradas sobre cómo ‘enredar’ con imágenes, presentaciones y videos, en sus diferentes variantes: que si crear un video a partir de un powerpoint, que si hacer un video con fotos y películas personales, que si extraer las imágenes de una presentación…

Hoy he tenido la necesidad de extraer las imágenes de un video creado a partir de una presentación y me di cuenta de dos cosas: una, de que no lo tenía anotado en el Blog (o, al menos, no lo encontré) y otra, de que todo esto de cosas de imagen y video lo tengo un poco liado. Así que me he propuesto aclarar un poco el panorama, en una especie de ‘entrada-resumen’. Y empezaré por este último tema...

Cómo extraer las imágenes de un video
Pues es muy sencillo, con FFMPEG. Basta (para hacerlo más cómodo) crear una carpeta vacía (por ejemplo, en el escritorio) copiar en ella el video en cuestión y luego abrir una consola precisamente en esa carpeta creada y teclear este mandato:
ffmpeg -i nombre_video.avi foto%4d.jpg
para tras dar a Enter, esperar a que se extraigan las imágenes (en el ejemplo, he puesto la extensión AVI y JPG, pueden ser otras, claro).
Y un matiz importante (e interesante): el mandato tipo ‘foto%4d.jpg’ indica al sistema que cree archivos de nombre ‘foto’, numerados con 4 dígitos, o sea del tipo foto0001.jpg, foto0002.jpg, foto0003.jpg, etc. Puede ser muy útil saberlo.
(NOTA: evidentemente, si el video es largo, o tiene muchos ‘frames’… te salen un porrón de imágenes. Este ‘truquis’ es bueno, por ejemplo, para lo que lo usé yo, para extraer las imágenes de una presentación pasada a video, que son relativamente pocas)

Y hablando de extraer, recordemos…

Cómo extraer imágenes de una presentación
Si lo que tenemos es, directamente, una presentación (powerpoint ppt, o similar), con LibreOffice es muy sencillo: no hay más que tener instalada la extensión ‘Export As Images’ que ofrece, para descargar en linea, Libreoffice.org (en Impress, Herramientas-Gestor de extensiones) y, abriendo la presentación, con Archivo-Export as images.
Más cosas…

Cómo crear el video de una presentación powerpoint
Hombre, en plan sencillo, lo que puedes hacer es usar Vokoscreen (o similar) para capturar un video de la pantalla, y haciendo correr la presentación en tu PC, grabarla. Hablaba de cómo hacerlo aquí
Pero, en plan más técnico, lo que hay que hacer es extraer todas las imágenes de la presentación, ‘normalizar’ su tamaño (si es caso, con mogrify) y tomar las siguientes decisiones: 
a) Si solo quiero un video simple, sin sonido
En este caso, te basta definir cuanto quieres que dure, en el video, la visualización de cada imagen (segundos por imagen). Estos segundos (por ejemplo, 10) por el número de imágenes, nos determinará la duración del video. Y con este dato, debemos calcular las fps (frames por segundo), que no es más que el inverso de la duración de cada foto en pantalla o sea 1 dividido entre 'segundos por imagen'. En el ejemplo, 1:10… 0,10000 fps
Ahora, bastará definir la resolución deseada para el video (suele ser bueno elegir 800x600, que es un formato típico de imágenes) para, teniendo instalado ‘mencoder’, abrir una terminal en la carpeta donde estén las imágenes y (en el ejemplo)… 
mencoder mf://*.jpg -mf w=800:h=600:fps=0.10000:type=jpg -ovc copy -o video.avi 
y crear ese video.
NOTA: supongo que también podría hacerse, con FFMPEG

b) Si quiero un video con sonido
El sonido se lo tendré que agregar, claro. Entonces, elegido éste (y sabiendo lo que dura dicho audio) hay que hacer al revés, tomar ese dato como duración del video y, por lo tanto, conocer así los ‘segundos por imagen’… y las ‘frames por segundo’ correspondientes. Supongamos que resulten ser, por ejemplo, 0,17390. Entonces haremos como antes, que creamos el video, con…
mencoder mf://*.jpg -mf w=800:h=600:fps=0.17391:type=jpg -ovc copy -oac copy -o video.avi  

y ahora solo queda añadir el audio, por ejemplo con
mencoder -ovc copy -audiofile audio.mp3 -oac copy video.avi -o output.avi

(Nota: también se puede añadir audio a un video a través de FFMPEG. Lo comento más abajo)

c) Si quiero un video con el sonido que lleva, ya integrado, la presentación
Este es el caso más complejo y (aparte de poder seguir teniendo el recurso de crearlo con Vokoscreen, o similar) se puede hacer, sencillamente, así:
Primero, tendremos que extraer el audio. Para eso basta meter la presentación (como PPT, no como PPS, cambiar, si es caso, la extensión) en una carpeta y, ahí, abrir el powerpoint y dar a Archivo-Exportar-como HTML. Aceptar todas las pantallas que salen y, al final, se crean un montón de archivos (las imágenes, los archivos html, los thumbnail… y el o los archivos de audio, en wav).
Segundo, borramos de esa carpeta todos los archivos sin interés, es decir los que no sean de audio y de imagen (e incluso los que, siendo de imagen, sean del tipo thumb#.JPG (o PNG) o sea, los thumbnails. Es muy sencillo hacerlo, por consola, con el comando...
rm *.html thumb*
y ya solo nos quedaría el audio y las imágenes (comprobar que están correctamente ordenadas), y por tanto no hay más que hacer lo que indicaba en el punto anterior. En todo caso todo esto lo explicaba, quizás más prolijamente, en esta entrada

 
Como crear un video de unas imágenes  
Hombre, siempre podría hacerse, como con las imágenes de una presentación, que acabo de comentar, pero si las imágenes provienen de distintas fuentes es muy importante la labor previa de ‘normalizarlas’, para crear un video 'homogéneo'. Por eso, si se trata de crear un video de una colección de fotos personales (de un evento, de unas vacaciones…) e incluso nos apetece intercalar pequeños videos, o títulos de inicio de capítulos, etc, no cabe duda de lo más cómodo es usar una aplicación ‘profesional’.
Yo recomiendo OpenShot, cuyo uso básico explico en esta entrada
NOTA: también podría hacerse, más elementalmente, con Imagination, como explicaba aquí

Y, ya que estamos en estos 'bailes', y acordándome de la fantástica herramienta que es la libreria FFMPEG, he aquí algunas ‘recetas útiles’ más (los nombres y extensiones de los archivos, e incluso los valores de los bitrates, etc, que aparecen en los comandos son un mero ejemplo, pueden ser, naturalmente, otros…

Cómo extraer el audio de un video
ffmpeg -i prueba.avi -ab 128k prueba.mp3
(‘ab’ es ‘audio bitrate’. Si no se indicase nada, el bitrate de salida del audio es de 64 kbps)

Cómo añadir audio a un video 
ffmpeg -i video.avi -i audio.mp3 -c:v copy -c:a copy output.avi

Cómo cambiar el bitrate (y/o la extensión) de un video
O sea, cómo recodificarlo con otras características. Bien pues, a través de FFMPEG, es muy sencillo, solo es cuestión de copiar y pegar estos mandatos por consola…
ffmpeg -i nombrevideo.ogv -vcodec mpeg4 -q:v 0 -acodec libmp3lame output.avi  

donde -i: input (archivo de entrada que queremos convertir, o sea nombrevideo.ogv)
-vcodec mpeg4: indicamos los codecs a utilizar para el video. En este caso mpeg4 (otro podría ser libxvid) para crear un AVI.
-q:v 0 indicamos que el archivo de salida debe tener la misma calidad (en video) que el archivo de entrada. Para audio sería -q:a 0
-acodec libmp3lame: codec de audio que vamos a utilizar. En este caso, libmp3lame (MP3)
Pero este mandato da excesiva calidad (lo que significa ‘excesivo tamaño’ y puede ser mejor limitar un poco los bitrates (pero dando calidad suficiente) por ejemplo con esta otra orden…
ffmpeg -i archivo.mpg -f avi -vcodec mpeg4 -b:v 900k -b:a 128k -g 300 -bf 2 archivo.avi

donde -f avi: fuerza formato entrada/salida (por si no lo reconoce automáticamente). Prescindible
-b:v define el bitrate video (hay que ponerlo en k. Si no se dice nada usa b=200k)
Nota: para el bitrate de audio, se pone -b:a. Si no se dice nada, usa b=64k
-g 300: se refiere a la estructura GOP del video. Prescindible
-bf 2: se refiere a los ‘bidirectional frames’ de la estructura del video. Igualmente prescindible
(y si alguien quiere profundizar en estos conceptos raros, que lo mire en Wikipedia, o similar) 


Y aquí termino, que veo que me voy alargando demasiado... 
Bueno, solo me queda decir que otra herramienta muy interesante para hacer todas estas cosas, y esta vez funcionando en entorno gráfico, es AVIDEMUX. Basta hacer una búsqueda, en el Blog por Avidemux, para encontrar más cosas (como extraer el audio, cómo rotar videos, etc).  
Por cierto que Avidemux puede instalarse con flatpak, lo que supongo evitaría los pequeños fallos de instalación que apuntaba en esas entradas, si es por asunto de 'dependencias'. Y también se puede usar como AppImage ('portable')

No hay comentarios:

Publicar un comentario