Ticket #3693: nuvexport-avidemux.patch

File nuvexport-avidemux.patch, 30.4 KB (added by jberger@…, 17 years ago)

Avidemux support for n85uv

  • 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
     6FILENAME="$1"
     7OUTFILE="$2"
     8TITLE="$3"
     9SUBTITLE="$4"
     10DESCRIPTION="$5"
     11CATEGORY="$6"
     12VFADD=""
     13VFPRE=""
     14ASPECT=""
     15
     16
     17echo "$@" > /tmp/running
     18echo Running
     19
     20if [ "$OUTFILE" = "" ] ; then
     21        OUTFILE="${FILENAME%.mpg}.divx"
     22fi
     23
     24LAVCOPT=vcodec=mpeg4:vbitrate=2000:trell:threads=2
     25
     26if [ "$DEBUG" = "" ] ; then
     27        DEBUG="-quiet"
     28else
     29        DEBUG=""
     30fi
     31
     32echo 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
     34tail -n /tmp/running
     35
     36echo MENCODER
     37
     38time 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-)
     13echo divxcut $@
     14LOCAL_PRELOAD=
     15DIVXSTORE=/maxline/store
     16
     17if [ ! -d ${DIVXSTORE} ] ; then
     18        mkdir ${DIVXSTORE}
     19fi
     20
     21
     22FILENAME=$1
     23BASENAME=`basename ${FILENAME} .mpg`
     24OUTFILE=$2
     25# Determine later
     26LASTFRAME=0
     27
     28
     29echo Filename \"${FILENAME}\"
     30echo OutFile \"${OUTFILE}\"
     31
     32shift 2
     33CUTLIST=$*
     34
     35echo Retain Cutlist \"${CUTLIST}\"
     36
     37if [ ! -f ${DIVXSTORE}/${BASENAME}.divx ]
     38then
     39        echo Converting to DivX
     40        nice -n 19 nuv2divx ${FILENAME} ${DIVXSTORE}/${BASENAME}.divx
     41else
     42        echo *************Looks like it has already been converted to DivX.****************
     43fi
     44
     45LASTFRAME=`cat ${DIVXSTORE}/${BASENAME}.divx 2> /dev/null | perl -e '
     46read(STDIN,$data,140);
     47read(STDIN,$date,4);
     48$frames=unpack("V",$date);
     49print $frames;
     50'`
     51let LASTFRAME--
     52echo Last Frame ${LASTFRAME}
     53if [ ${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
     58fi
     59
     60cat > ${BASENAME}.cut << EOF
     61//AD  <- Needed to identify//
     62
     63var app = new Avidemux();
     64
     65//** Video **
     66// 01 videos source
     67app.load("${DIVXSTORE}/${BASENAME}.divx");
     68app.clearSegments();
     69EOF
     70
     71
     72
     73KEYFRAME=1
     74cat /dev/null > ${BASENAME}.cut2
     75cat >> ${BASENAME}.cut2 << EOF
     76app.addSegment(0,0,${KEYFRAME});
     77EOF
     78count=1
     79for i in ${CUTLIST}
     80do
     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
     105app.addSegment(0,${START},${LENGTH});
     106EOF
     107    count=$((${count} + 1))
     108done
     109echo // ${count} segments >> ${BASENAME}.cut
     110
     111cat ${BASENAME}.cut2 >> ${BASENAME}.cut
     112cat >> ${BASENAME}.cut << EOF
     113//** Video Codec conf **
     114app.video.codec("Copy","CQ=4","0 ");
     115
     116//** Audio **
     117app.audio.reset();
     118app.audio.codec("copy",128);
     119app.audio.normalize=false;
     120app.audio.delay=0;
     121app.setContainer("AVI");
     122setSuccess(1);
     123//app.Exit();
     124
     125//End of script
     126EOF
     127
     128echo Cutting out commercials with avidemux2
     129
     130nice -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
     133echo Cleaning up
     134echo rm ${DIVXSTORE}/${BASENAME}.divx
     135if [ "$DEBUG" = "" ] ; then
     136    rm  -f ${BASENAME}.cut ${BASENAME}.cut2
     137fi
     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
     6FILENAME="$1"
     7TITLE="$2"
     8OUTFILE="$3"
     9if [ "$TITLE" = "" ] ; then
     10        TITLE="Unknown"
     11fi
     12if [ "$OUTFILE" = "" ] ; then
     13        OUTFILE="${FILENAME%.mpg}.mp3"
     14fi
     15#/usr/local/bin/mencoder  ${FILENAME}
     16rm -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
     21rm -f ${FILENAME%.mpg}.wav
     22
  • nuvexport-ojom/contrib/nuv2mp4

    Property changes on: nuvexport-ojom/contrib/nuv2mp3
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
     1#!/bin/sh
     2
     3FILENAME="$1"
     4OUTFILE="$2"
     5BITRATE="1000"
     6if [ "$3" = "" ] ; then
     7#               size = (  ( (size * 1024) - ((framerate * duration * overhead) / 1024) ) * 1024  ) / 1000;
     8                DURATION=`nuv2length $1 | awk '{print $2}'`
     9else
     10        DURATION=$3
     11fi
     12if [ "$DURATION" = "0" ] ; then
     13
     14        echo Estimating length with midentify >$1.log
     15        DURATION=`midentify $FILENAME | grep ID_LENGTH | awk -F "=" '{print $2}'`
     16fi
     17
     18if [ "$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
     28else
     29        echo Unknown length using bitrate $BITRATE>$1.log
     30fi
     31
     32echo DURATION $DURATION
     33echo BITRATE=$BITRATE
     34VFADD=""
     35if [ "$OUTFILE" = "" ] ; then
     36        OUTFILE="${FILENAME%.mpg}.x264"
     37fi
     38
     39X264OPT=nr=500:subq=4:bframes=2:b_pyramid:weight_b:psnr:bitrate=$BITRATE:threads=2:log=2
     40
     41if [ "$DEBUG" = "" ] ; then
     42        DEBUG="-quiet"
     43else
     44        DEBUG=""
     45fi
     46
     47
     48let BITRATE=$BITRATE*1000
     49
     50
     51cat > ${OUTFILE%x264}cut << EOF
     52//AD  <- Needed to identify//
     53
     54var app = new Avidemux();
     55
     56//** Video **
     57// 01 videos source
     58app.load("${FILENAME}");
     59
     60
     61//** Postproc **
     62app.video.setPostProc(7,3,0);
     63
     64app.video.setFps1000(29970);
     65
     66//** Filters **
     67app.video.addFilter("kerneldeint","order=1","threshold=10","sharp=0","twoway=0","map=0");
     68
     69//** Video Codec conf **
     70app.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 **
     74app.audio.reset();
     75app.audio.codec("aac",128,4,"80 00 00 00 ");
     76app.audio.normalizeMode=0;
     77app.audio.normalizeValue=0;
     78app.audio.delay=0;
     79app.audio.mixer("NONE");
     80app.setContainer("MP4");
     81setSuccess(1);
     82//app.Exit();
     83EOF
     84
     85echo Converting mp2 audio to aac with avidemux2
     86date
     87xvfb-run -a avidemux --autoindex --run ${OUTFILE%x264}cut --save "${OUTFILE%x264}mp4" --quit 2> /dev/null >/dev/null
     88echo finished
     89
     90if [ "$DEBUG" != "" ] ; then
     91        rm -f ${OUTFILE%x264}cut
     92fi
  • 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
     14function 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
     22echo mp4cut $@
     23LOCAL_PRELOAD=
     24DIVXSTORE=/maxline/store
     25
     26if [ ! -d ${DIVXSTORE} ] ; then
     27        mkdir ${DIVXSTORE}
     28fi
     29
     30
     31FILENAME=$1
     32BASENAME=`basename ${FILENAME} .mpg`
     33OUTFILE=$2
     34# Determine later
     35LASTFRAME=0
     36    # Total Frames in output
     37    FINALFRAME=$4
     38    LASTFRAME=$3
     39
     40echo Filename \"${FILENAME}\"
     41echo OutFile \"${OUTFILE}\"
     42
     43shift 4
     44CUTLIST=$*
     45
     46
     47echo Retain Cutlist \"${CUTLIST}\"
     48
     49MODE=h264
     50if [ -f ${DIVXSTORE}/${BASENAME}.mp4 ] ; then
     51    echo -f ${DIVXSTORE}/${BASENAME}.mp4 exists
     52fi
     53if [ -f ${DIVXSTORE}/${BASENAME}.h264 ] ; then
     54    echo -f ${DIVXSTORE}/${BASENAME}.h264 exists
     55fi
     56
     57if [ ! -f ${DIVXSTORE}/${BASENAME}.h264 ]
     58then
     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
     70else
     71        echo *************Looks like it has already been converted to h264/mp2.****************
     72    echo *************Now converting to mp4 container with h264/aac.***********************
     73fi
     74
     75
     76echo Last Frame ${LASTFRAME}
     77if [ "$MODE" != "mpg" ] ; then
     78    LASTFRAME=`cat ${DIVXSTORE}/${BASENAME}.frames 2> /dev/null`
     79fi
     80echo Precomputed Last Frame ${LASTFRAME}
     81if [ "$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--
     91fi
     92echo Final Last Frame ${LASTFRAME}
     93if [ ${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
     98fi
     99
     100BITRATE=1234000
     101DURATION=`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
     114echo BITRATE $BITRATE
     115
     116cat > ${BASENAME}.cut << EOF
     117//AD  <- Needed to identify//
     118
     119var app = new Avidemux();
     120
     121//** Video **
     122// 01 videos source
     123app.load("${DIVXSTORE}/${BASENAME}.${MODE}");
     124app.clearSegments();
     125EOF
     126
     127AUDCODEC="Copy"
     128if [ "$MODE" != "mp4" ] ; then
     129    AUDCODEC="aac"
     130   
     131fi
     132
     133KEYFRAME=1
     134cat /dev/null > ${BASENAME}.cut2
     135cat >> ${BASENAME}.cut2 << EOF
     136app.addSegment(0,0,${KEYFRAME});
     137EOF
     138count=1
     139for i in ${CUTLIST}
     140do
     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
     165app.addSegment(0,${START},${LENGTH});
     166EOF
     167    count=$((${count} + 1))
     168done
     169echo // ${count} segments >> ${BASENAME}.cut
     170
     171cat ${BASENAME}.cut2 >> ${BASENAME}.cut
     172cat >> ${BASENAME}.cut << EOF
     173//** Postproc **
     174app.video.setPostProc(7,3,0);
     175
     176app.video.setFps1000(29970);
     177
     178EOF
     179
     180if [ "$MODE" = "mpg" ] ; then
     181cat >> ${BASENAME}.cut << EOF
     182//** Filters **
     183app.video.addFilter("kerneldeint","order=1","threshold=10","sharp=0","twoway=0","map=0");
     184
     185//** Video Codec conf **
     186app.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
     188EOF
     189
     190else
     191cat >> ${BASENAME}.cut << EOF
     192
     193//** Filters **
     194
     195//** Video Codec conf **
     196app.video.codec("Copy","CQ=4","0 ");
     197
     198EOF
     199
     200fi
     201cat >> ${BASENAME}.cut << EOF
     202
     203//** Audio **
     204app.audio.reset();
     205app.audio.codec("aac",128,4,"80 00 00 00 ");
     206app.audio.normalizeMode=0;
     207app.audio.normalizeValue=0;
     208app.audio.delay=0;
     209app.audio.mixer("NONE");
     210app.setContainer("MP4");
     211setSuccess(1);
     212//app.Exit();
     213EOF
     214
     215echo Cutting out commercials with avidemux2
     216
     217
     218AUTOINDEX=""
     219if [ "$MODE" = "mpg" ] ; then
     220    AUTOINDEX="--autoindex"
     221fi
     222
     223
     224echo avidemux $AUTOINDEX --force-b-frame --rebuild-index --run ${BASENAME}.cut --save "${OUTFILE}" --quit
     225
     226
     227time 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
     231echo Cleaning up
     232echo rm ${DIVXSTORE}/${BASENAME}.h264 ${DIVXSTORE}/${BASENAME}.mp4
     233if [ "$DEBUG" = "" ] ; then
     234    rm  -f ${BASENAME}.cut ${BASENAME}.cut2
     235fi
     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
     2MYSQL_HOST=localhost
     3MYSQL_USER=mythtv
     4MYSQL_PASS=mythtv
     5MYSQL="mysql -u$MYSQL_USER -p$MYSQL_PASS -h $MYSQL_HOST mythconverg -B -s"
     6#MYSQL="mysql -u root mythconverg -s"
     7
     8function usage() {
     9   echo "usage: nuv2length [Myth MPG file]";
     10}
     11
     12function 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
     20arg=$1
     21if [ "$1" = "" ] ; then
     22        usage
     23        exit
     24fi
     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
     3FILENAME="$1"
     4OUTFILE="$2"
     5BITRATE="1000"
     6if [ "$3" = "" ] ; then
     7#               size = (  ( (size * 1024) - ((framerate * duration * overhead) / 1024) ) * 1024  ) / 1000;
     8                DURATION=`nuv2length $1 | awk '{print $2}'`
     9else
     10        DURATION=$3
     11fi
     12if [ "$DURATION" = "0" ] ; then
     13
     14        echo Estimating lenght with midentify >$1.log
     15        DURATION=`midentify $FILENAME | grep ID_LENGTH | awk -F "=" '{print $2}'`
     16fi
     17
     18if [ "$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
     28else
     29        echo Unknown length using bitrate $BITRATE>$1.log
     30fi
     31
     32echo DURATION $DURATION
     33echo BITRATE=$BITRATE
     34VFADD=""
     35if [ "$OUTFILE" = "" ] ; then
     36        OUTFILE="${FILENAME%.mpg}.x264"
     37fi
     38
     39X264OPT=nr=500:subq=4:bframes=2:b_pyramid:weight_b:psnr:bitrate=$BITRATE:threads=2:log=2
     40
     41if [ "$DEBUG" = "" ] ; then
     42        DEBUG="-quiet"
     43else
     44        DEBUG=""
     45fi
     46
     47
     48time 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
     10package 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
     1131;  #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
     10package 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
     1191;  #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
       + *
    
     
    4545    GetOptions('ffmpeg'     => sub { $export_prog = 'ffmpeg';    },
    4646               'transcode'  => sub { $export_prog = 'transcode'; },
    4747               'mencoder'   => sub { $export_prog = 'mencoder';  },
     48               'avidemux'   => sub { $export_prog = 'avidemux';  },
    4849               'config|c=s' => \$config_file,
    4950               'profile=s'  => \$args{'profile'},
    5051              );
     
    113114            $export_prog = lc($rc_args{'nuvexport'}{'export_prog'});
    114115        }
    115116        if ($export_prog) {
    116             if ($export_prog !~ /(?:ffmpeg|transcode|mencoder)$/) {
     117            if ($export_prog !~ /(?:ffmpeg|transcode|mencoder|avidemux)$/) {
    117118                print "Unknown export_prog in nuvexportrc:  $export_prog\n\n";
    118119                exit;
    119120            }
     
    123124                            ? 'ffmpeg'
    124125                            : find_program('transcode')
    125126                                ? 'transcode'
    126                                 : 'mencoder';
     127                                : find_program('mencoder')
     128                                    ? 'mencoder'
     129                                    : 'avidemux';
    127130        }
    128131    }
    129132
  • nuvexport-ojom/nuvexport

     
    8383    # ffmpeg - seems to work better and is the default
    8484        require export::mencoder::XviD;
    8585    }
     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    }
    8693
    8794# Load the other export modules
    8895    require export::NUV_SQL;
     
    113120    elsif ($export_prog eq 'mencoder') {
    114121        push @Exporters, export::mencoder::XviD->new;
    115122    }
     123    elsif ($export_prog eq 'avidemux') {
     124        push @Exporters, export::avidemux::DivX_cut->new;
     125        push @Exporters, export::avidemux::MP4_cut->new;
     126    }
    116127    push @Exporters, export::NUV_SQL->new;
    117128
    118129# Show the version?
  • nuvexport-ojom/Makefile

     
    66
    77CONF              = nuvexportrc
    88
    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
     9EXPORT_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
    3034MODULE_SUBDIRS    = transcode \
    3135                    ffmpeg    \
    32                     mencoder
     36                    mencoder  \
     37                    avidemux
    3338MYTHTV_MODULES    = mythtv/nuvinfo.pm \
    3439                    mythtv/db.pm      \
    3540                    mythtv/recordings.pm