jockelb
17-12-2005, 10:19
Ich habe im I-Net ein Skrip gefunden was divx Film zu svcd umbauen kann. Leider scheint es veraltet zu sein und ich möchte das für mich ändern.Entstehen soll immer nur eine CD
Mir wird die Laufzeit des Filmes angezeigt.
$Horas für Stunden
$Minutos für Minuten
$SEGUNDOS für Sekunden
Des weitern ist die kb grösse einer CD in 834560kb festgelegt(mit überbrennen) in der Variable CDBYTE
Ich möchte nun die gesamt Sekunden von dem Film in der Variable
SEK_TOTAL haben um dann die Bitrate des Filmes zu berechen.
Das würde dann gerechnet CDBYTE / SEK_TOTAL -24 *8
Das subrahieren von 24 ist nötig weil der Film eine Audio Bitrate von 192 haben soll (192/8=24)
Das multiplizieren ist nötig um die Bit zu haben.
Wenn ich das alles per Hand mache bekomme ich für eine Transcode Zeile ein recht gutes Ergebniss.
Leider habe ich solche Lösungen das letzte mal mit eine C64 gemacht. Das bekomme ich heute einfach nicht mehr hin.
MFG
Das Skript bisher
#!/bin/sh
# 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 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=815
QUANTUM=7
MAXVIDEORATE=4000000
AUDIORATE=192
CDBYTE=834560
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 "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"
exit 0
Mir wird die Laufzeit des Filmes angezeigt.
$Horas für Stunden
$Minutos für Minuten
$SEGUNDOS für Sekunden
Des weitern ist die kb grösse einer CD in 834560kb festgelegt(mit überbrennen) in der Variable CDBYTE
Ich möchte nun die gesamt Sekunden von dem Film in der Variable
SEK_TOTAL haben um dann die Bitrate des Filmes zu berechen.
Das würde dann gerechnet CDBYTE / SEK_TOTAL -24 *8
Das subrahieren von 24 ist nötig weil der Film eine Audio Bitrate von 192 haben soll (192/8=24)
Das multiplizieren ist nötig um die Bit zu haben.
Wenn ich das alles per Hand mache bekomme ich für eine Transcode Zeile ein recht gutes Ergebniss.
Leider habe ich solche Lösungen das letzte mal mit eine C64 gemacht. Das bekomme ich heute einfach nicht mehr hin.
MFG
Das Skript bisher
#!/bin/sh
# 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 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=815
QUANTUM=7
MAXVIDEORATE=4000000
AUDIORATE=192
CDBYTE=834560
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 "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"
exit 0