|
6 | 6 | # Prerequisites: |
7 | 7 | # avidemux2 - http://fixounet.free.fr/avidemux/ |
8 | 8 | # transcode - http://zebra.fh-weingarten.de/~transcode/ |
9 | | -# lvemux - http://lvempeg.sourceforge.net/ |
| 9 | +# lvemux - http://lvempeg.sourceforge.net/ |
10 | 10 | # gdk2-cursed - http://zemljanka.sourceforge.net/cursed/ |
11 | 11 | # |
12 | 12 | # Usage: mpeg2cut inputfile outputfile segmentList |
|
16 | 16 | export LD_PRELOAD=libgdk-cursed-2.0.so:libgtk-cursed-2.0.so |
17 | 17 |
|
18 | 18 | FILENAME=$1 |
19 | | -OUTFILE=$2 |
20 | 19 | BASENAME=`basename ${FILENAME} .nuv` |
| 20 | +OUTFILE=$2 |
| 21 | +LASTGOP=$3 |
| 22 | + |
| 23 | +# get the largest numbered mark of type 6 * (15 NTSC or 12 PAL), that's the |
| 24 | +# last GOP frame |
21 | 25 |
|
22 | 26 | echo Filename \"${FILENAME}\" |
23 | 27 | echo OutFile \"${OUTFILE}\" |
24 | 28 |
|
25 | | -shift |
26 | | -shift |
| 29 | +shift 3 |
27 | 30 | CUTLIST=$* |
28 | 31 |
|
| 32 | +echo Last GOP index ${LASTGOP} |
29 | 33 | echo Cutlist \"${CUTLIST}\" |
30 | 34 |
|
| 35 | +echo -n Finding the AV Offset to use with lvemux: |
| 36 | +OFFSET=`(tcprobe -i ${FILENAME} 2> /dev/null) | grep av_fine_ms | \ |
| 37 | + sed -e 's/^.*av_fine_ms //' | cut -d " " -f 1` |
| 38 | +OFFSET=$((-1 * ${OFFSET})) |
| 39 | +echo ${OFFSET} |
| 40 | + |
| 41 | +echo -n Finding framerate: |
| 42 | +FRAMERATE=`(tcprobe -i ${FILENAME} 2> /dev/null) | grep "frame rate" | \ |
| 43 | + sed -e 's/^.*-f //' | cut -d " " -f 1` |
| 44 | +echo ${FRAMERATE} |
| 45 | + |
| 46 | +if [ .${FRAMERATE}. = .25.000. ] |
| 47 | +then |
| 48 | + GOPSPACE=12 |
| 49 | +else |
| 50 | + GOPSPACE=15 |
| 51 | +fi |
| 52 | + |
| 53 | +LASTFRAME=$(( ${LASTGOP} * ${GOPSPACE} )) |
| 54 | +echo Last Frame ${LASTFRAME} |
| 55 | + |
31 | 56 | if [ ! -f ${FILENAME}.idx ] |
32 | 57 | then |
| 58 | + echo Indexing the file with avidemux2 |
33 | 59 | nice -n 19 avidemux2 --index-mpeg ${FILENAME} ${FILENAME}.idx C0 \ |
34 | | - --audio-codec MP2 --quit 2> /dev/null |
| 60 | + --audio-codec MP2 --quit 2> /dev/null > /dev/null |
35 | 61 | fi |
36 | 62 |
|
37 | | -OFFSET=`(tcprobe -i ${FILENAME} 2> /dev/null) | grep av_fine_ms | \ |
38 | | - sed -e 's/^.*av_fine_ms //' | cut -d " " -f 1` |
39 | 63 |
|
40 | | -count=0 |
41 | | -SLICELIST="" |
| 64 | +cat > ${BASENAME}.cut << EOF |
| 65 | +ADMW0002 |
| 66 | +01 videos |
| 67 | +Name : ${FILENAME}.idx |
| 68 | +EOF |
42 | 69 |
|
| 70 | +cat /dev/null > ${BASENAME}.cut2 |
| 71 | + |
| 72 | +count=0 |
43 | 73 | for i in ${CUTLIST} |
44 | 74 | do |
45 | 75 | START=`echo $i | cut -d '-' -f 1` |
46 | 76 | END=`echo $i | cut -d '-' -f 2` |
47 | | - SLICE=${BASENAME}_${count} |
48 | 77 |
|
49 | | - if [ .${START}. != .. ] |
| 78 | + if [ .${START}. = .. ] |
50 | 79 | then |
51 | | - START="--begin ${START}" |
| 80 | + START=0 |
52 | 81 | fi |
53 | 82 |
|
54 | | - if [ .${END}. != .. ] |
| 83 | + if [ ${START} -ge ${LASTFRAME} ] |
55 | 84 | then |
56 | | - END="--end ${END}" |
| 85 | + continue |
57 | 86 | fi |
58 | 87 |
|
59 | | - nice -n 19 avidemux2 --load ${FILENAME} ${START} ${END} \ |
60 | | - --audio-codec MP2 --save-raw-video ${SLICE}.m2v \ |
61 | | - --save-raw-audio ${SLICE}.mp2 --quit 2> /dev/null |
62 | | - nice -n 19 lvemux -sh $((-1 * ${OFFSET})) -v ${SLICE}.m2v \ |
63 | | - -a ${SLICE}.mp2 -o ${SLICE}.mpg |
64 | | - rm ${SLICE}.m2v ${SLICE}.m2v.idx ${SLICE}.mp2 |
| 88 | + if [ .${END}. = .. ] |
| 89 | + then |
| 90 | + END=${LASTFRAME} |
| 91 | + fi |
| 92 | + LENGTH=$((${END} - ${START} + 1)) |
65 | 93 |
|
66 | | - SLICELIST="${SLICELIST} ${SLICE}.mpg" |
| 94 | + cat >> ${BASENAME}.cut2 << EOF |
| 95 | +Start : ${START} |
| 96 | +Size : ${LENGTH} |
| 97 | +Ref : 0 |
| 98 | +EOF |
67 | 99 | count=$((${count} + 1)) |
68 | 100 | done |
| 101 | +echo ${count} segments >> ${BASENAME}.cut |
| 102 | + |
| 103 | +cat ${BASENAME}.cut2 >> ${BASENAME}.cut |
| 104 | +cat >> ${BASENAME}.cut << EOF |
| 105 | +Audio codec : none |
| 106 | +Audio filter : audioNormalizeMode=0 audioResampleMode=0 audioDRC=0 audioShift=0 |
| 107 | +audioDelay=0 audioFreq=48000 |
| 108 | +Audio conf : audioProcessMode=0 audioMP3mode=0 audioMP3bitrate=128 |
| 109 | +EOF |
| 110 | + |
| 111 | +echo Cutting out commercials with avidemux2 |
| 112 | +nice -n 19 avidemux2 --load-workbench ${BASENAME}.cut \ |
| 113 | + --audio-codec MP2 --save-raw-video ${BASENAME}.m2v \ |
| 114 | + --save-raw-audio ${BASENAME}.mp2 --quit 2> /dev/null > /dev/null |
| 115 | + |
| 116 | +echo Remultiplexing video |
| 117 | +nice -n 19 lvemux -r -1 -v ${BASENAME}.m2v -a ${BASENAME}.mp2 -o "${OUTFILE}" |
69 | 118 |
|
70 | | -echo Concatenating ${count} segments |
71 | | -nice -n 19 cat ${SLICELIST} > ${OUTFILE} |
72 | | -rm ${SLICELIST} ${FILENAME}.idx |
| 119 | +echo Cleaning up |
| 120 | +rm ${FILENAME}.idx ${BASENAME}.m2v ${BASENAME}.mp2 ${BASENAME}.m2v.idx |
| 121 | +rm ${BASENAME}.cut ${BASENAME}.cut2 |
73 | 122 |
|
0 commit comments