Mostrando entradas con la etiqueta ffmpeg. Mostrar todas las entradas
Mostrando entradas con la etiqueta ffmpeg. Mostrar todas las entradas

jueves, 9 de diciembre de 2010

Crear imágenes monocromas con FFMpeg

Al pensar en FFmpeg como el mejor conversor de multimedia, nos solemos olvidar de que, aparte de vídeo y audio, también maneja imágenes.

En los sistemas Unix tenemos /dev/zero que es una fuente de ceros. Sólo tenemos que darle un tamaño, y una profundidad de bits para tener una imagen de color negro:

# Black image bgra PNG
ffmpeg -vframes 1 -s 64x32 -pix_fmt rgb32 -f rawvideo -i /dev/zero -pix_fmt rgb32 black64x32.png
# Black image rgb PNG
ffmpeg -vframes 1 -s 64x32 -pix_fmt rgb24 -f rawvideo -i /dev/zero -pix_fmt rgb24 black64x32.png


Si queremos otros colores, la cosa se complica: hay que usar filtros (lo cual implica un ffmpeg muy reciente). Los pasos son leer cualquier imagen de partida, superponer el generador de colores, y escalar al tamaño deseado:

# Gray image 50% transparent
ffmpeg -i black64x32.png -vf 'color=gray@.5:64x32:25 [over]; [in][over] overlay [out]' -vf scale=640:200:rgba -pix_fmt rgb32 gray640x200.png
# Gray image
ffmpeg -i black64x32.png -vf 'color=gray:64x32:25 [over]; [in][over] overlay [out]' -vf scale=640:200:rgb24 -pix_fmt rgb24 gray640x200.png


Recordad que, de todos los formatos de píxels que muestra ffmpeg -pix_fmts, sólo rgb32 y yuva420p permiten transparencia.

domingo, 26 de septiembre de 2010

Compilar frei0r

 frei0r es un conjunto de filtros de vídeo. Efectos visuales y tal.

Para compilarlo en Cygwin, necesitaremos los paquetes gcc4-core, gcc4-g++, cmake.

Nos bajamos el código fuente, y lo desempaquetamos:
wget http://www.piksel.no/frei0r/frei0r-plugins-1.2.tar.gz
tar xvf frei0r-plugins-1.2.tar.gz


Se puede construir usando GNU autotools ( ./configure && make ) or CMake ( cmake . && make ).

Usamos CMake. El primer problema es que la versión del paquete cmake de Cygwin es 2.6, así que cambio la primera línea de CMakeLists.txt a esto:
cmake_minimum_required (VERSION 2.6)

Construímos los "makefiles":
CFLAGS=-march=core2 cmake .

Y a compilar. Como tengo un Core2, pues lo aprovechamos:
make -j 2

Para instalarlo:
make install

Y, como se han olvidado, también:
cp -p include/frei0r.h /usr/local/include/

Desde el 24-sep-2010, (SVN r25165), ffmpeg permite usar filtros de frei0r

Para construir ffmpeg con soporte para frei0r:
./configure --enable-frei0r

Antes de usar los filtros, conviene avisar dónde están:
FREI0R_PATH=/usr/local/lib/frei0r-1

Ejemplo de uso de un filtro:
./ffmpeg -i in.avi -vf "frei0r=water.dll:3.0:y:y:y:y:y:y" -y out.avi

sábado, 13 de marzo de 2010

Mi tele lee multimedia (II)

Para las pruebas, necesito material HD, por ejemplo Big Buck Bunny

Nos lo traemos:
wget http://mirror.bigbuckbunny.de/peach/bigbuckbunny_movies/big_buck_bunny_1080p_h264.mov bbb.mov

FFmpeg nos dice:

ffmpeg -i bbb.mov

Atentos a que partimos de sonido envolvente: los 6 canales de audio.

Convertiremos un trocito, por ejemplo 3 segundos, que a 24 cuadros por segundo, son 72 cuadros.

Empezamos a probar conversiones.

a) Calidad HD.
Los codecs H.264 / AAC encajan con lo que la tele puede leer. El contenedor .mov es un dialecto de .mp4, así que basta con cambiar la extensión de fichero.

Si queremos coger un trocito:
ffmpeg -ss 13 -vframes 72 -i bbb.mov -vcodec copy -acodec copy bbb_9300.mp4

La tele muestra bbb_9300.mp4 correctamente.

Si los codecs no hubieran coincidido:
ffmpeg -ss 13 -vframes 72 -i bbb.mov -vcodec libx264 -fpre normal -crf 22 -acodec libfaac -ab 192k bbb_9300.mp4

b) Calidad DVD.
La tele es 16:9, y Big Buck Bunny también, así que mejor usar "-aspect 16:9". Dotaremos de 8000kb/s al vídeo (los DVDs comerciales suelen quedarse en 6000kb/s).

Preparamos las tres variantes de audio.

b1) MPEG layer 2 (sólo estéreo)
ffmpeg -ss 13 -vframes 72 -i bbb.mov -target pal-dvd -aspect 16:9 -b 8000k -ac 2 -acodec mp2 bbb_8000_mp2.vob

b2) LPCM, forzando audio estéreo.
ffmpeg -ss 13 -vframes 72 -i bbb.mov -target pal-dvd -aspect 16:9 -b 8000k -ac 2 -acodec pcm_s16be bbb_8000_lpcm.vob

b3) AC3, preservando los 6 canales.
ffmpeg -ss 13 -vframes 72 -i bbb.mov -target pal-dvd -aspect 16:9 -b 8000k -acodec pcm_s16be bbb_8000_lpcm.vob

