vcdimager and "bad packet"
Michael Joyner
mjoyner at hq.dyns.cx
Thu Nov 20 22:59:20 PST 2003
You can "transcode" the avi files to divx avi file using mencoder before
feeding to transcode (including size translations, etc),
this will most likey make transcode much happier!
also the following script that I use for recoding avis may be useful. :)
(doesn't use transcode)
you will of course have to fix it up for your situation, file system
also, note that it is definately a work in progress. :)
btw, all the spanish segments were taken from a web site somewhere,
unfortunately, don't know where, so can't give proper copyright stuff
I think it was GPL though.
#!/bin/sh
AUDIORATE=224
WIDTH_OUT=480
HEIGHT_OUT=480
CHAPTERS="0:00,10:00,20:00,30:00,40:00,50:00,1:00:00,1:10:00,1:20:00,1:30:00,1:40:00,1:50:00,2:00:00,2:10:00,2:20:00,2:30:00,2:40:00,2:50:00,3:00:00,3:10:00,3:20:00,3:30:00,3
:40:00,3:50:00,4:00:00"
#CHAPTERS="0"
BASE_CD=700
cd ~/dvdrip
for i in avis/*; do
if [ ! -s "$i" ]; then rm -vf "$i"; fi
done
TITLE_COUNT=0
for i in avis/*; do
TITLE_COUNT=$(($TITLE_COUNT+1));
done
xmessage -timeout 30 -center "Found $TITLE_COUNT Titles for miniDVD" &
CDSIZE=$(($BASE_CD/$TITLE_COUNT))
# CHOICE="`xmessage -print -center -buttons "1/10 CD,1/5 CD,1/4CD,1/3
CD,1/2 CD,ONE CD" \
# "How Many CD's for these Movies?"`"
# echo $CHOICE
# if [ "$CHOICE" = "1/10 CD" ]; then CDSIZE=$(($BASE_CD/10)); fi
# if [ "$CHOICE" = "1/5 CD" ]; then CDSIZE=$(($BASE_CD/5)); fi
# if [ "$CHOICE" = "1/4 CD" ]; then CDSIZE=$(($BASE_CD/4)); fi
# if [ "$CHOICE" = "1/3 CD" ]; then CDSIZE=$(($BASE_CD/3)); fi
# if [ "$CHOICE" = "1/2 CD" ]; then CDSIZE=$(($BASE_CD/2)); fi
# if [ "$CHOICE" = "ONE CD" ]; then CDSIZE=$(($BASE_CD)); fi
rm -rfv vcd3/*
for i in avis/*; do
#imported script stuff (that is in Espanol)
tcprobe -i "$i" > vcd3/info
WIDTH=`grep '\[avilib\] V:' vcd3/info | \
perl -e ' $line=<STDIN> ; $line =~ /width=(\d+)/ ;
print $1' `
HEIGHT=`grep '\[avilib\] V:' vcd3/info | \
perl -e ' $line=<STDIN> ; $line =~ /height=(\d+)/ ;
print $1' `
FPS=`grep '\[avilib\] V:' vcd3/info | \
perl -e ' $line=<STDIN> ; $line =~ /V: (.+?) fps/ ;
print $1' `
FPS_1=`echo "scale=1 ; $FPS/1"| bc -l`
FRAMES=`grep '\[avilib\] V:' vcd3/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`
if [ $VIDEO_RATE -ge 8000 ]; then VIDEO_RATE=8000; fi
#VIDEO_RATE=1150
rm vcd3/info
echo "*************** FILE INFO ***************"
echo "Frame Size: ${WIDTH}x${HEIGHT} - FPS: $FPS"
echo "Length: $FRAMES - Seconds: $SEGUNDOS_TOTAL"
echo "$HORAS hours, $MINUTOS minutes, $SEGUNDOS seconds"
rm vcd3/info
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
echo "VIDEO-RATE: $VIDEO_RATE"
CBR="`echo "$VIDEO_RATE * 1000" | bc -l`"
cat > auto.prof << END
#VCD profile to try and fit space allocated
fixed_vbv_delay = 1
vbv_buffer_size = 230
cbr = 1
cbr_bitrate = $CBR.0
quant_value = 2
qscale_type = 0
vbr_mux = 0
video_buf_size = 230
use_comp_bitrate = 1
max_bitrate = $CBR.0
END
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"
echo
INASPECT="$WIDTH_OUT:$ALTO_OUT"
B=`basename "$i"`
C="$B ($HORAS:$MINUTOS:$SEGUNDOS minutes playtime) $CHOICE
$VIDEO_RATE"
BB=vcd3/$$.temp.avi
echo "^[]0;$C - Stage 1 (Resizing)^G"
mencoder -aspect "$INASPECT" -noskiplimit -ovc lavc \
-lavcopts
vcodec=mpeg2video:vhq:vrc_minrate=${VIDEO_RATE}:vbitrate=${VIDEO_RATE}:vrc_maxrate=${VIDEO_RATE}:aspect=4/3
\
-oac copy \
-ofps 23.976 \
-vop expand=$WIDTH_OUT:$HEIGHT_OUT,scale -zoom
-xy $WIDTH_OUT \
-o "$BB" "$i"
# -oac pcm -srate 44100 \
echo "^[]0;$C - Stage 2 (Converting into streams)^G"
ffmpeg -i "$BB" \
-b "${VIDEO_RATE}" \
-r 23.976 \
-aspect "4:3" \
-vcodec copy \
-acodec mp2 \
-ab ${AUDIORATE} \
-ar 44100 \
-ac 2 \
-f vcd \
"vcd3/${B}.mpg"
#echo "^[]0;$C - Stage 3 (Multiplexing into VOB)^G"
#mplex -f 8 -V -o "vcd3/${B}.vob" "vcd3/${B}.m1v" "vcd3/${B}.mp2"
# echo "^[]0;$C - Stage 4 (Adding Movie Title to DVD)^G"
#dvdauthor\
#-o vcd3/mydvd \
#-a "en" \
#-v "ntsc+4:3+${WIDTH_OUT}x${HEIGHT_OUT}" \
#-t \
#"vcd3/${B}.vob"
rm "$BB"
rm "vcd3/${B}.m1v"
rm "vcd3/${B}.m2v"
rm "vcd3/${B}.mp2"
rm "vcd3/${B}.mp3"
rm "vcd3/${B}.vob"
#cdrdao blank --device 0,0,0 --force --driver generic-mmc-raw
#cd vcd3 || exit 0
#vcdxgen -t svcd --nopbc *vcd
#vcdxbuild -p --gui *xml
#cdrdao write --device 0,0,0 --force --driver generic-mmc-raw *.cue
#cd ..
echo "^[]0;Done Converting $C^G"
echo
exit 0
Randy Pratt wrote:
>I've been transcoding some avi files to mpeg2 format to make SVCDs so
>that I can watch them on the tv.
>
>I've not had any problems with the transcoding, but when i use
>vcdimager to create the bin/cue files I'll get a warning like:
>
> ++ WARN: bad packet at packet #314266 (stream byte offset
> 730354184) -- remaining 796144300 bytes of stream will be ignored
>
>I did not create the original avi file but I'm guessing that this
>problem was created when two avi files were joined together to make
>one file.
>
>I'd appreciate any pointers on how to repair the breakage or any
>method that could be used as a work-around. I've looked thru
>man transcode and tons of google but so far found nothing to
>address this.
>
>Any ideas appreciated!
>
>Thanks,
>
>Randy
>
>
>_______________________________________________
>freebsd-multimedia at freebsd.org mailing list
>http://lists.freebsd.org/mailman/listinfo/freebsd-multimedia
>To unsubscribe, send any mail to "freebsd-multimedia-unsubscribe at freebsd.org"
>
>
More information about the freebsd-multimedia
mailing list