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