Ticket #3693: nuvexport-avidemux.patch
File nuvexport-avidemux.patch, 30.4 KB (added by , 17 years ago) |
---|
-
nuvexport-ojom/contrib/nuv2divx
1 #!/bin/bash 2 3 #MythTv User Job 4 #nuv2divx %DIR%/%FILE% %DIR%/%CHANID%_%STARTTIME%.divx "%TITLE%" "%SUBTITLE%" "%DESCRIPTION%" "%CATEGORY%" 5 6 FILENAME="$1" 7 OUTFILE="$2" 8 TITLE="$3" 9 SUBTITLE="$4" 10 DESCRIPTION="$5" 11 CATEGORY="$6" 12 VFADD="" 13 VFPRE="" 14 ASPECT="" 15 16 17 echo "$@" > /tmp/running 18 echo Running 19 20 if [ "$OUTFILE" = "" ] ; then 21 OUTFILE="${FILENAME%.mpg}.divx" 22 fi 23 24 LAVCOPT=vcodec=mpeg4:vbitrate=2000:trell:threads=2 25 26 if [ "$DEBUG" = "" ] ; then 27 DEBUG="-quiet" 28 else 29 DEBUG="" 30 fi 31 32 echo mencoder -noskip $DEBUG "${FILENAME}" $VFPRE -vf kerndeint,denoise3d $VFADD $SCALE -ffourcc divx -ovc lavc -lavcopts $LAVCOPT -oac mp3lame -lameopts cbr:br=192:highpassfreq=0:lowpassfreq=0 -o "${OUTFILE}" >> /tmp/running 33 34 tail -n /tmp/running 35 36 echo MENCODER 37 38 time mencoder -noskip $DEBUG "${FILENAME}" $VFPRE -vf kerndeint,denoise3d $VFADD $SCALE -ffourcc divx -ovc lavc -lavcopts $LAVCOPT -oac mp3lame -lameopts cbr:br=192:highpassfreq=0:lowpassfreq=0 -o "${OUTFILE}" -
nuvexport-ojom/contrib/divxcut
Property changes on: nuvexport-ojom/contrib/nuv2divx ___________________________________________________________________ Name: svn:executable + *
1 #! /bin/bash 2 # Cut divx files to remove cutlists... 3 # Originally Written by Gavin Hurlbut <gjhurlbu@gmail.com> 4 # Modified for DivX by J. Berger <jberger@netins.net> 5 # 6 # Prerequisites: 7 # avidemux2 - http://fixounet.free.fr/avidemux/ 8 # mecoder - http://www.mplayerhq.hu/ 9 # 10 # Usage: divxcut inputfile outputfile segmentList 11 # where segmentList is a space separated list of frame regions to keep 12 # (i.e. -1999 3000-5000 6000-) 13 echo divxcut $@ 14 LOCAL_PRELOAD= 15 DIVXSTORE=/maxline/store 16 17 if [ ! -d ${DIVXSTORE} ] ; then 18 mkdir ${DIVXSTORE} 19 fi 20 21 22 FILENAME=$1 23 BASENAME=`basename ${FILENAME} .mpg` 24 OUTFILE=$2 25 # Determine later 26 LASTFRAME=0 27 28 29 echo Filename \"${FILENAME}\" 30 echo OutFile \"${OUTFILE}\" 31 32 shift 2 33 CUTLIST=$* 34 35 echo Retain Cutlist \"${CUTLIST}\" 36 37 if [ ! -f ${DIVXSTORE}/${BASENAME}.divx ] 38 then 39 echo Converting to DivX 40 nice -n 19 nuv2divx ${FILENAME} ${DIVXSTORE}/${BASENAME}.divx 41 else 42 echo *************Looks like it has already been converted to DivX.**************** 43 fi 44 45 LASTFRAME=`cat ${DIVXSTORE}/${BASENAME}.divx 2> /dev/null | perl -e ' 46 read(STDIN,$data,140); 47 read(STDIN,$date,4); 48 $frames=unpack("V",$date); 49 print $frames; 50 '` 51 let LASTFRAME-- 52 echo Last Frame ${LASTFRAME} 53 if [ ${LASTFRAME} -lt 0 ] ; then 54 echo *** ${DIVXSTORE}/${BASENAME} is either corrupt or 55 echo *** in the process of being converted to divx. 56 echo *** Please check and retry again. 57 exit 58 fi 59 60 cat > ${BASENAME}.cut << EOF 61 //AD <- Needed to identify// 62 63 var app = new Avidemux(); 64 65 //** Video ** 66 // 01 videos source 67 app.load("${DIVXSTORE}/${BASENAME}.divx"); 68 app.clearSegments(); 69 EOF 70 71 72 73 KEYFRAME=1 74 cat /dev/null > ${BASENAME}.cut2 75 cat >> ${BASENAME}.cut2 << EOF 76 app.addSegment(0,0,${KEYFRAME}); 77 EOF 78 count=1 79 for i in ${CUTLIST} 80 do 81 START=`echo $i | cut -d '-' -f 1` 82 END=`echo $i | cut -d '-' -f 2` 83 # echo START $START END $END 84 if [ .${START}. = .. ] 85 then 86 START=${KEYFRAME} 87 fi 88 89 if [ ${START} -ge ${LASTFRAME} ] 90 then 91 continue 92 fi 93 94 if [ .${END}. = .. ] 95 then 96 END=${LASTFRAME} 97 fi 98 LENGTH=$((${END} - ${START} + 1)) 99 if [ ${LENGTH} -le 0 ] 100 then 101 echo LENG $LENGTH 102 continue 103 fi 104 cat >> ${BASENAME}.cut2 << EOF 105 app.addSegment(0,${START},${LENGTH}); 106 EOF 107 count=$((${count} + 1)) 108 done 109 echo // ${count} segments >> ${BASENAME}.cut 110 111 cat ${BASENAME}.cut2 >> ${BASENAME}.cut 112 cat >> ${BASENAME}.cut << EOF 113 //** Video Codec conf ** 114 app.video.codec("Copy","CQ=4","0 "); 115 116 //** Audio ** 117 app.audio.reset(); 118 app.audio.codec("copy",128); 119 app.audio.normalize=false; 120 app.audio.delay=0; 121 app.setContainer("AVI"); 122 setSuccess(1); 123 //app.Exit(); 124 125 //End of script 126 EOF 127 128 echo Cutting out commercials with avidemux2 129 130 nice -n 9 xvfb-run -a avidemux --nogui --autoindex --rebuild-index --force-smart --load "${DIVXSTORE}/${BASENAME}.divx" --run ${BASENAME}.cut --save "${OUTFILE}" --quit 2> /dev/null 131 132 133 echo Cleaning up 134 echo rm ${DIVXSTORE}/${BASENAME}.divx 135 if [ "$DEBUG" = "" ] ; then 136 rm -f ${BASENAME}.cut ${BASENAME}.cut2 137 fi 138 # vim:ts=4:sw=4:ai:et:si:sts=4 139 -
nuvexport-ojom/contrib/nuv2mp3
Property changes on: nuvexport-ojom/contrib/divxcut ___________________________________________________________________ Name: svn:executable + *
1 #!/bin/sh 2 3 # Mythtv User Job 4 # nuv2mp3 %DIR%/%FILE% \"%TITLE%-%SUBTITLE%\" 5 6 FILENAME="$1" 7 TITLE="$2" 8 OUTFILE="$3" 9 if [ "$TITLE" = "" ] ; then 10 TITLE="Unknown" 11 fi 12 if [ "$OUTFILE" = "" ] ; then 13 OUTFILE="${FILENAME%.mpg}.mp3" 14 fi 15 #/usr/local/bin/mencoder ${FILENAME} 16 rm -f ${FILENAME%.mpg}.wav 17 /usr/bin/mkfifo ${FILENAME%.mpg}.wav 18 /usr/local/bin/mplayer -cache 512 -prefer-ipv4 -vc dummy -vo null -nolirc -nortc -ao pcm:file=${FILENAME%.mpg}.wav $FILENAME > /dev/null & 19 RAW_PID=$! 20 /usr/bin/lame --quiet -q 0 -a --abr 16 -m m --lowpass 8 --lowpass-width 0 --resample 11.025 --tt "$TITLE" --ta "MythTv" --tl "MythTv-`date +%D`" --ty `date +%Y` --tc "MythTv" --tg 101 ${FILENAME%.mpg}.wav $OUTFILE 21 rm -f ${FILENAME%.mpg}.wav 22 -
nuvexport-ojom/contrib/nuv2mp4
Property changes on: nuvexport-ojom/contrib/nuv2mp3 ___________________________________________________________________ Name: svn:executable + *
1 #!/bin/sh 2 3 FILENAME="$1" 4 OUTFILE="$2" 5 BITRATE="1000" 6 if [ "$3" = "" ] ; then 7 # size = ( ( (size * 1024) - ((framerate * duration * overhead) / 1024) ) * 1024 ) / 1000; 8 DURATION=`nuv2length $1 | awk '{print $2}'` 9 else 10 DURATION=$3 11 fi 12 if [ "$DURATION" = "0" ] ; then 13 14 echo Estimating length with midentify >$1.log 15 DURATION=`midentify $FILENAME | grep ID_LENGTH | awk -F "=" '{print $2}'` 16 fi 17 18 if [ "$DURATION" != "0" ] ; then 19 20 FORMULA='( ( (698 \* 1024) - ((29.97 \* ' 21 FORMULA=$FORMULA$DURATION 22 FORMULA=$FORMULA' \* 24) / 1024) ) \* 1024 ) / 1000 \* 8 / ' 23 FORMULA=$FORMULA$DURATION 24 echo $FORMULA > /tmp/formula.$$ 25 sed -ie 's/\\//g' /tmp/formula.$$ 26 BITRATE=`cat /tmp/formula.$$ | bc` 27 let BITRATE-=128 28 else 29 echo Unknown length using bitrate $BITRATE>$1.log 30 fi 31 32 echo DURATION $DURATION 33 echo BITRATE=$BITRATE 34 VFADD="" 35 if [ "$OUTFILE" = "" ] ; then 36 OUTFILE="${FILENAME%.mpg}.x264" 37 fi 38 39 X264OPT=nr=500:subq=4:bframes=2:b_pyramid:weight_b:psnr:bitrate=$BITRATE:threads=2:log=2 40 41 if [ "$DEBUG" = "" ] ; then 42 DEBUG="-quiet" 43 else 44 DEBUG="" 45 fi 46 47 48 let BITRATE=$BITRATE*1000 49 50 51 cat > ${OUTFILE%x264}cut << EOF 52 //AD <- Needed to identify// 53 54 var app = new Avidemux(); 55 56 //** Video ** 57 // 01 videos source 58 app.load("${FILENAME}"); 59 60 61 //** Postproc ** 62 app.video.setPostProc(7,3,0); 63 64 app.video.setFps1000(29970); 65 66 //** Filters ** 67 app.video.addFilter("kerneldeint","order=1","threshold=10","sharp=0","twoway=0","map=0"); 68 69 //** Video Codec conf ** 70 app.video.codec("X264","CBR=$BITRATE","156 00 00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 1e 00 00 00 3c 00 00 00 0a 00 00 00 33 00 00 00 04 00 00 00 01 00 00 00 28 00 00 00 19 00 00 00 fa 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 03 00 00 00 10 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 f4 01 00 00 "); 71 72 73 //** Audio ** 74 app.audio.reset(); 75 app.audio.codec("aac",128,4,"80 00 00 00 "); 76 app.audio.normalizeMode=0; 77 app.audio.normalizeValue=0; 78 app.audio.delay=0; 79 app.audio.mixer("NONE"); 80 app.setContainer("MP4"); 81 setSuccess(1); 82 //app.Exit(); 83 EOF 84 85 echo Converting mp2 audio to aac with avidemux2 86 date 87 xvfb-run -a avidemux --autoindex --run ${OUTFILE%x264}cut --save "${OUTFILE%x264}mp4" --quit 2> /dev/null >/dev/null 88 echo finished 89 90 if [ "$DEBUG" != "" ] ; then 91 rm -f ${OUTFILE%x264}cut 92 fi -
nuvexport-ojom/contrib/mp4cut
Property changes on: nuvexport-ojom/contrib/nuv2mp4 ___________________________________________________________________ Name: svn:executable + *
1 #! /bin/bash 2 # Cut mp4 files to remove cutlists... 3 # Originally Written by Gavin Hurlbut <gjhurlbu@gmail.com> 4 # Modified for DivX by J. Berger <jberger@netins.net> 5 # 6 # Prerequisites: 7 # avidemux2 - http://fixounet.free.fr/avidemux/ 8 # mencoder - http://www.mplayerhq.hu/ 9 # 10 # Usage: mp4cut inputfile outputfile finalframes segmentList 11 # where segmentList is a space separated list of frame regions to keep 12 # (i.e. -1999 3000-5000 6000-) 13 14 function frame2time() { 15 sdiv=1000 16 ms=`echo $1 \* $sdiv / 29.97 | bc` 17 s=`echo $ms / $sdiv | bc` 18 ms=`echo $ms % $sdiv | bc` 19 echo "$s.$ms" 20 } 21 22 echo mp4cut $@ 23 LOCAL_PRELOAD= 24 DIVXSTORE=/maxline/store 25 26 if [ ! -d ${DIVXSTORE} ] ; then 27 mkdir ${DIVXSTORE} 28 fi 29 30 31 FILENAME=$1 32 BASENAME=`basename ${FILENAME} .mpg` 33 OUTFILE=$2 34 # Determine later 35 LASTFRAME=0 36 # Total Frames in output 37 FINALFRAME=$4 38 LASTFRAME=$3 39 40 echo Filename \"${FILENAME}\" 41 echo OutFile \"${OUTFILE}\" 42 43 shift 4 44 CUTLIST=$* 45 46 47 echo Retain Cutlist \"${CUTLIST}\" 48 49 MODE=h264 50 if [ -f ${DIVXSTORE}/${BASENAME}.mp4 ] ; then 51 echo -f ${DIVXSTORE}/${BASENAME}.mp4 exists 52 fi 53 if [ -f ${DIVXSTORE}/${BASENAME}.h264 ] ; then 54 echo -f ${DIVXSTORE}/${BASENAME}.h264 exists 55 fi 56 57 if [ ! -f ${DIVXSTORE}/${BASENAME}.h264 ] 58 then 59 if [ ! -f ${DIVXSTORE}/${BASENAME}.mp4 ] ; then 60 echo Converting to h264/aac 61 LENGTH=`frame2time $FINALFRAME` 62 # nice -n 19 nuv2mp4 ${FILENAME} ${DIVXSTORE}/${BASENAME}.mp4 $LENGTH 63 export MODE=mpg 64 else 65 66 LENGTH=`frame2time $FINALFRAME` 67 nice -n 19 nuv2h264 ${FILENAME} ${DIVXSTORE}/${BASENAME}.h264 $LENGTH 68 export MODE=h264 69 fi 70 else 71 echo *************Looks like it has already been converted to h264/mp2.**************** 72 echo *************Now converting to mp4 container with h264/aac.*********************** 73 fi 74 75 76 echo Last Frame ${LASTFRAME} 77 if [ "$MODE" != "mpg" ] ; then 78 LASTFRAME=`cat ${DIVXSTORE}/${BASENAME}.frames 2> /dev/null` 79 fi 80 echo Precomputed Last Frame ${LASTFRAME} 81 if [ "$LASTFRAME" = "" ] ; then 82 echo Retreving last frame from h264 83 #Total Frames from input 84 LASTFRAME=`cat ${DIVXSTORE}/${BASENAME}.h264 2> /dev/null | perl -e ' 85 read(STDIN,$data,140); 86 read(STDIN,$date,4); 87 $frames=unpack("V",$date); 88 print $frames; 89 '` 90 let LASTFRAME-- 91 fi 92 echo Final Last Frame ${LASTFRAME} 93 if [ ${LASTFRAME} -lt 0 ] ; then 94 echo *** ${DIVXSTORE}/${BASENAME} is either corrupt or 95 echo *** in the process of being converted to h264/mp2. 96 echo *** Please check and retry again. 97 exit 98 fi 99 100 BITRATE=1234000 101 DURATION=`frame2time $FINALFRAME` 102 103 104 FORMULA='( ( (1095 \* 1024) - ((29.97 \* ' 105 FORMULA=$FORMULA$DURATION 106 FORMULA=$FORMULA' \* 24) / 1024) ) \* 1024 ) / 1000 \* 8 / ' 107 FORMULA=$FORMULA$DURATION 108 echo $FORMULA > /tmp/formula.$$ 109 sed -ie 's/\\//g' /tmp/formula.$$ 110 BITRATE=`cat /tmp/formula.$$ | bc` 111 #AUDIO BITRATE 112 let BITRATE-=128 113 let BITRATE=$BITRATE*1000 114 echo BITRATE $BITRATE 115 116 cat > ${BASENAME}.cut << EOF 117 //AD <- Needed to identify// 118 119 var app = new Avidemux(); 120 121 //** Video ** 122 // 01 videos source 123 app.load("${DIVXSTORE}/${BASENAME}.${MODE}"); 124 app.clearSegments(); 125 EOF 126 127 AUDCODEC="Copy" 128 if [ "$MODE" != "mp4" ] ; then 129 AUDCODEC="aac" 130 131 fi 132 133 KEYFRAME=1 134 cat /dev/null > ${BASENAME}.cut2 135 cat >> ${BASENAME}.cut2 << EOF 136 app.addSegment(0,0,${KEYFRAME}); 137 EOF 138 count=1 139 for i in ${CUTLIST} 140 do 141 START=`echo $i | cut -d '-' -f 1` 142 END=`echo $i | cut -d '-' -f 2` 143 # echo START $START END $END 144 if [ .${START}. = .. ] 145 then 146 START=${KEYFRAME} 147 fi 148 149 if [ ${START} -ge ${LASTFRAME} ] 150 then 151 continue 152 fi 153 154 if [ .${END}. = .. ] 155 then 156 END=${LASTFRAME} 157 fi 158 LENGTH=$((${END} - ${START} + 1)) 159 if [ ${LENGTH} -le 0 ] 160 then 161 echo LENG $LENGTH 162 continue 163 fi 164 cat >> ${BASENAME}.cut2 << EOF 165 app.addSegment(0,${START},${LENGTH}); 166 EOF 167 count=$((${count} + 1)) 168 done 169 echo // ${count} segments >> ${BASENAME}.cut 170 171 cat ${BASENAME}.cut2 >> ${BASENAME}.cut 172 cat >> ${BASENAME}.cut << EOF 173 //** Postproc ** 174 app.video.setPostProc(7,3,0); 175 176 app.video.setFps1000(29970); 177 178 EOF 179 180 if [ "$MODE" = "mpg" ] ; then 181 cat >> ${BASENAME}.cut << EOF 182 //** Filters ** 183 app.video.addFilter("kerneldeint","order=1","threshold=10","sharp=0","twoway=0","map=0"); 184 185 //** Video Codec conf ** 186 app.video.codec("X264","CBR=$BITRATE","156 00 00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 1e 00 00 00 3c 00 00 00 0a 00 00 00 33 00 00 00 04 00 00 00 01 00 00 00 28 00 00 00 19 00 00 00 fa 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 03 00 00 00 10 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 f4 01 00 00 "); 187 188 EOF 189 190 else 191 cat >> ${BASENAME}.cut << EOF 192 193 //** Filters ** 194 195 //** Video Codec conf ** 196 app.video.codec("Copy","CQ=4","0 "); 197 198 EOF 199 200 fi 201 cat >> ${BASENAME}.cut << EOF 202 203 //** Audio ** 204 app.audio.reset(); 205 app.audio.codec("aac",128,4,"80 00 00 00 "); 206 app.audio.normalizeMode=0; 207 app.audio.normalizeValue=0; 208 app.audio.delay=0; 209 app.audio.mixer("NONE"); 210 app.setContainer("MP4"); 211 setSuccess(1); 212 //app.Exit(); 213 EOF 214 215 echo Cutting out commercials with avidemux2 216 217 218 AUTOINDEX="" 219 if [ "$MODE" = "mpg" ] ; then 220 AUTOINDEX="--autoindex" 221 fi 222 223 224 echo avidemux $AUTOINDEX --force-b-frame --rebuild-index --run ${BASENAME}.cut --save "${OUTFILE}" --quit 225 226 227 time nice -n 9 xvfb-run -a avidemux $AUTOINDEX --force-b-frame --rebuild-index --load "${DIVXSTORE}/${BASENAME}.${MODE}" --run ${BASENAME}.cut --save "${OUTFILE}" --quit 228 229 230 231 echo Cleaning up 232 echo rm ${DIVXSTORE}/${BASENAME}.h264 ${DIVXSTORE}/${BASENAME}.mp4 233 if [ "$DEBUG" = "" ] ; then 234 rm -f ${BASENAME}.cut ${BASENAME}.cut2 235 fi 236 # vim:ts=4:sw=4:ai:et:si:sts=4 237 -
nuvexport-ojom/contrib/nuv2length
Property changes on: nuvexport-ojom/contrib/mp4cut ___________________________________________________________________ Name: svn:executable + *
1 #!/bin/bash 2 MYSQL_HOST=localhost 3 MYSQL_USER=mythtv 4 MYSQL_PASS=mythtv 5 MYSQL="mysql -u$MYSQL_USER -p$MYSQL_PASS -h $MYSQL_HOST mythconverg -B -s" 6 #MYSQL="mysql -u root mythconverg -s" 7 8 function usage() { 9 echo "usage: nuv2length [Myth MPG file]"; 10 } 11 12 function frame2time() { 13 sdiv=1000 14 ms=`echo $1 \* $sdiv / 29.97 | bc` 15 s=`echo $ms / $sdiv | bc` 16 ms=`echo $ms % $sdiv | bc` 17 echo "$s.$ms" 18 } 19 20 arg=$1 21 if [ "$1" = "" ] ; then 22 usage 23 exit 24 fi 25 26 base=`basename $arg` 27 edl=${arg%mpg}edl 28 type="(0,1)" 29 sql="SELECT type, mark FROM recordedmarkup WHERE concat(chanid, '_', DATE_FORMAT(starttime,'%Y%m%d%H%i%s'), '.mpg') = 30 '$base' and type IN $type ORDER BY mark;" 31 cutlist=`mysql -u$MYSQL_USER -p$MYSQL_PASS -h $MYSQL_HOST mythconverg -B -s --exec "$sql"` 32 if [ "$cutlist" == "" ] 33 then 34 type="(4,5)" 35 36 sql="SELECT type, mark FROM recordedmarkup WHERE concat(chanid, '_', DATE_FORMAT(starttime,'%Y%m%d%H%i%s'), '.mpg') = 37 '$base' and type IN $type ORDER BY mark;" 38 cutlist=`mysql -u$MYSQL_USER -p$MYSQL_PASS -h $MYSQL_HOST mythconverg -B -s --exec "$sql"` 39 fi 40 arg="" 41 cutlist=`echo $cutlist` 42 export com=stop 43 clip=0 44 t1=0 45 for clip in $cutlist 46 do 47 # echo CLIP $clip 48 49 if [ $clip = 1 -o $clip = 4 ] ; then 50 com=start 51 # echo TRUE 52 continue 53 elif [ $clip = 0 -o $clip = 5 ] ; then 54 com=stop 55 # echo FALSE 56 continue 57 fi 58 59 t1=`frame2time $clip` 60 done 61 echo "$clip $t1" 62 -
nuvexport-ojom/contrib/nuv2h264
Property changes on: nuvexport-ojom/contrib/nuv2length ___________________________________________________________________ Name: svn:executable + *
1 #!/bin/sh 2 3 FILENAME="$1" 4 OUTFILE="$2" 5 BITRATE="1000" 6 if [ "$3" = "" ] ; then 7 # size = ( ( (size * 1024) - ((framerate * duration * overhead) / 1024) ) * 1024 ) / 1000; 8 DURATION=`nuv2length $1 | awk '{print $2}'` 9 else 10 DURATION=$3 11 fi 12 if [ "$DURATION" = "0" ] ; then 13 14 echo Estimating lenght with midentify >$1.log 15 DURATION=`midentify $FILENAME | grep ID_LENGTH | awk -F "=" '{print $2}'` 16 fi 17 18 if [ "$DURATION" != "0" ] ; then 19 20 FORMULA='( ( (1095 \* 1024) - ((29.97 \* ' 21 FORMULA=$FORMULA$DURATION 22 FORMULA=$FORMULA' \* 24) / 1024) ) \* 1024 ) / 1000 \* 8 / ' 23 FORMULA=$FORMULA$DURATION 24 echo $FORMULA > /tmp/formula.$$ 25 sed -ie 's/\\//g' /tmp/formula.$$ 26 BITRATE=`cat /tmp/formula.$$ | bc` 27 let BITRATE-=128 28 else 29 echo Unknown length using bitrate $BITRATE>$1.log 30 fi 31 32 echo DURATION $DURATION 33 echo BITRATE=$BITRATE 34 VFADD="" 35 if [ "$OUTFILE" = "" ] ; then 36 OUTFILE="${FILENAME%.mpg}.x264" 37 fi 38 39 X264OPT=nr=500:subq=4:bframes=2:b_pyramid:weight_b:psnr:bitrate=$BITRATE:threads=2:log=2 40 41 if [ "$DEBUG" = "" ] ; then 42 DEBUG="-quiet" 43 else 44 DEBUG="" 45 fi 46 47 48 time mencoder -noskip $DEBUG "${FILENAME}" -vf pp=md $VFADD -ovc x264 -x264encopts $X264OPT -oac copy -o "${OUTFILE}" -
nuvexport-ojom/export/avidemux/DivX_cut.pm
Property changes on: nuvexport-ojom/contrib/nuv2h264 ___________________________________________________________________ Name: svn:executable + *
1 # 2 # $Date: 2005-07-13 15:39:47 -0700 (Wed, 13 Jul 2005) $ 3 # $Revision: 184 $ 4 # $Author: xris $ 5 # 6 # export::divx_cut 7 # Maintained by Gavin Hurlbut <gjhurlbu@gmail.com> 8 # 9 10 package export::avidemux::DivX_cut; 11 use base 'export::generic'; 12 13 # Load the myth and nuv utilities, and make sure we're connected to the database 14 use nuv_export::shared_utils; 15 use nuv_export::cli; 16 use nuv_export::ui; 17 use mythtv::db; 18 use mythtv::recordings; 19 20 # Load the following extra parameters from the commandline 21 22 sub new { 23 my $class = shift; 24 my $self = { 25 'cli' => qr/\bdivxcut\b/i, 26 'name' => 'Export to Divx with cutlist', 27 'enabled' => 1, 28 'errors' => [], 29 # Exporter-related settings 30 }; 31 bless($self, $class); 32 # Make sure we have avidemux2.1.X 33 find_program('avidemux') 34 or push @{$self->{'errors'}}, 'You need avidemux 2 to use this.'; 35 # Make sure we have divxcut 36 find_program('divxcut') 37 or push @{$self->{'errors'}}, 'You need divxcut to use this.'; 38 # Make sure xvfb-run is somewhere 39 find_program('xvfb-run') 40 or push @{$self->{'errors'}}, 'You need xvfb to use this.'; 41 42 43 # Any errors? disable this function 44 $self->{'enabled'} = 0 if ($self->{'errors'} && @{$self->{'errors'}} > 0); 45 # Return 46 return $self; 47 } 48 49 # Gather settings from the user 50 sub gather_settings { 51 my $self = shift; 52 # Load the parent module's settings 53 $self->{'path'} = query_savepath($self->val('path')); 54 } 55 56 sub export { 57 my $self = shift; 58 my $episode = shift; 59 # Load nuv info 60 load_finfo($episode); 61 62 # Check for an MPEG2 recording with a cutlist 63 # This should not matter. 64 if (!$episode->{'finfo'}{'is_mpeg'}) { 65 print 'Not an MPEG recording, moving on'; 66 return 0; 67 } 68 if (!($episode->{'cutlist'} && $episode->{'cutlist'} =~ /\d/)) { 69 print 'No cutlist found. This won\'t do!'; 70 return 0; 71 } 72 73 my $safe_outfile = shell_escape($self->get_outfile($episode, '.avi')); 74 75 76 my $command = "divxcut $episode->{'filename'} $safe_outfile "; 77 78 $self->gen_cutlist($episode); 79 print "Cutlist " . $episode->{'cutlist'} . "\n"; 80 81 82 83 @cuts = split(" ",$episode->{'cutlist'}); 84 my @skiplist; 85 foreach my $cut (@cuts) { 86 push @skiplist, (split("-", $cut))[0]; 87 push @skiplist, (split("-", $cut))[1]; 88 } 89 90 my $cutnum = 0; 91 if ($skiplist[0] ne 0) { 92 $command .= "-"; 93 $cutnum = 1; 94 } 95 96 foreach my $cut (@skiplist) { 97 if ($cutnum eq 0) { 98 if( $cut ne 0 ) { 99 $cutnum = 1; 100 $cut++; 101 $command .= "$cut-"; 102 } 103 } else { 104 $cutnum = 0; 105 $cut--; 106 $command .= "$cut "; 107 } 108 } 109 110 system($command); 111 } 112 113 1; #return true 114 115 # vim:ts=4:sw=4:ai:et:si:sts=4 -
nuvexport-ojom/export/avidemux/MP4_cut.pm
Property changes on: nuvexport-ojom/export/avidemux/DivX_cut.pm ___________________________________________________________________ Name: svn:executable + *
1 # 2 # $Date: 2005-07-13 15:39:47 -0700 (Wed, 13 Jul 2005) $ 3 # $Revision: 184 $ 4 # $Author: xris $ 5 # 6 # export::mp4_cut 7 # Maintained by Gavin Hurlbut <gjhurlbu@gmail.com> 8 # 9 10 package export::avidemux::MP4_cut; 11 use base 'export::generic'; 12 13 # Load the myth and nuv utilities, and make sure we're connected to the database 14 use nuv_export::shared_utils; 15 use nuv_export::cli; 16 use nuv_export::ui; 17 use mythtv::db; 18 use mythtv::recordings; 19 20 # Load the following extra parameters from the commandline 21 22 sub new { 23 my $class = shift; 24 my $self = { 25 'cli' => qr/\bmp4cut\b/i, 26 'name' => 'Export to MP4 with cutlist', 27 'enabled' => 1, 28 'errors' => [], 29 # Exporter-related settings 30 }; 31 bless($self, $class); 32 # Make sure we have avidemux2.1.X 33 find_program('avidemux') 34 or push @{$self->{'errors'}}, 'You need avidemux 2 to use this.'; 35 # Make sure we have mp4cut 36 find_program('mp4cut') 37 or push @{$self->{'errors'}}, 'You need mp4cut to use this.'; 38 # Make sure xvfb-run is somewhere 39 find_program('xvfb-run') 40 or push @{$self->{'errors'}}, 'You need xvfb to use this.'; 41 42 # Any errors? disable this function 43 $self->{'enabled'} = 0 if ($self->{'errors'} && @{$self->{'errors'}} > 0); 44 # Return 45 return $self; 46 } 47 48 # Gather settings from the user 49 sub gather_settings { 50 my $self = shift; 51 # Load the parent module's settings 52 $self->{'path'} = query_savepath($self->val('path')); 53 } 54 55 sub export { 56 my $self = shift; 57 my $episode = shift; 58 # Load nuv info 59 load_finfo($episode); 60 61 # Check for an MPEG2 recording with a cutlist 62 # This should not matter. 63 if (!$episode->{'finfo'}{'is_mpeg'}) { 64 print 'Not an MPEG recording, moving on'; 65 return 0; 66 } 67 if (!($episode->{'cutlist'} && $episode->{'cutlist'} =~ /\d/)) { 68 print 'No cutlist found. This won\'t do!'; 69 return 0; 70 } 71 my $total_frames = $episode->{'last_frame'} > 0 72 ? $episode->{'last_frame'} - $episode->{'cutlist_frames'} 73 : 0; 74 print "Total Frames: $total_frames \n"; 75 print "Last Frame: $episode->{'last_frame'} \n"; 76 print "Cut Frames: $episode->{'cutlist_frames'} \n"; 77 78 79 my $safe_outfile = shell_escape($self->get_outfile($episode, '.mp4')); 80 81 82 my $command = "mp4cut $episode->{'filename'} $safe_outfile $episode->{'last_frame'} $total_frames "; 83 84 $self->gen_cutlist($episode); 85 print "Cutlist " . $episode->{'cutlist'} . "\n"; 86 87 88 89 @cuts = split(" ",$episode->{'cutlist'}); 90 my @skiplist; 91 foreach my $cut (@cuts) { 92 push @skiplist, (split("-", $cut))[0]; 93 push @skiplist, (split("-", $cut))[1]; 94 } 95 96 my $cutnum = 0; 97 if ($skiplist[0] ne 0) { 98 $command .= "-"; 99 $cutnum = 1; 100 } 101 102 foreach my $cut (@skiplist) { 103 if ($cutnum eq 0) { 104 if( $cut ne 0 ) { 105 $cutnum = 1; 106 $cut++; 107 $command .= "$cut-"; 108 } 109 } else { 110 $cutnum = 0; 111 $cut--; 112 $command .= "$cut "; 113 } 114 } 115 116 system($command); 117 } 118 119 1; #return true 120 121 # vim:ts=4:sw=4:ai:et:si:sts=4 -
nuvexport-ojom/nuv_export/cli.pm
Property changes on: nuvexport-ojom/export/avidemux/MP4_cut.pm ___________________________________________________________________ Name: svn:executable + *
45 45 GetOptions('ffmpeg' => sub { $export_prog = 'ffmpeg'; }, 46 46 'transcode' => sub { $export_prog = 'transcode'; }, 47 47 'mencoder' => sub { $export_prog = 'mencoder'; }, 48 'avidemux' => sub { $export_prog = 'avidemux'; }, 48 49 'config|c=s' => \$config_file, 49 50 'profile=s' => \$args{'profile'}, 50 51 ); … … 113 114 $export_prog = lc($rc_args{'nuvexport'}{'export_prog'}); 114 115 } 115 116 if ($export_prog) { 116 if ($export_prog !~ /(?:ffmpeg|transcode|mencoder )$/) {117 if ($export_prog !~ /(?:ffmpeg|transcode|mencoder|avidemux)$/) { 117 118 print "Unknown export_prog in nuvexportrc: $export_prog\n\n"; 118 119 exit; 119 120 } … … 123 124 ? 'ffmpeg' 124 125 : find_program('transcode') 125 126 ? 'transcode' 126 : 'mencoder'; 127 : find_program('mencoder') 128 ? 'mencoder' 129 : 'avidemux'; 127 130 } 128 131 } 129 132 -
nuvexport-ojom/nuvexport
83 83 # ffmpeg - seems to work better and is the default 84 84 require export::mencoder::XviD; 85 85 } 86 elsif ($export_prog eq 'avidemux') { 87 find_program('mencoder') 88 or die "You need avidemux in order to use nuvexport in --avidemux mode\n"; 89 90 require export::avidemux::DivX_cut; 91 require export::avidemux::MP4_cut; 92 } 86 93 87 94 # Load the other export modules 88 95 require export::NUV_SQL; … … 113 120 elsif ($export_prog eq 'mencoder') { 114 121 push @Exporters, export::mencoder::XviD->new; 115 122 } 123 elsif ($export_prog eq 'avidemux') { 124 push @Exporters, export::avidemux::DivX_cut->new; 125 push @Exporters, export::avidemux::MP4_cut->new; 126 } 116 127 push @Exporters, export::NUV_SQL->new; 117 128 118 129 # Show the version? -
nuvexport-ojom/Makefile
6 6 7 7 CONF = nuvexportrc 8 8 9 EXPORT_MODULES = export/generic.pm \ 10 export/ffmpeg.pm \ 11 export/transcode.pm \ 12 export/mencoder.pm \ 13 export/NUV_SQL.pm \ 14 export/transcode/DVCD.pm \ 15 export/transcode/DVD.pm \ 16 export/transcode/SVCD.pm \ 17 export/transcode/VCD.pm \ 18 export/transcode/XviD.pm \ 19 export/ffmpeg/XviD.pm \ 20 export/ffmpeg/DivX.pm \ 21 export/ffmpeg/MP3.pm \ 22 export/ffmpeg/ASF.pm \ 23 export/ffmpeg/SVCD.pm \ 24 export/ffmpeg/DVCD.pm \ 25 export/ffmpeg/DVD.pm \ 26 export/ffmpeg/VCD.pm \ 27 export/ffmpeg/PSP.pm \ 28 export/ffmpeg/MP4.pm \ 29 export/mencoder/XviD.pm 9 EXPORT_MODULES = export/generic.pm \ 10 export/ffmpeg.pm \ 11 export/transcode.pm \ 12 export/mencoder.pm \ 13 export/NUV_SQL.pm \ 14 export/transcode/DVCD.pm \ 15 export/transcode/DVD.pm \ 16 export/transcode/SVCD.pm \ 17 export/transcode/VCD.pm \ 18 export/transcode/XviD.pm \ 19 export/ffmpeg/XviD.pm \ 20 export/ffmpeg/DivX.pm \ 21 export/ffmpeg/MP3.pm \ 22 export/ffmpeg/ASF.pm \ 23 export/ffmpeg/SVCD.pm \ 24 export/ffmpeg/DVCD.pm \ 25 export/ffmpeg/DVD.pm \ 26 export/ffmpeg/VCD.pm \ 27 export/ffmpeg/PSP.pm \ 28 export/ffmpeg/MP4.pm \ 29 export/mencoder/XviD.pm \ 30 export/avidemux/DivX_cut.pm \ 31 export/avidemux/DivX_cut.pm \ 32 export/avidemux/MP4_cut.pm 33 30 34 MODULE_SUBDIRS = transcode \ 31 35 ffmpeg \ 32 mencoder 36 mencoder \ 37 avidemux 33 38 MYTHTV_MODULES = mythtv/nuvinfo.pm \ 34 39 mythtv/db.pm \ 35 40 mythtv/recordings.pm