# Pasar varios Divx a DVD Como:

## kabutor

Aqui os pongo mis cortas experiencias haciendo un DVD en Linux por si a alguien le interesa, la mayoria de la informacion la he sacado de Frikis.org y de un post de los foros gentoo.

Como herramientas he usado transcode-0.6.11 y k3b-0.10.3-r1 que en esots momentos esta masked y es mejor emerger con el ACCEPT_KEYWORDS="x86" que no se os olvide añadir las USE flags +dvd +dvdr (asi nos emergera las dvd+rwtools) y dvdauthor-0.5.0.

Con esto teniendo el AVI tan solo tenemos que convertirlo primero a MPEG. Este es el paso mas largo y complicado de todos, ya que dependiendo de como sea el tamaño original de la pelicula hemos de pasarle ciertas opciones a transcode, ya que al ripear las pelis la gente quita por ejemplo las bandas negras y al revertirlo a MPEG lo que hace el transcode es hacer un zoom de la imagen del centro.

Ejemplo para pasar una pelicula en 16:9 de 652x272 a DVD yo he usado:

```
#transcode -i peli.avi -V -y mpeg,mp2enc -F d,1 -E 48000 -b 224 -o video -m audio -Y -80,0 -Z 720 --export_asr 3

-Y 0,0,0,0 -> es para quitar arriba, izquierda,abajo, derecha las lineas negras, con valores negativos se añade una franja negra.

-Z 720x576 -> tamaño del video de salida, si solo se pone el primer valor el te fija el segundo dependiendo del aspect ratio

--export_asr -> es el Aspect ratio de la peli 3 = 16:9 (man transcode).

tambien se puede especificar que mantenga el aspect ratio pero a mi no me ha funcionado, os pego lo que vi en google..

/----------------\                            /---480-----\

|                |                            | black     |

|720x306 = 2.35:1| -> -Z 480x480 --keep_asr ->|-----------4

|                |                            | 480x204   8

\----------------/                            |-----------0

                                              | black     |

                                              \-----------/

```

esto genera dos archivos video.m2v y audio.mpa, ahora hay que unirlos:

```
#mplex -f 8 audio.mpa video.m2v -o pelicula.out

-f 8 -> formato dvd
```

Ahora crear el dvd en si en el disco duro.

```
#mkdir dvd

#dvddirgen -o dvd (genera las carpetas del dvd)

Meter el mpeg

#dvdauthor -o dvd/ pelicula.out

(si queremos meter varias peliculas seria:

#dvdauthor -o dvd/ pelicula.out pelicula2.out pelicula3.out ..)

Creamos los archivos IFO que contienen la informacion del dvd

#dvdauthor -o dvd/ -T

Creamos la iso para grabarla:

#mkisofs -dvd-video -v -o dvd.iso dvd

```

Con esto tenemos, tras haber usado un monton de espacio por cierto, el archivo dvd.iso que con el mismo K3B lo grabamos con la opcion del menu de utilidades de DVD, Write dvd ISO.

Como ya digo el paso mas dificil es el primero, pq dependiendo del video original las opciones del transcode han de cambiar, o si alguien lo sabe hacer automaticamente que lo diga ahora.  :Very Happy: 

La ventaja de esto es que en un solo DVD entran dos - tres peliculas, un DivX de 750 Megas crea un pelicula.out de 1.2 - 1.3 Gb hasta 4.3 Gb que entra en un DVD da para algo como veis.

----------

## RAPUL

Gracias por la información tenia pensado comprarme una grabadora de DVDs así que la información es bienvenida.

----------

## cnyx

gracias por la info kabutor

como queda la calidad con respecto a la del divx?

----------

## kabutor

De calidad queda bien, el DivX se ve mejor, pero es q estamos convirtiendo de 600x200 lineas a 320xalgo lineas con lo que no da tanta.. 

Sigo investigando como conseguir una mayor calidad, la cosa es que la peli se ve muy bien, pero en algunos planos se ve un pelin pixelizada.. 

Si descubro como darle mayor calidad lo comento  :Smile: 

----------

## RAPUL

Has puesto -d,1 que significa utilizar un codec DVD compliant y además un reescalado hacia 352x288.

Si pones -d,0 según dice el man no harás ese escalado así que tendrás mejor resolución... aunque claro ocupará más... o tendrás que utilizar un bitrate más bajo...

----------

## kabutor

Bueno, ya he probado unas cuantas cosas y os puedo mejorar la informacion y sobre todo el metodo, ya que lo malo que tenia este metodo es q para integrar subtitulos, yo no sabia hacerlo, encima ponerle subtitulos a un DVD tiene guasa, aun no se muy bien como hacerlo..

La parte final del metodo seria casi la misma, una vez tengamos el mpg, lo unico que cambia es que al hacer el mplex tenemos que poner %d en el nombre del fichero pq al llegar a 700 megas necesita partir el fichero (no se porque) y si no le ponemos eso ahi se para.

La parte del principio, el convertir el video en mpg lo he cambiado radical, basicamente es modificar el script de aqui y cambiarle el bitrate para que coga uno alto, y el sonido a 48kHz (estandard DVD).

Os pego el script en el comentario de abajo por si alguien le interesa, solo decir que la calidad es muy superior que al hacerlo con transcode, ademas la entrada de video se hace con mplayer, con lo que añadirle subtitulos es facil, ademas un ogm se le puede pasar la entrada al script de -aid 1 etc para elegir el audio que queremos.

El tamaño que ocupa es de un par de gigas la peli..  :Smile: 

