[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Creación de una secuencia de video en linux



On Wed, 2003-03-26 at 04:41, Pablo Giménez Pizarro wrote:
> A ver tengo el siguiente problema:
> A partir de una secuencia de frames, por ejemplo: seq.0001.tif, 
> seq.0002.tif, etc ..., y un fichero de audio, necesito crear una 
> secuencia de video por ejemplo en formato divx reproducible con mplayer 
> o similar.
> sabe alguien de alguna aplicación o librería que haga esto???

Sí, hay una variedad de herramientas que puedes usar.  Por ahí te
mencionaron mencoder, que en efecto es la solución más simple. 
Alternativamente, puedes usar mjpegtools, que lo obtienes del mismo apt
source que mplayer (deb http://marillat.free.fr/ stable main).

Ésto es más complicado, pero en mi opinión da mejores resultados. 
Además, así puedes hacer MPEGs.  Por ejemplo, para poner tu animación en
VCD y verla en tu reproductor de DVD.

En esencia: se trata de convertir todas tus imágenes a YUV4MPEG2 (lee
ppmtoy4m(1)).  Luego puedes usar usar yuv2lav (para editar con glav y
posteriormente generar QuickTime), o yuv2divx (para codificar en DivX),
o mpeg2enc (para MPEG I/II, VCD, SVCD).

Sigue un ejemplo rápido que convierte una secuencia de TIFFs en un MPEG
apropiado para VCD (NTSC, ojo si estás del otro lado del charco).  Como
VCD requiere un tamaño de imagen fijo, los TIFFs ya deben estar
escalados a 352x240; de lo contrario, necesitas meter una llamada a
yuvscaler en el pipeline ENCODER.  Necesitas instalar netpbm (por
tifftopnm).

-----------------------------------------------------------------------
#!/bin/sh

DIR="~/images"
FORMATO="img%05d.tif"
PRIMERFRAME=1
ULTIMOFRAME=5000
FIFO="/tmp/video"
SALIDA="/tmp/out.m1v"
ENCODER="ppmtoy4m < $FIFO | \
 mpeg2enc -a 2 -n n -F 4 -s -4 1 -2 1 -f 1 -o $SALIDA"

mkfifo $FIFO
sh -c "$ENCODER" &
3>$FIFO

FRAME=PRIMERFRAME
while [ $FRAME -lt $ULTIMOFRAME ] ; do
  IMG=$(printf "$FORMATO" $FRAME)
  echo "Procesando frame $IMG"
  tifftopnm "$DIR/$IMG" >&3
  FRAME=$(($FRAME+1))
done

rm $FIFO
echo "Conversion completa (espera a que mpeg2enc termine)"
-----------------------------------------------------------------------

El script lo acabo de teclear, así que no te garantizo que funcione.
Pero, si no funciona, será sólo un error de dedo fácil de corregir --yo
uso este tipo de cosas todo el tiempo.

El audio, en este caso, lo convertirías de WAV a MPEG audio (layer 2,
MP2) con toolame, y lo agregarías al MPEG generado por el script
anterior usando mplex.  Nota que VCD también restringe la frecuencia de
muestreo (44.1KHz) y el bitrate (224Kb/s); esos son detalles que tienes
que cuidar al generar el WAV y al covertirlo a MP2.  Usa sox, si tienes
que resamplear.

 -CR




Reply to: