frikis.org
 (Búsqueda avanzada)
¡NO HAGAS CLIC AQUÍ!
Página Inicial | Enviar Noticia | Foro | Galería | Proyectos | Documentos | Downloads | Screenshots | Enlaces
Temas
Bugs (27/10)
Debian (7/10)
Eventos (50/9)
Frikis (104/30)
frikis.org (26/15)
Gadgets (34/24)
Gentoo (43/12)
Hardware (24/7)
Humor (123/19)
Linux (60/14)
Noticias (73/28)
Redes (71/18)
Slackware (7/11)
Software (55/2)
Secciones
Foro de Frikis.org
Galería
Proyectos

Documentos
Download
Screenshots
Enlaces
Funciones del(a) usuario(a)
Nombre del(a) usuario(a):

Contraseña:

¿No tienes una cuenta todavía? Inscríbete
Última hora
NOTICIAS
No hay noticias nuevas

COMENTARIOS last 2 days
No hay comentarios nuevos

LINKS last 2 weeks
No recent new links

Sindícanos
Puedes sindicar las últimas noticias de frikis.org en xml.

En capítulos anteriores
Thursday 27-Apr
  • Testigos de Mitch (14)

  • Monday 20-Feb
  • Kevin Smith y Superman Lives (2)

  • Wednesday 01-Feb
  • I concurso de relatos cortos sobre cultura libre (1)

  • Friday 20-Jan
  • Vuelve Takeshi Castle (Humor Amarillo) (20)

  • Monday 16-Jan
  • Depila a David Hasselhoff (1)
  • David Hasselhoff productions presenta: Hooked On A Feeling (5)

  • Wednesday 28-Dec
  • El trasfondo de Los Simpsons y Futurama (3)

  • Tuesday 13-Dec
  • Muere Richard Pryor (0)

  • Thursday 08-Dec
  • Entrevista a los coordinadores de Astroseti.org (0)

  • Wednesday 30-Nov
  • Dar cera, pulir cera (1)

  • Pasando Divx a VCD, SVCD, CVCD etc.
    Pasando Divx a VCD, SVCD, CVCD etc. por paranouei (paranouei@jazzfree.com)

    Esta tarea es posible hacerla bajo linux, incluso se puede automatizar para no tener más que teclear p.ej. divx2vcd <archivo.avi>, irte un rato por ahí, y al volver tener los archivos .bin y .cue listos para tostar.

    Bien, antes de nada unos conceptos básicos:

    Términos básicos:

    * VCD:Video CD. Se trata de un stream MPEG-1 a 352x288 y 25 fps (PAL) o 352x240 y 29.976 fps (NTSC). El bitrate es constante a 1150kbps y el audio es MPEG layer 2 a 224 kbps. Caben tantos minutos de videos como indique el CD (74 o 80).
    * SVCD: Super Video CD. Se trata de un stream MPEG-2 a 480x576 y 25 fps (PAL) o 480x480 y 29.976 fps (NTSC). El bitrate puede ser variable hasta 2600kbps y el audio tambié puede ir de 32 a 384 kbps. Los minutos de video que caben dependen del bitrate escogido, aunque suelen estar entre 40 y 55 minutos por CD.
    * XVCD, CVCD..:Son modificaciones del estándar con diferentes bitrates, etc. y que pueden no funcionar en todos los reproductores DVD. Aunque hoy en día los reproductores DVD prácticamente "se lo tragan todo".

    Por ejemplo, el CVCD no es más que un VCD con bitrate variable, con lo que se aprovechan las escenas "fáciles" para usar un bitrate más bajo, con lo que se aprovecha mejor el espacio. De esta forma podemos meter más de 90 minutos en un CD.


    Herramientas:

    * Mplayer. Nos servirá como filtro de input para el transcode. De esta forma el transcode podrá "comerse" todo lo que puede comerse el mplayer (divx, realmedia, subtitulos...).
    * Transcode. Es la herramienta principal. Sirve para transformar entre todos los formatos imaginables..
    * MJPEG Tools. Será nuestro filtro de salida. Además, incluye herramientas para multiplexar el mpg.
    * VCDImager. Sirve para crear las imagenes .bin .cue a partir del mpg.

    A parte los scripts que incluyo utilizan algunas utilizades básicas como bc (calculadora) y perl.

    Bueno, una vez que tenemos esto, vamos al turrón. ;)

    Divx2VCD:

    Me he preparado el siguiente script divx2vcd, el cual se encarga de los cálculos para obtener una imagen con el mismo aspecto (añadiendo bordes negros si hace falta). Usa bitrate constante, de forma que es totalmente estándar VCD. El tamaño máximo de cada archivo (para que entre en un CD, está en la variable CDSIZE. El script se encarga de crear el video y el audio con transcode, luego multiplexarlos con mplex, y finalmente crear las imágenes. Lo podéis descargar aquí. Lo pego también aquí para que lo veais:

    -- Inicio divx2vcd --

    #!/bin/bash

    # Este script pasa un Divx a VCD. Para los archivos temporales se
    # necesita al menos 4.5 Gigas (m1v y mpa, los .mpg y los .bin)

    DIR=`pwd`
    TEMPFOLDER=/tmp/divx2vcd-$RANDOM
    CDSIZE=795
    VIDEORATE=1150
    AUDIORATE=224

    if [ $# -eq 0 ]; then
    echo "Usage:"
    echo " divx2vcd <divxfile>"
    exit 1
    fi

    FILE=$1
    if [ "$1" == "`basename $1`" ]; then
    FILE="$DIR/$1"
    fi

    mkdir $TEMPFOLDER
    cd $TEMPFOLDER

    tcprobe -i "$FILE" > $TEMPFOLDER/info

    WIDTH=`grep '\[avilib\] V:' $TEMPFOLDER/info | perl -e ' $line=<STDIN> ; $line =~ /width=(\d+)/ ; print $1' `
    HEIGHT=`grep '\[avilib\] V:' $TEMPFOLDER/info | perl -e ' $line=<STDIN> ; $line =~ /height=(\d+)/ ; print $1' `
    FPS=`grep '\[avilib\] V:' $TEMPFOLDER/info | perl -e ' $line=<STDIN> ; $line =~ /V: (.+?) fps/ ; print $1' `
    FPS_1=`echo "scale=1 ; $FPS/1"| bc -l`
    FRAMES=`grep '\[avilib\] V:' $TEMPFOLDER/info | perl -e ' $line=<STDIN> ; $line =~ /frames=(\d+)/ ; print $1' `
    SEGUNDOS_TOTAL=`echo "scale=0 ; ($FRAMES / $FPS)"| bc -l`
    HORAS=`echo "scale=0 ; ($SEGUNDOS_TOTAL / 3600)"| bc -l`
    MINUTOS=`echo "scale=0 ; (($SEGUNDOS_TOTAL - 3600 * $HORAS)/60)"| bc -l`
    SEGUNDOS=`echo "scale=0 ; ($SEGUNDOS_TOTAL % 60)"| bc -l`

    echo "*************** FILE INFO ***************"
    echo "Frame Size: ${WIDTH}x${HEIGHT} - FPS: $FPS"
    echo "Length: $FRAMES - Seconds: $SEGUNDOS_TOTAL"
    echo "$HORAS hours, $MINUTOS minutes, $SEGUNDOS seconds"

    if [ $FPS_1 == "29.9" -o $FPS_1 == "30" -o $FPS_1 == "23.9" ]; then
    WIDTH_OUT=352
    HEIGHT_OUT=240
    else
    WIDTH_OUT=352
    HEIGHT_OUT=288
    fi

    echo "Video Output: ${WIDTH_OUT}x${HEIGHT_OUT}"

    # Ahora calculamos los valores pa los bordes.

    ANCHO_1_1_OUT=`echo "($HEIGHT_OUT * 4/3)"| bc -l`
    ALTO_OUT=`echo "$HEIGHT / ($WIDTH / $ANCHO_1_1_OUT)" | bc -l`
    # Redondeamos
    ALTO_OUT=`echo "scale=0 ; $ALTO_OUT/1"| bc -l`
    # Nos aseguramos de que sea par
    ALTO_OUT=`echo "scale=0 ; $ALTO_OUT+$ALTO_OUT%2" | bc -l`

    BORDE=`echo "scale=0 ; ($HEIGHT_OUT-$ALTO_OUT)/2"| bc -l`
    echo "alto sin bordes: $ALTO_OUT, con borde: $BORDE"

    # Borramos Pelicula.m1v y Pelicula.mpa
    rm -f Pelicula.m1v Pelicula.mpa


    cd $TEMPFOLDER

    echo "transcode -i "$FILE" -V -x mplayer -y mpeg2enc,mp2enc -F 1 -Z ${WIDTH_OUT}x$ALTO_OUT -Y -$BORDE,0,-$BORDE,0 --export_asr 2 -E 44100 -b $AUDIORATE -o $DIR/Pelicula -w $VIDEORATE"
    transcode -i "$FILE" -V -x mplayer -y mpeg2enc,mp2enc -F 1 -Z ${WIDTH_OUT}x$ALTO_OUT -Y -$BORDE,0,-$BORDE,0 --export_asr 2 -E 44100 -b $AUDIORATE -o $DIR/Pelicula -w $VIDEORATE

    #transcode -i "$FILE" -V -x mplayer -y mpeg -F $MPEG_OPTIONS -Z ${WIDTH_OUT}x$ALTO_OUT -Y -$BORDE,0,-$BORDE,0 --export_asr 2 -E 44100 -b $AUDIORATE -o $DIR/Pelicula

    rm $TEMPFOLDER/*
    rmdir $TEMPFOLDER

    cd $DIR

    # Si no hay Pelicula.m1v y Pelicula.mpa salir
    [ -f Pelicula.m1v -a -f Pelicula.mpa ] || exit 1

    rm -f Pelicula*.mpg

    #Ahora multiplexamos el .mpg
    mplex -f 1 -m 1 -S $CDSIZE Pelicula.m1v Pelicula.mpa -o Pelicula%d.mpg
    #tcmplex -i Pelicula.m1v -p Pelicula.mpa -o Pelicula.mpg -m 1

    # Y creamos las imagenes...
    for i in `ls Pelicula*mpg` ; do
    vcdimager -t vcd2 -c $i.cue -b $i.bin $i
    done
    -- Final divx2vcd --


    Divx2CVCD:

    Nuevo script Divx2CVCD (16/12/2002). Este script obtiene toda la información posible de el .avi, y calcula el bitrate del video automáticamente para que quepa en un CD en formato CVCD (VCD con bitrate variable). Se pueden probar con distintos valores de la variable QUANTUM. El Quantum, que es la calidad (como el CQ-Constant Quality del TMPGEnc), puede ir de 2 a 31, cuanto más cercano a 2 más calidad. Con un valor menor de 8 se obtiene buena calidad. AUDIORATE también se puede modificar. El script lo podéis descargar de aquí, y lo pego a continuación:

    -- Inicio divx2cvcd --
    !/bin/bash

    # Este script pasa un Divx a CVCD. Para los archivos temporales se
    # necesita al menos 4.5 Gigas (m1v y mpa, los .mpg y los .bin)

    DIR=`pwd`
    TEMPFOLDER=/tmp/divx2vcd-$RANDOM
    TEMP_TEMPLATE=/tmp/tcmplex-template-$RANDOM
    CDSIZE=795
    QUANTUM=5
    # Maxrate ahora es automatico
    #MAXRATE=900
    AUDIORATE=128

    if [ $# -eq 0 ]; then
    echo "Usage:"
    echo " divx2cvcd <divxfile>"
    exit 1
    fi

    FILE=$1
    if [ "$1" == "`basename $1`" ]; then
    FILE="$DIR/$1"
    fi

    mkdir $TEMPFOLDER
    cd $TEMPFOLDER

    tcprobe -i "$FILE" > $TEMPFOLDER/info

    WIDTH=`grep '\[avilib\] V:' $TEMPFOLDER/info | perl -e ' $line=<STDIN> ; $line =~ /width=(\d+)/ ; print $1' `
    HEIGHT=`grep '\[avilib\] V:' $TEMPFOLDER/info | perl -e ' $line=<STDIN> ; $line =~ /height=(\d+)/ ; print $1' `
    FPS=`grep '\[avilib\] V:' $TEMPFOLDER/info | perl -e ' $line=<STDIN> ; $line =~ /V: (.+?) fps/ ; print $1' `
    FPS_1=`echo "scale=1 ; $FPS/1"| bc -l`
    FRAMES=`grep '\[avilib\] V:' $TEMPFOLDER/info | perl -e ' $line=<STDIN> ; $line =~ /frames=(\d+)/ ; print $1' `
    SEGUNDOS_TOTAL=`echo "scale=0 ; ($FRAMES / $FPS)"| bc -l`
    HORAS=`echo "scale=0 ; ($SEGUNDOS_TOTAL / 3600)"| bc -l`
    MINUTOS=`echo "scale=0 ; (($SEGUNDOS_TOTAL - 3600 * $HORAS)/60)"| bc -l`
    SEGUNDOS=`echo "scale=0 ; ($SEGUNDOS_TOTAL % 60)"| bc -l`

    VIDEO_RATE=`echo "scale=0 ;(($CDSIZE * 1024 - ($AUDIORATE/8*$SEGUNDOS_TOTAL))*8 / $SEGUNDOS_TOTAL)"| bc -l`
    # +5%
    MAXRATE=`echo "scale=0 ; ($VIDEO_RATE * 105 / 100)" | bc -l`

    echo "*************** FILE INFO ***************"
    echo "Frame Size: ${WIDTH}x${HEIGHT} - FPS: $FPS"
    echo "Length: $FRAMES - Seconds: $SEGUNDOS_TOTAL"
    echo "$HORAS hours, $MINUTOS minutes, $SEGUNDOS seconds"
    echo "Recommended averagge video bitrate: $VIDEO_RATE"
    echo "Using max video bitrate: $MAXRATE"


    if [ $FPS_1 == "29.9" -o $FPS_1 == "30" -o $FPS_1 == "23.9" ]; then
    WIDTH_OUT=352
    HEIGHT_OUT=240
    else
    WIDTH_OUT=352
    HEIGHT_OUT=288
    fi

    echo "Video Output: ${WIDTH_OUT}x${HEIGHT_OUT}"

    # Ahora calculamos los valores pa los bordes.

    ANCHO_1_1_OUT=`echo "($HEIGHT_OUT * 4/3)"| bc -l`
    ALTO_OUT=`echo "$HEIGHT / ($WIDTH / $ANCHO_1_1_OUT)" | bc -l`
    # Redondeamos
    ALTO_OUT=`echo "scale=0 ; $ALTO_OUT/1"| bc -l`
    # Nos aseguramos de que sea par
    ALTO_OUT=`echo "scale=0 ; $ALTO_OUT+$ALTO_OUT%2" | bc -l`

    BORDE=`echo "scale=0 ; ($HEIGHT_OUT-$ALTO_OUT)/2"| bc -l`

    echo "alto sin bordes: $ALTO_OUT, con borde: $BORDE"

    # Borramos Pelicula.m1v y Pelicula.mpa
    rm -f Pelicula.m1v Pelicula.mpa


    cd $TEMPFOLDER
    #echo "transcode -i "$FILE" -V -x mplayer -y mpeg2enc,mp2enc -F 0,"-q 7" -Z ${WIDTH_OUT}x$ALTO_OUT -Y -$BORDE,0,-$BORDE,0 --export_asr 2 -E 44100 -b 160 -o $DIR/Pelicula -w $MAXRATE"
    transcode -i "$FILE" -V -x mplayer -y mpeg2enc,mp2enc -F 2,"-q $QUANTUM" -Z ${WIDTH_OUT}x$ALTO_OUT -Y -$BORDE,0,-$BORDE,0 --export_asr 2 -E 44100 -b $AUDIORATE -o $DIR/Pelicula -w $MAXRATE

    rm $TEMPFOLDER/*
    rmdir $TEMPFOLDER

    cd $DIR


    # Si no hay Pelicula.m1v y Pelicula.mpa salir
    [ -f Pelicula.m1v -a -f Pelicula.mpa ] || exit 1

    rm -f Pelicula*.mpg

    #Ahora multiplexamos el .mpg
    #mplex -f 2 -m 1 -V -S $CDSIZE -r $MAXRATE Pelicula.m1v Pelicula.mpa -o Pelicula%d.mpg

    echo "maxFileSize = $CDSIZE" > $TEMP_TEMPLATE
    tcmplex -i Pelicula.m1v -p Pelicula.mpa -o Pelicula.mpg -m 1 -F $TEMP_TEMPLATE
    rm $TEMP_TEMPLATE


    # Y creamos las imagenes...
    for i in `ls Pelicula*.mpg` ; do
    vcdimager -t vcd2 -c $i.cue -b $i.bin $i
    done



    -- Final divx2cvcd --



    Divx2SVCD:

    Para pasar a SVCD es básicamente el mismo script sólo que adaptado para crear un SVCD. Los valores que se puden modificar son CDSIZE, QUANTUM, MAXVIDEORATE y AUDIORATE. Ya no hace falta crear un template porque lo crea automáticamente. Igual que antes, os podéis descargar el script de aquí, y además lo pego a continuación:

    -- Inicio divx2svcd --

    #!/bin/bash

    # Este script pasa un Divx a SVCD. Para los archivos temporales se
    # necesita al menos 4.5 Gigas (m2v y mpa, los .mpg y los .bin)

    DIR=`pwd`
    TEMPFOLDER=/tmp/divx2svcd-$RANDOM
    TEMPLATE=$TEMPFOLDER/template
    CDSIZE=795
    QUANTUM=7
    MAXVIDEORATE=4000000
    AUDIORATE=160

    if [ $# -eq 0 ]; then
    echo "Usage:"
    echo " divx2svcd <divxfile>"
    exit 1
    fi


    FILE=$1
    if [ "$1" == "`basename $1`" ]; then
    FILE="$DIR/$1"
    fi


    mkdir $TEMPFOLDER
    cd $TEMPFOLDER

    # Create a template for bbmpeg encoder
    echo "quant_value = $QUANTUM" > $TEMPLATE
    echo "max_bitrate = $MAXVIDEORATE" >> $TEMPLATE
    echo "maxFileSize = $CDSIZE" >> $TEMPLATE

    echo "Dir: $DIR"
    echo "Temp: $TEMPFOLDER"
    tcprobe -i "$FILE" > $TEMPFOLDER/info

    WIDTH=`grep '\[avilib\] V:' $TEMPFOLDER/info | perl -e ' $line=<STDIN> ; $line =~ /width=(\d+)/ ; print $1' `
    HEIGHT=`grep '\[avilib\] V:' $TEMPFOLDER/info | perl -e ' $line=<STDIN> ; $line =~ /height=(\d+)/ ; print $1' `
    FPS=`grep '\[avilib\] V:' $TEMPFOLDER/info | perl -e ' $line=<STDIN> ; $line =~ /V: (.+?) fps/ ; print $1' `
    FPS=`echo "scale=1 ; $FPS/1"| bc -l`
    FRAMES=`grep '\[avilib\] V:' $TEMPFOLDER/info | perl -e ' $line=<STDIN> ; $line =~ /frames=(\d+)/ ; print $1' `
    SEGUNDOS_TOTAL=`echo "scale=0 ; ($FRAMES / $FPS)"| bc -l`
    HORAS=`echo "scale=0 ; ($SEGUNDOS_TOTAL / 3600)"| bc -l`
    MINUTOS=`echo "scale=0 ; (($SEGUNDOS_TOTAL - 3600 * $HORAS)/60)"| bc -l`
    SEGUNDOS=`echo "scale=0 ; ($SEGUNDOS_TOTAL % 60)"| bc -l`

    echo "*************** FILE INFO ***************"
    echo "Frame Size: ${WIDTH}x${HEIGHT} - FPS: $FPS"
    echo "Length: $FRAMES - Seconds: $SEGUNDOS_TOTAL"
    echo "$HORAS hours, $MINUTOS minutes, $SEGUNDOS seconds"

    if [ $FPS == "29.9" -o $FPS == "30" -o $FPS == "23.9" ]; then
    WIDTH_OUT=480
    HEIGHT_OUT=480
    MPEG_OPTIONS=s,2,$TEMPLATE
    else
    WIDTH_OUT=480
    HEIGHT_OUT=576
    MPEG_OPTIONS=s,3,$TEMPLATE
    fi

    echo "Salida: $WIDTH_OUT x $HEIGHT_OUT"

    # Ahora calculamos los valores pa los bordes.

    ANCHO_1_1_OUT=`echo "($HEIGHT_OUT * 4/3)"| bc -l`
    ALTO_OUT=`echo "$HEIGHT / ($WIDTH / $ANCHO_1_1_OUT)" | bc -l`
    # Redondeamos
    ALTO_OUT=`echo "scale=0 ; $ALTO_OUT/1"| bc -l`
    # Nos aseguramos de que sea par
    ALTO_OUT=`echo "scale=0 ; $ALTO_OUT+$ALTO_OUT%2" | bc -l`

    BORDE=`echo "scale=0 ; ($HEIGHT_OUT-$ALTO_OUT)/2"| bc -l`
    echo "alto sin bordes: $ALTO_OUT, con borde: $BORDE"

    # Borramos Pelicula.m1v y Pelicula.mpa
    rm -f Pelicula.m2v Pelicula.mpa


    cd $TEMPFOLDER
    echo "Ejecutando: transcode -i "$FILE" -V -x mplayer -y mpeg -F $MPEG_OPTIONS -Z ${WIDTH_OUT}x$ALTO_OUT -Y -$BORDE,0,-$BORDE,0 --export_asr 2 -E 44100 -b $AUDIORATE -o $DIR/Pelicula"
    transcode -i "$FILE" -V -x mplayer -y mpeg -F $MPEG_OPTIONS -Z ${WIDTH_OUT}x$ALTO_OUT -Y -$BORDE,0,-$BORDE,0 --export_asr 2 -E 44100 -b $AUDIORATE -o $DIR/Pelicula
    rm $TEMPFOLDER/*
    rmdir $TEMPFOLDER

    cd $DIR

    [ -f Pelicula.m2v -a -f Pelicula.mpa ] || exit 1

    rm -f Pelicula*.mpg

    #Ahora multiplexamos el .mpg
    tcmplex -i Pelicula.m2v -p Pelicula.mpa -o Pelicula.mpg -m s -F $TEMPLATE


    # Y creamos las imagenes...
    for i in `ls Pelicula*mpg` ; do
    vcdimager -t svcd -c $i.cue -b $i.bin $i
    done



    -- Final divx2svcd --



    Subtítulos:

    Si tenemos un divx en otro idioma, y a parte tenemos un archivo con subtítulos, también es posible meterlos al crear el *VCD. Los subtítulos quedarán grabados encima de la película, formando parte de ella (es decir, que no se pueden quitar).

    Bien, el método es muy sencillo, basta tener los subtítulos en un formato que esté soportado por mplayer (subrip, microdvd... soporta casi todos), y poner el archivo en el mismo directorio que el .avi, y renombrar el archivo de subtítulos de forma que tenga exactamente el mismo nombre que el .avi (salvo la extensión, claro). De esta forma conseguimos que mplayer reproduzca automáticamente los subtítulos. Si queréis podeis comprobar antes de "transcodear" que al lanzar mplayer <archivo.avi> los subtítulos son cargados.

    Bueno, espero que os haya servido de ayuda esta mini-guía y los scripts.


    Última Edición miércoles, 10 septiembre 2003 @ 13:59 Ver la versión para imprimir



    cc

    Aviso legal: Condiciones de copia y distribución.