```

EDIT:#!/bin/bash

# Este script pasa un Divx a CVCD. Para los archivos temporales se

# necesita al menos 4.5 Gigas (mpv y mpa, los .mpg y los .bin)

# This script conversts a Divx file to CVCD. For temp files, it

# needs at least 4.5 Gb free (mpv, mpa, .mpg and .bin files)

# If movie length can't be determined by tcprobe, it will use

# this value (1 hour and 53 minutes). If your file is not an avi

# you can set here its length in seconds to get the CVCD adjusted

# to fit on the CD with maximum bitrate

DEFAULT_MOVIE_SECONDS=6800

# Default is to transcode a file with 16:9 (most divx files)

# If you want to transcode a file in 4:3 (letterboxed), like a

# recording from TV, you need to change this to "-M BICUBIC"

#SCALING="-M BICUBIC"

SCALING="-M WIDE2STD"

# CDSIZE Values. VCDs are write in Mode 2, so the filesizes are the

# the following: 

#       74 Min/650Mb ---> CDSIZE=735

#       80 Min/700Mb ---> CDSIZE=795

CDSIZE=1795

# Quantum is the quality, values are 1-31,

# the nearest to 1, the better

QUANTUM=3

# Audio bitrate for the mp2 stream

AUDIORATE=128

if [ $# -eq 0 ]; then

        echo "Usage:"

        echo "        divx2cvcd <divxfile> [mplayer-params]"

        exit 1

fi

DIR=`pwd`

TEMPFOLDER=/tmp/divx2vcd-$RANDOM

TEMP_TEMPLATE=/tmp/tcmplex-template-$RANDOM

LOG="$DIR/log"

rm $LOG

FILE=$1

if [ "$1" == "`basename \"$1\"`" ]; then

        FILE="$DIR/$1"

fi

shift 1

MPLAYER_PARAMS=$*

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 'frame rate' $TEMPFOLDER/info | \

  perl -e ' $line=<STDIN> ; $line =~ /frame rate: -f (.+?) \[/  ;  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`

#If couldn't get the length, use the default

[ "$SEGUNDOS_TOTAL" == "" ] && SEGUNDOS_TOTAL=$DEFAULT_MOVIE_SECONDS

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`

MAXRATE=$VIDEO_RATE

[ "$MAXRATE" == "" ] && MAXRATE=1050

[ $MAXRATE -gt 2000 ] && MAXRATE=2000

echo "*************** FILE INFO ***************" >> $LOG

echo "Frame Size: ${WIDTH}x${HEIGHT}  -   FPS: $FPS" >> $LOG

echo "Length: $FRAMES   -  Seconds: $SEGUNDOS_TOTAL" >> $LOG

echo "$HORAS hours, $MINUTOS minutes, $SEGUNDOS seconds" >> $LOG

echo "Recommended averagge video bitrate: $VIDEO_RATE" >> $LOG

echo -e "Using max video bitrate: $MAXRATE \n" >> $LOG

FRAMERATE=""

NORM=""

if [ $FPS_1 == "29.9" -o $FPS_1 == "30" -o  $FPS_1 == "23.9" -o $FPS_1 == "24" ]; then

        WIDTH_OUT=352

        HEIGHT_OUT=240

        NORM="-n n"

        [ $FPS_1 == "29.9" ] && FRAMERATE="-F 4"

        [ $FPS_1 == "30" ] && FRAMERATE="-F 5"

        [ $FPS_1 == "23.9" ] && FRAMERATE="-F 1"

        [ $FPS_1 == "24" ] && FRAMERATE="-F 2"

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.mpv y Pelicula.mpa

rm -f Pelicula.mpv Pelicula.mpa

cd $TEMPFOLDER

mkfifo -m 660 stream.yuv

mkfifo -m 660 audiodump.wav

echo "mplayer -noframedrop -vo yuv4mpeg -ao pcm -waveheader \

    -v -osdlevel 0 $MPLAYER_PARAMS \"$FILE\" &

    " >> $LOG

mplayer -noframedrop -vo yuv4mpeg -ao pcm -waveheader \

    -v -osdlevel 0 $MPLAYER_PARAMS "$FILE" &

echo "(cat stream.yuv | yuvscaler -v 0 $SCALING -O VCD $NORM | \

    mpeg2enc -v 0 -s -f 2 -b $MAXRATE -q $QUANTUM $FRAMERATE $NORM -4 2 -2 1 \

       -o $DIR/Pelicula.mpv) &

       "  >> $LOG

(cat stream.yuv | yuvscaler -v 0 $SCALING -O VCD $NORM | \

    mpeg2enc -v 0 -s -f 2 -b $MAXRATE -q $QUANTUM $FRAMERATE $NORM -4 2 -2 1 \

       -o $DIR/Pelicula.mpv) &

mp2enc -b $AUDIORATE -r 48000 -o $DIR/Pelicula.mpa < audiodump.wav &

wait

RETVAL=$?

if [ $RETVAL -ne 0 ]; then

        echo -e "\n**** ERROR during transcoding. Error value $RETVAL"

        exit 1

fi

rm $TEMPFOLDER/*

rmdir $TEMPFOLDER

cd $DIR

# Si no hay Pelicula.mpv y Pelicula.mpa salir

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

rm -f Pelicula*.mpg

#Ahora multiplexamos el mpg

echo "maxFileSize = $CDSIZE" > $TEMP_TEMPLATE

mplex -f 8 Pelicula.mpv  Pelicula.mpa -o Pelicula-%d.mpg

rm $TEMP_TEMPLATE

[ -n "`ls Pelicula*mpg 2> /dev/null`" ] || exit 1

# Y creamos las imagenes...

echo -e "\n****** CVCD creation finished successfully"

```

----------