La tele los muestra correctamente.

c) Calidad AVI.
Mi tele no necesita la marca "-vtag DX50" que algunos reproductores requieren en Windows.

Preparamos las tres variantes de audio.

c1) MPEG layer 2 (sólo estéreo)
ffmpeg -ss 13 -vframes 72 -i bbb.mov -vcodec mpeg4 -s 720x576 -aspect 16:9 -b 8000k -ac 2 -acodec mp2 -ab 192k bbb_8000_mp2.avi

c2) MPEG layer 3 (sólo estéreo)
ffmpeg -ss 13 -vframes 72 -i bbb.mov -vcodec mpeg4 -s 720x576 -aspect 16:9 -b 8000k -ac 2 -acodec libmp3lame -ab 128k bbb_8000_mp3.avi

c3) AC3, preservando los 6 canales.
ffmpeg -ss 13 -vframes 72 -i bbb.mov -vcodec mpeg4 -s 720x576 -aspect 16:9 -b 8000k -acodec ac3 -ab 384k bbb_8000_ac3.avi

La tele los muestra correctamente.


Conclusión:
La tele da bastante de sí: muy pocos reproductores de salón soportan 8000kb/s en MPEG4. Y menos aún, H.264/AAC.


Líneas de investigación:
El fichero de partida tiene 23.97 fps (FILM). Hay que ver si la tele soporta 29.97fps (NTSC) y 25fps (PAL).
Lo más probable es que sí, pero he notado que el movimiento con 23.97fps es a saltitos, no es suave.

Hay que probar con distintos tamaños. En AVI he visto que 720x432, 704x298, 640x272, 720x400, 640x480 van bien.

Hay que probar si traga tal cual el .mp4 de YouTube HD (1280x720, 640×360).

El fabricante dice que la tele lee particiones FAT16, FAT32 y NTFS. Leer NTFS es inusual, así que hay que refrendrarlo con una pruebecilla.

domingo, 27 de diciembre de 2009

Mi tele lee multimedia

Como indica su fabricante, mi tele lee estos formatos:





























ExtensiónVídeoTamañoKilobits/sAudio
.aviMPEG-4 SP
MPEG-4 ASP
352×288
720×576
384
8000
MPEG layer 2/3
AC3
.mpg
.mpeg
.vob
MPEG-1
MPEG-2
352×288
720×576
1500
9800
MPEG layer 2
LPCM
AC3
.mp4H.264, L2-CIF
H.264, L4-HD
352×288
1920×1080
2000
20000
AAC-LC
AAC-LC

Los tamaños y tasas de bits los he mirado en MPEG-4, y H.264

Me falta hacer una chuleta con las opciones que hay que pasar a FFmpeg para generar estos formatos.

Y probarlos, claro.

viernes, 24 de abril de 2009

GIFs animados

Hay montones de herramientas para generar GIFs animados.
Y FFmpeg también puede crearlos.

No es el mejor en cuanto a la calidad resultante (no busca la paleta de colores óptima), ni cuanto a espacio (los GIF que produce no están comprimidos), pero sí es el que más formatos de entrada admite.

La situación puede mejorar pronto, porque en marzo se apuntó un voluntario para crear GIFs comprimidos.

Y ahora, un ejemplo de cómo convertir a GIF animado:

ffmpeg -i avión.wmv -r 10 -vframes 50 -f gif -pix_fmt rgb24 -s 80x60 avión.gif

jueves, 2 de abril de 2009

Traducción de WinFF

Hace algún tiempo hice la traducción a mi lengua nativa de WinFF.

Si no lo conocéis, os lo recomiendo, creo que es el mejor de los programas que le ponen un interfaz gráfico a FFmpeg.

Matt ha sacado la versión 1.0beta, así que le he actualizado la traducción.

lunes, 16 de marzo de 2009

ffmpeg-17998

Los chicos de Cygwin han sacado la versión 4.3.2-2 de gcc. Vamos a probarla con el ffmpeg de hoy.

Aprovechando que gcc 4.3.x permite optimizar para Core2, uso esta configuración:

./configure --cc=gcc-4 --enable-shared --disable-static --cpu=core2 --enable-gpl --enable-avfilter --enable-avfilter-lavf --enable-pthreads --enable-avisynth --enable-bzlib --enable-zlib --build-suffix=-SVN

Decimos make y, vaya, hombre, salen errores:

libavformat/rtsp.o: In function `__ntohl':
/usr/include/asm/byteorder.h:40: multiple definition of `___ntohl'
libavformat/os_support.o:/usr/include/asm/byteorder.h:40: first defined here


¿De dónde viene esto? Pues hay tres motivos encadenados:

  1. FFmpeg le pasa -std=c99 al compilador
  2. La versión 4.3.x de gcc cambia la semántica del comando inline en modo C99
  3. Los "includes" de las funciones C de Cygwin no cumplen la norma C99.


¿Qué soluciones hay?

  1. La fácil, quitamos el trozo que casca, o sea añadimos --disable-network a nuestra configuración.
  2. La complicada, avisar en la lista de correo de Cygwin que habría que soportar C99 en los "includes".


Es lunes, así que vamos a usar la opción 1.

Ahora funciona la cosa, pero otra tarea pendiente es enviar un parche a ffmpeg-devel para no tener que hacer esta chapucilla con las compilaciones que crean bibliotecas compartidas.

miércoles, 4 de marzo de 2009

El mejor conversor de multimedia

Claro, es FFmpeg, y casi todo lo demás está basado en él.

El resto no son tan versátiles, sino que se limitan a manejar un formato o dos como mucho: