<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>makedivx.sh</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="syntax" content="bash">
<meta name="settings" content="use_css,pre_wrap,no_foldcolumn,expand_tabs,prevent_copy=,use_input_for_pc=fallback">
<meta name="colorscheme" content="default">
<style>
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #ffffff; background-color: #000000; }
body { font-family: monospace; color: #ffffff; background-color: #000000; }
* { font-size: 1em; }
.Comment { color: #8080ff; }
.Constant { color: #ff6060; }
.Special { color: #ff40ff; }
.Identifier { color: #00ffff; }
.Statement { color: #ffff00; }
.PreProc { color: #ff40ff; }
-->
</style>
</head>
<body>
<pre id='vimCodeElement'>
<span class="Comment">#!/bin/bash</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment">## \file makedivx.sh</span>
<span class="Comment">## \author Sebastien Beaugrand</span>
<span class="Comment">## \sa <a href="http://beaugrand.chez.com/">http://beaugrand.chez.com/</a></span>
<span class="Comment">## \copyright CeCILL 2.1 Free Software license</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># This is an interactive shell script to rip DVD and encode DIVX.</span>
<span class="Comment"># It can :</span>
<span class="Comment"># - rip, encode audio, encode video, separately into different sessions</span>
<span class="Comment"># - crop the black bars with autodetection</span>
<span class="Comment"># - choose the best resolution for the 16:9 or 4:3 format</span>
<span class="Comment"># - maximize volume (with a mencoder patch)</span>
<span class="Comment"># - extract subtitle into a separated text file (with transcode tools)</span>
<span class="Comment"># - split the AVI</span>
<span class="Comment"># The video bitrate is a bit different from the mencoder recommendation, it's</span>
<span class="Comment"># for a maximum filling for one CD, or to leave a margin to split the AVI.</span>
<span class="Comment"># Type makedivx.sh --help for options.</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Date Author Comments</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># 25/02/2003 Sebastien Beaugrand Creation</span>
<span class="Comment"># 20/04/2004 Sebastien Beaugrand Add crop autodetection process</span>
<span class="Comment"># 30/07/2004 Sebastien Beaugrand Add volume maximization and AVI spliting</span>
<span class="Comment"># 17/08/2004 Sebastien Beaugrand Add volume maximization with normalize</span>
<span class="Comment"># 21/09/2004 Sebastien Beaugrand Add automatic title with lsdvd</span>
<span class="Comment"># 24/09/2006 Sebastien Beaugrand Encode audio and video at the same time to</span>
<span class="Comment"># avoid desynchronization</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Gray format : ffmpeg -i 01.avi -vf format=gray -pix_fmt yuv420p 01.mp4</span>
<span class="Comment"># Limits the CPU usage : cpulimit -e mencoder -l 50</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">gnu</span>=true
<span class="Identifier">lang</span>=fr
<span class="Identifier">ratemin</span>=<span class="Constant">800</span>
<span class="Identifier">marginbr</span>=<span class="Constant">6</span>
<span class="Identifier">splitmarginsize</span>=<span class="Constant">30</span>
<span class="Identifier">tcpath</span>=~/tmp/transcode
<span class="Comment">#mpeg4opt=vhq:v4mv:trell:vqmin=2:vlelim=-4:vcelim=9:lumi_mask=0.05:dark_mask=0.01</span>
<span class="Identifier">mpeg4opt</span>=vhq:v4mv:trell:vqmin<span class="Statement">=</span>2:o<span class="Statement">=</span><span class="Identifier">luma_elim_threshold</span>=<span class="Constant">-4</span>
<span class="Identifier">mpeg4opt</span>=<span class="PreProc">$mpeg4opt</span>:o<span class="Statement">=</span><span class="Identifier">chroma_elim_threshold</span>=9:lumi_mask<span class="Statement">=</span><span class="Constant">0</span>.05:dark_mask<span class="Statement">=</span><span class="Constant">0</span>.<span class="Constant">01</span>
<span class="Identifier">red</span>=<span class="Statement">"</span><span class="Special">\033</span><span class="Constant">[31;1m</span><span class="Statement">"</span>
<span class="Identifier">green</span>=<span class="Statement">"</span><span class="Special">\033</span><span class="Constant">[32;1m</span><span class="Statement">"</span>
<span class="Identifier">blue</span>=<span class="Statement">"</span><span class="Special">\033</span><span class="Constant">[34;1m</span><span class="Statement">"</span>
<span class="Identifier">reset</span>=<span class="Statement">"</span><span class="Special">\033</span><span class="Constant">[0m</span><span class="Statement">"</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Print a fatal error</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">fatal()</span>
<span class="Identifier">{</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">$blue$1</span><span class="Special">\n</span><span class="Constant">press enter to quit</span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Statement">read</span>
<span class="Statement">exit</span> <span class="Constant">-1</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Read from standard input</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">myRead()</span>
<span class="Identifier">{</span>
<span class="Statement">echo</span><span class="Constant"> -ne </span><span class="Statement">"</span><span class="PreProc">$green$1</span><span class="Constant"> [</span><span class="PreProc">$2</span><span class="Constant">] </span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$auto</span> <span class="Statement">=</span> <span class="Constant">no</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">read</span> ret
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$ret</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">ret</span>=<span class="PreProc">$2</span>
<span class="Statement">fi</span>
<span class="Statement">else</span>
<span class="Statement">echo</span>
<span class="Identifier">ret</span>=<span class="PreProc">$2</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Read lsdvd</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">readLsdvd()</span>
<span class="Identifier">{</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">!</span> <span class="Statement">-r</span> lsdvd.txt <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Statement">type</span> lsdvd <span class="Statement">&</span><span class="Statement">></span>/dev/null <span class="Statement">;</span> <span class="Statement">then</span>
lsdvd <span class="Statement">-q</span> <span class="PreProc">$dev</span> <span class="Statement">|</span> <span class="Statement">grep</span> a <span class="Statement">></span>lsdvd.txt
<span class="Statement">else</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">$blue</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">for automatic value of the title install lsdvd</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Select title</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">selectTitle()</span>
<span class="Identifier">{</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$title</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">title</span>=<span class="Constant">1</span>
readLsdvd
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-r</span> lsdvd.txt <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
cat lsdvd.txt
<span class="Identifier">title</span>=<span class="Special">`</span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> lsdvd.txt`</span>
<span class="Identifier">title</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">${</span><span class="PreProc">title</span><span class="Statement">:0-2</span><span class="Statement">:2</span><span class="PreProc">}</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> awk </span><span class="Statement">'</span><span class="Constant">{ print $0+0 }</span><span class="Statement">'</span><span class="Special">`</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$title</span> <span class="Statement">=</span> <span class="Constant">0</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">lsdvd error</span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Identifier">title</span>=<span class="Constant">1</span>
<span class="Statement">fi</span>
myRead <span class="Statement">"</span><span class="Constant">title ?</span><span class="Statement">"</span> <span class="PreProc">$title</span>
checkNumericValue <span class="PreProc">$ret</span> <span class="Statement">"</span><span class="Constant">title</span><span class="Statement">"</span> <span class="Constant">1</span>
<span class="Identifier">title</span>=dvd://<span class="PreProc">$ret</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$dev</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">title</span>=<span class="Statement">"</span><span class="Constant">-dvd-device </span><span class="PreProc">$dev</span><span class="Constant"> </span><span class="PreProc">$title</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Read the DVD structure</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">readStructure()</span>
<span class="Identifier">{</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">!</span> <span class="Statement">-r</span> structure.txt <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
selectTitle
mplayer <span class="PreProc">$title</span> <span class="Statement">-v</span> <span class="Special">-nosound</span> <span class="Special">-novideo</span> <span class="Statement">></span>structure.txt <span class="Constant">2</span><span class="Statement">></span>/dev/null
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Select title and angle</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">selectTitleAndAngle()</span>
<span class="Identifier">{</span>
selectTitle
readStructure
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$angle</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">n</span>=<span class="Special">`</span><span class="Statement">grep</span><span class="Special"> </span><span class="Statement">"</span><span class="Constant">angles</span><span class="Statement">"</span><span class="Special"> structure.txt`</span>
<span class="Identifier">n</span>=<span class="PreProc">${</span><span class="PreProc">n</span><span class="Statement">:10</span><span class="Statement">:1</span><span class="PreProc">}</span>
<span class="Statement">if </span><span class="Special">((</span>n <span class="Statement">></span> <span class="Constant">1</span><span class="Special">))</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">angle ?</span><span class="Statement">"</span> <span class="Constant">1</span>
checkNumericValue <span class="PreProc">$ret</span> <span class="Statement">"</span><span class="Constant">angle</span><span class="Statement">"</span> <span class="Constant">1</span>
<span class="Identifier">angle</span>=<span class="Statement">"</span><span class="Constant">-dvdangle </span><span class="PreProc">$ret</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Select chapters</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">selectChapters()</span>
<span class="Identifier">{</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$first</span><span class="Statement">"</span> <span class="Statement">]</span> <span class="Statement">||</span> <span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$last</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
selectTitle
readLsdvd
myRead <span class="Statement">"</span><span class="Constant">first chapter ?</span><span class="Statement">"</span> <span class="Constant">1</span>
<span class="Identifier">first</span>=<span class="PreProc">$ret</span>
<span class="Identifier">last</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$title</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> awk </span><span class="Statement">'</span><span class="Constant">BEGIN { FS="//" } { print $2 }</span><span class="Statement">'</span><span class="Special">`</span>
<span class="Identifier">last</span>=<span class="Special">`head </span><span class="Special">-n</span><span class="Special"> </span><span class="PreProc">$last</span><span class="Special"> lsdvd.txt </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant"> </span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">6</span><span class="Special"> </span><span class="Statement">|</span><span class="Special">\</span>
<span class="Special"> tr </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">,\n</span><span class="Statement">'</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> awk </span><span class="Statement">'</span><span class="Constant">{ print $0+0 }</span><span class="Statement">'</span><span class="Special">`</span>
myRead <span class="Statement">"</span><span class="Constant">last chapter ?</span><span class="Statement">"</span> <span class="PreProc">$last</span>
<span class="Identifier">last</span>=<span class="PreProc">$ret</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Rip the DVD</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">makeDump()</span>
<span class="Identifier">{</span>
<span class="Identifier">list</span>=
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-f</span> dump.<span class="Constant">01</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">do you want to delete dump files ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">n</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">rm</span> <span class="Statement">-f</span> dump.*
<span class="Statement">fi</span>
<span class="Statement">fi</span>
selectTitleAndAngle
selectChapters
<span class="Statement">for ((</span><span class="Statement">i </span><span class="Statement">=</span><span class="Statement"> </span><span class="Constant">first</span><span class="Statement">; i </span><span class="Statement"><=</span><span class="Statement"> last; ++i</span><span class="Statement">))</span><span class="Statement">;</span> <span class="Statement">do</span>
<span class="Identifier">file</span>=dump.<span class="Special">`</span><span class="Statement">printf</span><span class="Special"> %02d </span><span class="PreProc">$i</span><span class="Special">`</span>
<span class="Identifier">list</span>=<span class="Statement">"</span><span class="PreProc">$list</span><span class="Constant"> </span><span class="PreProc">$file</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-f</span> <span class="PreProc">$file</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">do you want to overwrite </span><span class="PreProc">$file</span><span class="Constant"> ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">n</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">n</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">continue</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">writing </span><span class="PreProc">$file$reset</span><span class="Statement">"</span>
<span class="Comment"># With mencoder it doesn't work well, then we use mplayer to dump.</span>
<span class="Comment"># On some DVD the volume can be different when we select a chapter,</span>
<span class="Comment"># in this case it's better to encode directly from the DVD (this</span>
<span class="Comment"># problem was encountered only once on "Rammstein Live Aus Berlin").</span>
mplayer <span class="PreProc">$title</span> <span class="PreProc">$angle</span> <span class="Special">-chapter</span> <span class="PreProc">$i</span>-<span class="PreProc">$i</span> <span class="Special">-dumpstream</span> <span class="Special">-dumpfile</span> <span class="PreProc">$file</span>
<span class="Statement">done</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Select input</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">selectInput()</span>
<span class="Identifier">{</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$direct</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
selectTitleAndAngle
<span class="Statement">elif</span> <span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$list</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">list</span>=
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$first</span><span class="Statement">"</span> <span class="Statement">]</span> <span class="Statement">||</span> <span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$last</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">first chapter ?</span><span class="Statement">"</span> <span class="Constant">1</span>
<span class="Identifier">first</span>=<span class="PreProc">$ret</span>
<span class="Identifier">last</span>=<span class="Special">`</span><span class="Statement">ls</span><span class="Special"> </span><span class="Constant">-1</span><span class="Special"> </span><span class="Special">--indicator-style</span><span class="Statement">=</span><span class="Special">none dump.* </span><span class="Constant">2</span><span class="Statement">></span><span class="Special">/dev/null </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special">`</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$last</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">last</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">${</span><span class="PreProc">last</span><span class="Statement">:0-2</span><span class="Statement">:2</span><span class="PreProc">}</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> awk </span><span class="Statement">'</span><span class="Constant">{ print $0+0 }</span><span class="Statement">'</span><span class="Special">`</span>
<span class="Statement">else</span>
fatal <span class="Statement">"</span><span class="Constant">cannot access to any dump file</span><span class="Statement">"</span>
<span class="Statement">fi</span>
myRead <span class="Statement">"</span><span class="Constant">last chapter ?</span><span class="Statement">"</span> <span class="PreProc">$last</span>
<span class="Identifier">last</span>=<span class="PreProc">$ret</span>
<span class="Statement">fi</span>
<span class="Statement">for ((</span><span class="Statement">i </span><span class="Statement">=</span><span class="Statement"> </span><span class="Constant">first</span><span class="Statement">; i </span><span class="Statement"><=</span><span class="Statement"> last; ++i</span><span class="Statement">))</span><span class="Statement">;</span> <span class="Statement">do</span>
<span class="Identifier">file</span>=dump.<span class="Special">`</span><span class="Statement">printf</span><span class="Special"> %02d </span><span class="PreProc">$i</span><span class="Special">`</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">!</span> <span class="Statement">-r</span> <span class="PreProc">$file</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
fatal <span class="Statement">"</span><span class="Constant">cannot access to </span><span class="PreProc">$file</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Identifier">list</span>=<span class="Statement">"</span><span class="PreProc">$list</span><span class="Constant"> </span><span class="PreProc">$file</span><span class="Statement">"</span>
<span class="Statement">done</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">using the files : </span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="PreProc">$list</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Maximize volume</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">maximizeVolume()</span>
<span class="Identifier">{</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$volume</span> <span class="Statement">!=</span> <span class="Constant">1</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">return</span>
<span class="Statement">fi</span>
myRead <span class="Statement">"</span><span class="Constant">maximize volume ? (y/n)</span><span class="Statement">"</span> y
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$normalize</span> <span class="Statement">=</span> <span class="Constant">"true"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$direct</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
mplayer <span class="PreProc">$title</span> <span class="PreProc">$angle</span> <span class="Special">-vo</span> null\
<span class="Special">-ao</span> pcm:file<span class="Statement">=</span><span class="Constant">sound</span>.wav <span class="Special">-alang</span> <span class="PreProc">$lang</span>
<span class="Identifier">volume</span>=<span class="Special">`normalize </span><span class="Special">-n</span><span class="Special"> </span><span class="Special">-a</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> </span><span class="Special">--fractions</span><span class="Special"> sound.wav`</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$volume</span>
<span class="Identifier">volume</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$volume</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> awk </span><span class="Statement">'</span><span class="Constant">BEGIN { FS = " " } { print 1/$2 }</span><span class="Statement">'</span><span class="Special">`</span>
<span class="Statement">else</span>
myRead <span class="Statement">"</span><span class="Constant">only one temporary sound file ? (y/n)</span><span class="Statement">"</span> y
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-f</span> sound.wav <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">do you want to overwrite sound.wav ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">n</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
cat <span class="PreProc">$list</span> <span class="Statement">|</span>\
mplayer <span class="Special">-vo</span> null <span class="Special">-ao</span> pcm:file<span class="Statement">=</span><span class="Constant">sound</span>.wav <span class="Special">-aid</span> <span class="PreProc">$aid</span> -
<span class="Statement">fi</span>
<span class="Statement">else</span>
cat <span class="PreProc">$list</span> <span class="Statement">|</span>\
mplayer <span class="Special">-vo</span> null <span class="Special">-ao</span> pcm:file<span class="Statement">=</span><span class="Constant">sound</span>.wav <span class="Special">-aid</span> <span class="PreProc">$aid</span> -
<span class="Statement">fi</span>
<span class="Identifier">volume</span>=<span class="Special">`normalize </span><span class="Special">-n</span><span class="Special"> </span><span class="Special">-a</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> </span><span class="Special">--fractions</span><span class="Special"> sound.wav`</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$volume</span>
<span class="Identifier">volume</span>=\
<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$volume</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> awk </span><span class="Statement">'</span><span class="Constant">BEGIN { FS = " " } { print 1/$2 }</span><span class="Statement">'</span><span class="Special">`</span>
<span class="Statement">else</span>
<span class="Identifier">list2</span>=
<span class="Statement">for ((</span><span class="Statement">i </span><span class="Statement">=</span><span class="Statement"> </span><span class="Constant">first</span><span class="Statement">; i </span><span class="Statement"><=</span><span class="Statement"> last; ++i</span><span class="Statement">))</span><span class="Statement">;</span> <span class="Statement">do</span>
<span class="Identifier">file1</span>=dump.<span class="Special">`</span><span class="Statement">printf</span><span class="Special"> %02d </span><span class="PreProc">$i</span><span class="Special">`</span>
<span class="Identifier">file2</span>=sound<span class="Special">`</span><span class="Statement">printf</span><span class="Special"> %02d </span><span class="PreProc">$i</span><span class="Special">`</span>.wav
<span class="Identifier">list2</span>=<span class="Statement">"</span><span class="PreProc">$list2</span><span class="Constant"> </span><span class="PreProc">$file2</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-f</span> <span class="PreProc">$file2</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">do you want to overwrite </span><span class="PreProc">$file2</span><span class="Constant"> ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">n</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">n</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">continue</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">writing </span><span class="PreProc">$file2$reset</span><span class="Statement">"</span>
mplayer <span class="PreProc">$file1</span> <span class="Special">-vo</span> null <span class="Special">-ao</span> pcm:file<span class="Statement">=</span><span class="PreProc">$file2</span> <span class="Special">-aid</span> <span class="PreProc">$aid</span>
<span class="Statement">done</span>
normalize <span class="Statement">-n</span> <span class="Statement">-a</span> <span class="Constant">1</span> <span class="Special">--fractions</span> <span class="Statement">--</span> <span class="PreProc">$list2</span> <span class="Statement">|</span>\
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">sound</span><span class="Statement">"</span> <span class="Statement">></span>normalize.txt
cat normalize.txt
<span class="Identifier">volume</span>=<span class="Special">`awk </span><span class="Statement">'</span><span class="Constant">\</span>
<span class="Constant"> BEGIN { FS = " "; m = 0 }\</span>
<span class="Constant"> { v = strtonum($2); if (v > m) m = v }\</span>
<span class="Constant"> END { if (m > 0) print 1/m; else print 1 }</span><span class="Statement">'</span><span class="Special"> normalize.txt`</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Statement">else</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">!</span> <span class="Statement">-r</span> volume.txt <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">warning: mencoder must be patched for this</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="Constant">see <a href="http://beaugrand.chez.com/">http://beaugrand.chez.com/</a></span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="Constant">or use normalize with -n option</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="Constant">please wait, it takes a few minutes...</span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$direct</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
mencoder <span class="PreProc">$title</span> <span class="PreProc">$angle</span> <span class="Special">-ovc</span> frameno <span class="Statement">-o</span> /dev/null <span class="Special">-oac</span> pcm\
<span class="Special">-alang</span> <span class="PreProc">$lang</span> <span class="Special">-quiet</span> <span class="PreProc">$mencOpt</span> <span class="Constant">2</span><span class="Statement">></span>/dev/null <span class="Statement">|</span>\
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">gain=</span><span class="Statement">"</span> <span class="Statement">></span>volume.txt
<span class="Statement">else</span>
<span class="Statement">echo</span><span class="Constant">\</span>
<span class="Constant"> mencoder -ovc frameno -o /dev/null -oac pcm\</span>
<span class="Constant"> -aid </span><span class="PreProc">$aid</span><span class="Constant"> -quiet </span><span class="PreProc">$mencOpt</span><span class="Constant"> </span><span class="PreProc">$list</span>
mencoder <span class="Special">-ovc</span> frameno <span class="Statement">-o</span> /dev/null <span class="Special">-oac</span> pcm\
<span class="Special">-aid</span> <span class="PreProc">$aid</span> <span class="Special">-quiet</span> <span class="PreProc">$mencOpt</span> <span class="PreProc">$list</span> <span class="Constant">2</span><span class="Statement">></span>/dev/null <span class="Statement">|</span>\
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">gain=</span><span class="Statement">"</span> <span class="Statement">></span>volume.txt
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Statement">tail</span> <span class="Statement">-n</span> <span class="Constant">1</span> volume.txt
<span class="Identifier">volume</span>=<span class="Special">`</span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> volume.txt </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">"</span><span class="Constant">=</span><span class="Statement">"</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">3</span><span class="Special">`</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$volume</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">it seems mencoder is not patched for this</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="Constant">please see <a href="http://beaugrand.chez.com/">http://beaugrand.chez.com/</a></span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="Constant">or use normalize with -n option</span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Identifier">volume</span>=<span class="Constant">1</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Statement">echo</span><span class="Constant"> -ne </span><span class="PreProc">$bel</span>
myRead <span class="Statement">"</span><span class="Constant">volume ?</span><span class="Statement">"</span> <span class="PreProc">$volume</span>
<span class="Identifier">volume</span>=<span class="PreProc">$ret</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Select the subtitle</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">selectSubtitleId()</span>
<span class="Identifier">{</span>
readStructure
<span class="Identifier">sid</span>=`<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">sid</span><span class="Statement">"</span> structure.txt <span class="Statement">|</span> <span class="Statement">grep</span> <span class="PreProc">$lang</span> <span class="Statement">|</span> <span class="Statement">tail</span> <span class="Special">-n</span> <span class="Constant">1</span>`
<span class="Identifier">sid</span>=<span class="PreProc">${</span><span class="PreProc">sid</span><span class="Statement">:18</span><span class="Statement">:2</span><span class="PreProc">}</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$sid</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">sid</span>=<span class="Special">`</span><span class="Statement">grep</span><span class="Special"> </span><span class="Special">-m</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> </span><span class="Statement">"</span><span class="Constant">sid</span><span class="Statement">"</span><span class="Special"> structure.txt`</span>
<span class="Identifier">sid</span>=<span class="PreProc">${</span><span class="PreProc">sid</span><span class="Statement">:18</span><span class="Statement">:2</span><span class="PreProc">}</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$sid</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">no subtitle found</span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Statement">return</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
myRead <span class="Statement">"</span><span class="Constant">sid ?</span><span class="Statement">"</span> <span class="PreProc">$sid</span>
<span class="Identifier">sid</span>=<span class="Statement">"</span><span class="Constant">-sid </span><span class="PreProc">$ret</span><span class="Statement">"</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Select scale</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">selectScale()</span>
<span class="Identifier">{</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$res</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Comment"># Dimensions are adapted to the majority of the resolutions used</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$aspect</span> <span class="Statement">=</span> <span class="Constant">'1'</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">resolution :\</span>
<span class="Constant"> </span><span class="Special">\n</span><span class="Constant"> (1) 720:400</span><span class="Special">\n</span><span class="Constant"> (2) 640:352</span><span class="Special">\n</span><span class="Constant"> (3) 576:320</span><span class="Special">\n</span><span class="Constant"> (4) 512:288</span><span class="Special">\n</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">1</span><span class="Statement">"</span>
<span class="Statement">case</span> <span class="PreProc">$ret</span> <span class="Statement">in</span>
1<span class="Statement">)</span> <span class="Identifier">res</span>=720:400 <span class="Statement">;;</span> <span class="Comment"># 720x405</span>
2<span class="Statement">)</span> <span class="Identifier">res</span>=640:352 <span class="Statement">;;</span> <span class="Comment"># 640x360</span>
3<span class="Statement">)</span> <span class="Identifier">res</span>=576:320 <span class="Statement">;;</span> <span class="Comment"># 576x324</span>
4<span class="Statement">)</span> <span class="Identifier">res</span>=512:288 <span class="Statement">;;</span>
<span class="Statement">esac</span>
<span class="Statement">elif</span> <span class="Statement">[</span> <span class="PreProc">$aspect</span> <span class="Statement">=</span> <span class="Constant">'2'</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">resolution :\</span>
<span class="Constant"> </span><span class="Special">\n</span><span class="Constant"> (1) 720:528</span><span class="Special">\n</span><span class="Constant"> (2) 640:480</span><span class="Special">\n</span><span class="Constant"> (3) 576:432</span><span class="Special">\n</span><span class="Constant"> (4) 512:384</span><span class="Special">\n</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">2</span><span class="Statement">"</span>
<span class="Statement">case</span> <span class="PreProc">$ret</span> <span class="Statement">in</span>
1<span class="Statement">)</span> <span class="Identifier">res</span>=720:528 <span class="Statement">;;</span> <span class="Comment"># 720x540</span>
2<span class="Statement">)</span> <span class="Identifier">res</span>=640:480 <span class="Statement">;;</span>
3<span class="Statement">)</span> <span class="Identifier">res</span>=576:432 <span class="Statement">;;</span>
4<span class="Statement">)</span> <span class="Identifier">res</span>=512:384 <span class="Statement">;;</span>
<span class="Statement">esac</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Comment"># The 4:3 videos are often interlaced</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$aspect</span> <span class="Statement">!=</span> <span class="Statement">'</span><span class="Constant">1</span><span class="Statement">'</span> <span class="Statement">]</span> <span class="Statement">&&</span> <span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$deinterlace</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">deinterlace ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">n</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">deinterlace</span>=<span class="Statement">"</span><span class="Constant">yadif=0,</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$res</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$crop</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">resx</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$res</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">:</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">1</span><span class="Special">`</span>
<span class="Identifier">resy</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$res</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">:</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
<span class="Identifier">width</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$crop</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">:</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">1</span><span class="Special">`</span>
<span class="Identifier">height</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$crop</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">:</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
<span class="Special">((</span>resy <span class="Statement">=</span> <span class="Constant">resy</span> * <span class="Constant">720</span> * height / <span class="Constant">576</span> / width<span class="Special">))</span>
<span class="Statement">if </span><span class="Special">((</span>resy / <span class="Constant">16</span> * <span class="Constant">16</span> <span class="Statement">!=</span> resy<span class="Special">))</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Special">((</span>resy <span class="Statement">=</span> (resy / <span class="Constant">16</span> + <span class="Constant">1</span>) * <span class="Constant">16</span><span class="Special">))</span>
<span class="Statement">fi</span>
<span class="Identifier">res</span>=<span class="PreProc">$resx</span>:<span class="PreProc">$resy</span>
<span class="Statement">fi</span>
<span class="Identifier">scale</span>=<span class="Statement">"</span><span class="Constant">scale=</span><span class="PreProc">$res</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">$blue$scale$reset</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Select crop and scale</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">selectCropAndScale()</span>
<span class="Identifier">{</span>
<span class="Identifier">aspect</span>=<span class="Constant">3</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$res</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">aspect :</span><span class="Special">\n</span><span class="Constant"> (1) 16:9</span><span class="Special">\n</span><span class="Constant"> (2) 4:3</span><span class="Special">\n</span><span class="Constant"> (3) no scale</span><span class="Special">\n</span><span class="Statement">"</span> <span class="Constant">1</span>
<span class="Identifier">aspect</span>=<span class="PreProc">$ret</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$crop</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$aspect</span> <span class="Statement">=</span> <span class="Constant">'1'</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">try mplayer -vf rectangle=720:432:0:72</span><span class="Statement">"</span>
myRead <span class="Statement">"</span><span class="Constant">crop ? (y/n/rectangle)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">720:432:0:72</span><span class="Statement">"</span>
<span class="Statement">else</span>
myRead <span class="Statement">"</span><span class="Constant">crop ? (y/n/rectangle)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">n</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">n</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
selectScale
<span class="Statement">return</span>
<span class="Statement">elif</span> <span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">!=</span> y <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">crop=</span><span class="PreProc">$ret</span><span class="Statement">"</span><span class="Constant"> </span><span class="Statement">>></span>crop.txt
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">!</span> <span class="Statement">-r</span> crop.txt <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">cropdetect ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">y</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">detect</span>=<span class="Statement">"</span><span class="Constant">-quiet -nosound -vo null -speed 100 -vf cropdetect=24:1</span><span class="Statement">"</span>
<span class="Identifier">detect</span>=<span class="Statement">"</span><span class="PreProc">$detect</span><span class="Constant"> -nocache -nozoom -nolirc</span><span class="Statement">"</span>
<span class="Statement">echo</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$direct</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$gnu</span> <span class="Statement">=</span> <span class="Constant">"true"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
mplayer <span class="PreProc">$title</span> <span class="PreProc">$angle</span> <span class="PreProc">$detect</span> <span class="Constant">2</span><span class="Statement">></span>/dev/null <span class="Statement">|</span>\
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">CROP</span><span class="Statement">"</span> <span class="Statement">|</span> tee crop.txt <span class="Statement">|</span>\
<span class="Statement">sed</span> <span class="Statement">-n</span> <span class="Statement">'</span><span class="Constant">99~100s/^.*$/\o033[2A/p;100~100=</span><span class="Statement">'</span>
<span class="Statement">else</span>
mplayer <span class="PreProc">$title</span> <span class="PreProc">$angle</span> <span class="PreProc">$detect</span> <span class="Constant">2</span><span class="Statement">></span>/dev/null <span class="Statement">|</span>\
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">CROP</span><span class="Statement">"</span> <span class="Statement">></span>crop.txt
<span class="Statement">fi</span>
<span class="Statement">else</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$gnu</span> <span class="Statement">=</span> <span class="Constant">"true"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
cat <span class="PreProc">$list</span> <span class="Statement">|</span> mplayer <span class="PreProc">$detect</span> - <span class="Constant">2</span><span class="Statement">></span>/dev/null <span class="Statement">|</span>\
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">CROP</span><span class="Statement">"</span> <span class="Statement">|</span> tee crop.txt <span class="Statement">|</span>\
<span class="Statement">sed</span> <span class="Statement">-n</span> <span class="Statement">'</span><span class="Constant">99~100s/^.*$/\o033[2A/p;100~100=</span><span class="Statement">'</span>
<span class="Statement">else</span>
cat <span class="PreProc">$list</span> <span class="Statement">|</span> mplayer <span class="PreProc">$detect</span> - <span class="Constant">2</span><span class="Statement">></span>/dev/null <span class="Statement">|</span>\
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">CROP</span><span class="Statement">"</span> <span class="Statement">></span>crop.txt
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-r</span> crop.txt <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">crop</span>=<span class="Special">`</span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> crop.txt </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">)</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">1</span><span class="Special">`</span>
<span class="Statement">else</span>
<span class="Identifier">crop</span>=720:576:0:0
<span class="Statement">fi</span>
<span class="Statement">echo</span><span class="Constant"> -ne </span><span class="PreProc">$bel</span>
myRead <span class="Statement">"</span><span class="Constant">crop ?</span><span class="Statement">"</span> <span class="PreProc">$crop</span>
<span class="Identifier">crop</span>=<span class="PreProc">$ret</span>
<span class="Statement">fi</span>
<span class="Comment"># Scale</span>
selectScale
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">"</span><span class="PreProc">$crop</span><span class="Statement">"</span> <span class="Statement">=</span> <span class="Constant">"720:576:0:0"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">crop</span>=
<span class="Statement">else</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">crop=</span><span class="PreProc">$crop$reset</span><span class="Statement">"</span>
<span class="Identifier">crop</span>=<span class="Statement">"</span><span class="Constant">crop=</span><span class="PreProc">$crop</span><span class="Constant">,</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Select rate</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">selectRate()</span>
<span class="Identifier">{</span>
<span class="Comment"># With 800kbps we can encode a 1h45 DVD on a 700MB CD</span>
selectTitle
readLsdvd
<span class="Identifier">time</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$title</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Statement">'</span><span class="Constant">BEGIN { FS="//" } { print $2 }</span><span class="Statement">'</span>`
<span class="Identifier">time</span>=`head <span class="Special">-n</span> <span class="PreProc">$time</span> lsdvd.txt <span class="Statement">|</span> <span class="Statement">tail</span> <span class="Special">-n</span> <span class="Constant">1</span> <span class="Statement">|</span> cut <span class="Special">-c</span> 20-27`
<span class="Identifier">hour</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">${</span><span class="PreProc">time</span><span class="Statement">:0</span><span class="Statement">:2</span><span class="PreProc">}</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Statement">'</span><span class="Constant">{ print $0+0 }</span><span class="Statement">'</span>`
<span class="Identifier">min</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">${</span><span class="PreProc">time</span><span class="Statement">:3</span><span class="Statement">:2</span><span class="PreProc">}</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Statement">'</span><span class="Constant">{ print $0+0 }</span><span class="Statement">'</span>`
<span class="Identifier">sec</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">${</span><span class="PreProc">time</span><span class="Statement">:6</span><span class="Statement">:2</span><span class="PreProc">}</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Statement">'</span><span class="Constant">{ print $0+0 }</span><span class="Statement">'</span>`
<span class="Special">((</span>time <span class="Statement">=</span> <span class="Constant">hour</span> * <span class="Constant">3600</span> + min * <span class="Constant">60</span> + sec<span class="Special">))</span>
<span class="Special">((</span>rate1 <span class="Statement">=</span> (cdrsize - <span class="Constant">5</span>) * <span class="Constant">1024</span> * <span class="Constant">1024</span> / <span class="Constant">125</span> / time - audiobr - marginbr<span class="Special">))</span>
<span class="Special">((</span>rate2 <span class="Statement">=</span> ((cdrsize - <span class="Constant">5</span>) * <span class="Constant">2</span> - splitmarginsize) *\
<span class="Constant">1024</span> * <span class="Constant">1024</span> / <span class="Constant">125</span> / time - audiobr<span class="Special">))</span>
<span class="Statement">echo</span><span class="Constant"> -ne </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">try </span><span class="PreProc">$rate1</span><span class="Constant"> for </span><span class="PreProc">${</span><span class="PreProc">cdrsize</span><span class="PreProc">}</span><span class="Constant">MB CD,</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="Constant"> </span><span class="PreProc">$rate2</span><span class="Constant"> for 2 x </span><span class="PreProc">${</span><span class="PreProc">cdrsize</span><span class="PreProc">}</span><span class="Constant">MB CD</span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Special">((</span>rate2 <span class="Statement">></span> <span class="Constant">900</span><span class="Special">))</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">rate2</span>=<span class="Constant">900</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$nbcd</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Special">((</span>rate1 <span class="Statement">>=</span> ratemin<span class="Special">))</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">video bitrate ?</span><span class="Statement">"</span> <span class="PreProc">$rate1</span>
<span class="Statement">else</span>
myRead <span class="Statement">"</span><span class="Constant">video bitrate ?</span><span class="Statement">"</span> <span class="PreProc">$rate2</span>
<span class="Statement">fi</span>
<span class="Statement">else</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$nbcd</span> <span class="Statement">=</span> <span class="Constant">'1'</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">video bitrate ?</span><span class="Statement">"</span> <span class="PreProc">$rate1</span>
<span class="Statement">else</span>
myRead <span class="Statement">"</span><span class="Constant">video bitrate ?</span><span class="Statement">"</span> <span class="PreProc">$rate2</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Identifier">rate</span>=<span class="PreProc">$ret</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Select audio</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">selectAudio()</span>
<span class="Identifier">{</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$direct</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">return</span>
<span class="Statement">fi</span>
<span class="Statement">echo</span><span class="Constant"> -ne </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">audio channel</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="Constant"> to be check with mplayer dump.* -aid <id> :</span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Identifier">aid</span>=<span class="Constant">0</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-r</span> structure.txt <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">aid</span><span class="Statement">"</span> structure.txt
<span class="Identifier">aid</span>=<span class="Special">`</span><span class="Statement">grep</span><span class="Special"> </span><span class="Statement">"</span><span class="Constant">aid</span><span class="Statement">"</span><span class="Special"> structure.txt </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">grep</span><span class="Special"> </span><span class="Special">-m</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> </span><span class="PreProc">$lang</span><span class="Special">`</span>
<span class="Identifier">aid</span>=<span class="PreProc">${</span><span class="PreProc">aid</span><span class="Statement">:0-4</span><span class="Statement">:3</span><span class="PreProc">}</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$aid</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">aid</span>=<span class="Special">`</span><span class="Statement">grep</span><span class="Special"> </span><span class="Special">-m</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> </span><span class="Statement">"</span><span class="Constant">aid</span><span class="Statement">"</span><span class="Special"> structure.txt`</span>
<span class="Identifier">aid</span>=<span class="PreProc">${</span><span class="PreProc">aid</span><span class="Statement">:0-4</span><span class="Statement">:3</span><span class="PreProc">}</span>
<span class="Statement">fi</span>
<span class="Comment"># Case for the zero value</span>
<span class="Identifier">aid</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="PreProc">$aid</span><span class="Statement">"</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">"</span><span class="Constant"> </span><span class="Statement">"</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
<span class="Statement">fi</span>
myRead <span class="Statement">"</span><span class="Constant">audio channel ?</span><span class="Statement">"</span> <span class="PreProc">$aid</span>
<span class="Identifier">aid</span>=<span class="PreProc">$ret</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Encode the video</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">makeVideo()</span>
<span class="Identifier">{</span>
myRead <span class="Statement">"</span><span class="Constant">pass :</span><span class="Special">\n</span><span class="Constant"> (1) 1</span><span class="Special">\n</span><span class="Constant"> (2) 2</span><span class="Special">\n</span><span class="Constant"> (3) 1&2</span><span class="Special">\n</span><span class="Statement">"</span> <span class="Constant">3</span>
<span class="Identifier">pass</span>=<span class="PreProc">$ret</span>
selectInput
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$name</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">name</span>=<span class="Special">`</span><span class="Statement">ls</span><span class="Special"> </span><span class="Constant">-1</span><span class="Special"> </span><span class="Special">--indicator-style</span><span class="Statement">=</span><span class="Special">none *.avi </span><span class="Constant">2</span><span class="Statement">></span><span class="Special">/dev/null </span><span class="Statement">|</span><span class="Special">\</span>
<span class="Special"> </span><span class="Statement">grep</span><span class="Special"> </span><span class="Special">-v</span><span class="Special"> frameno </span><span class="Special">-m</span><span class="Special"> </span><span class="Constant">1</span><span class="Special">`</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$pass</span> <span class="Statement">!=</span> <span class="Statement">'</span><span class="Constant">2</span><span class="Statement">'</span> <span class="Statement">]</span> <span class="Statement">||</span> <span class="PreProc">(</span><span class="Statement">[</span> <span class="PreProc">$pass</span> <span class="Statement">=</span> <span class="Constant">'2'</span> <span class="Statement">]</span> <span class="Statement">&&</span> <span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$name</span><span class="Statement">"</span> <span class="Statement">]</span><span class="PreProc">)</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">name</span>=video
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">current directory :</span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Statement">ls</span>
<span class="Statement">fi</span>
myRead <span class="Statement">"</span><span class="Constant">enter a name</span><span class="Statement">"</span> <span class="PreProc">$name</span>
<span class="Identifier">name</span>=<span class="PreProc">$ret</span>
<span class="Statement">fi</span>
<span class="Identifier">ext</span>=<span class="PreProc">${</span><span class="PreProc">name</span><span class="Statement">##</span>*.<span class="PreProc">}</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">"</span><span class="PreProc">$ext</span><span class="Statement">"</span> <span class="Statement">!=</span> avi <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">name</span>=<span class="PreProc">${</span><span class="PreProc">name</span><span class="PreProc">}</span>.avi
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Special">((</span>pass <span class="Statement">&</span> <span class="Constant">1</span><span class="Special">))</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-f</span> <span class="PreProc">$name</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
fatal <span class="Statement">"</span><span class="PreProc">$name</span><span class="Constant"> is already exist !</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">else</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">!</span> <span class="Statement">-f</span> divx2pass.log <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
fatal <span class="Statement">"</span><span class="Constant">divx2pass.log do not exist !</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$rate</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
selectRate
<span class="Statement">fi</span>
<span class="Comment"># Crop and scale</span>
selectCropAndScale
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$deinterlace</span><span class="Statement">"</span> <span class="Statement">]</span> <span class="Statement">||</span> <span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$crop</span><span class="Statement">"</span> <span class="Statement">]</span> <span class="Statement">||</span> <span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$res</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">filters</span>=<span class="Statement">"</span><span class="Constant">-vf </span><span class="PreProc">$deinterlace$crop$scale</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Comment"># Additionnal subtitle</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$sid</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">sid</span><span class="Statement">"</span> structure.txt
myRead <span class="Statement">"</span><span class="Constant">additionnal subtitle ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">n</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
selectSubtitleId
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$sid</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">continue ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">y</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">n</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">exit</span> <span class="Constant">0</span>
<span class="Statement">fi</span>
<span class="Identifier">sid</span>=<span class="Statement">"</span><span class="Constant">-nosub</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">else</span>
<span class="Identifier">sid</span>=<span class="Statement">"</span><span class="Constant">-nosub</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Comment"># Audio</span>
selectAudio
<span class="Comment"># Volume</span>
maximizeVolume
<span class="Comment"># Encode</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$direct</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Special">((</span>pass <span class="Statement">&</span> <span class="Constant">1</span><span class="Special">))</span><span class="Statement">;</span> <span class="Statement">then</span>
mencoder <span class="PreProc">$title</span> <span class="PreProc">$angle</span> <span class="PreProc">$filters</span> <span class="PreProc">$sid</span>\
<span class="Special">-ovc</span> lavc <span class="Special">-lavcopts</span> <span class="Identifier">vcodec</span>=mpeg4:vpass<span class="Statement">=</span><span class="Constant">1</span>:vbitrate<span class="Statement">=</span><span class="PreProc">$rate</span>:<span class="PreProc">$mpeg4opt</span>\
<span class="Special">-oac</span> mp3lame <span class="Special">-lameopts</span> cbr:br<span class="Statement">=</span><span class="PreProc">$audiobr</span>:vol<span class="Statement">=</span><span class="PreProc">$volume</span>:aq<span class="Statement">=</span><span class="Constant">9</span>\
<span class="Special">-alang</span> <span class="PreProc">$lang</span> <span class="Special">-ffourcc</span> DIVX <span class="Statement">-o</span> <span class="PreProc">$name</span> <span class="PreProc">$mencOpt</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Special">((</span>pass <span class="Statement">&</span> <span class="Constant">2</span><span class="Special">))</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">info</span>=<span class="Statement">"</span><span class="PreProc">$title</span><span class="Constant"> </span><span class="PreProc">$angle</span><span class="Constant"> </span><span class="PreProc">$filters</span><span class="Constant"> </span><span class="PreProc">$sid</span><span class="Constant"> vbitrate=</span><span class="PreProc">$rate</span><span class="Constant">:</span><span class="PreProc">$mpeg4opt</span><span class="Statement">"</span>
<span class="Identifier">info</span>=<span class="Statement">"</span><span class="PreProc">$info</span><span class="Constant"> cbr:br=</span><span class="PreProc">$audiobr</span><span class="Constant">:vol=</span><span class="PreProc">$volume</span><span class="Constant">:aq=0 </span><span class="PreProc">$mencOpt</span><span class="Constant"> -alang </span><span class="PreProc">$lang</span><span class="Statement">"</span>
<span class="Identifier">info</span>=<span class="Statement">"</span><span class="Constant">%</span><span class="Statement">"</span><span class="Special">`</span><span class="Statement">expr</span><span class="Special"> length </span><span class="Statement">"</span><span class="PreProc">$info</span><span class="Statement">"</span><span class="Special">`</span><span class="Statement">"</span><span class="Constant">%</span><span class="PreProc">$info</span><span class="Statement">"</span>
mencoder <span class="PreProc">$title</span> <span class="PreProc">$angle</span> <span class="PreProc">$filters</span> <span class="PreProc">$sid</span>\
<span class="Special">-ovc</span> lavc <span class="Special">-lavcopts</span> <span class="Identifier">vcodec</span>=mpeg4:vpass<span class="Statement">=</span><span class="Constant">2</span>:vbitrate<span class="Statement">=</span><span class="PreProc">$rate</span>:<span class="PreProc">$mpeg4opt</span>\
<span class="Special">-oac</span> mp3lame <span class="Special">-lameopts</span> cbr:br<span class="Statement">=</span><span class="PreProc">$audiobr</span>:vol<span class="Statement">=</span><span class="PreProc">$volume</span>:aq<span class="Statement">=</span><span class="Constant">0</span>\
<span class="Special">-alang</span> <span class="PreProc">$lang</span> <span class="Special">-ffourcc</span> DIVX <span class="Statement">-o</span> <span class="PreProc">$name</span> <span class="Special">-info</span> <span class="Identifier">comment</span>=<span class="Statement">"</span><span class="PreProc">$info</span><span class="Statement">"</span> <span class="PreProc">$mencOpt</span>
<span class="Statement">fi</span>
<span class="Statement">else</span>
<span class="Statement">if </span><span class="Special">((</span>pass <span class="Statement">&</span> <span class="Constant">1</span><span class="Special">))</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">set</span><span class="Identifier"> </span><span class="Special">-x</span>
mencoder <span class="PreProc">$filters</span> <span class="PreProc">$sid</span>\
<span class="Special">-ovc</span> lavc <span class="Special">-lavcopts</span> <span class="Identifier">vcodec</span>=mpeg4:vpass<span class="Statement">=</span><span class="Constant">1</span>:vbitrate<span class="Statement">=</span><span class="PreProc">$rate</span>:<span class="PreProc">$mpeg4opt</span>\
<span class="Special">-oac</span> mp3lame <span class="Special">-lameopts</span> cbr:br<span class="Statement">=</span><span class="PreProc">$audiobr</span>:vol<span class="Statement">=</span><span class="PreProc">$volume</span>:aq<span class="Statement">=</span><span class="Constant">9</span> <span class="Special">-aid</span> <span class="PreProc">$aid</span>\
<span class="Special">-ffourcc</span> DIVX <span class="Statement">-o</span> <span class="PreProc">$name</span> <span class="PreProc">$mencOpt</span> <span class="PreProc">$list</span>
<span class="Special">{</span> <span class="Statement">set</span><span class="Identifier"> </span><span class="Special">+x</span><span class="Statement">;</span> <span class="Special">}</span> <span class="Constant">2</span><span class="Statement">></span>/dev/null
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Special">((</span>pass <span class="Statement">&</span> <span class="Constant">2</span><span class="Special">))</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">info</span>=<span class="Statement">"</span><span class="PreProc">$filters</span><span class="Constant"> </span><span class="PreProc">$sid</span><span class="Constant"> vbitrate=</span><span class="PreProc">$rate</span><span class="Constant">:</span><span class="PreProc">$mpeg4opt</span><span class="Statement">"</span>
<span class="Identifier">info</span>=<span class="Statement">"</span><span class="PreProc">$info</span><span class="Constant"> cbr:br=</span><span class="PreProc">$audiobr</span><span class="Constant">:vol=</span><span class="PreProc">$volume</span><span class="Constant">:aq=0 </span><span class="PreProc">$mencOpt</span><span class="Constant"> -aid </span><span class="PreProc">$aid</span><span class="Statement">"</span>
<span class="Identifier">info</span>=<span class="Statement">"</span><span class="Constant">%</span><span class="Statement">"</span><span class="Special">`</span><span class="Statement">expr</span><span class="Special"> length </span><span class="Statement">"</span><span class="PreProc">$info</span><span class="Statement">"</span><span class="Special">`</span><span class="Statement">"</span><span class="Constant">%</span><span class="PreProc">$info</span><span class="Statement">"</span>
<span class="Statement">set</span><span class="Identifier"> </span><span class="Special">-x</span>
mencoder <span class="PreProc">$filters</span> <span class="PreProc">$sid</span>\
<span class="Special">-ovc</span> lavc <span class="Special">-lavcopts</span> <span class="Identifier">vcodec</span>=mpeg4:vpass<span class="Statement">=</span><span class="Constant">2</span>:vbitrate<span class="Statement">=</span><span class="PreProc">$rate</span>:<span class="PreProc">$mpeg4opt</span>\
<span class="Special">-oac</span> mp3lame <span class="Special">-lameopts</span> cbr:br<span class="Statement">=</span><span class="PreProc">$audiobr</span>:vol<span class="Statement">=</span><span class="PreProc">$volume</span>:aq<span class="Statement">=</span><span class="Constant">0</span> <span class="Special">-aid</span> <span class="PreProc">$aid</span>\
<span class="Special">-ffourcc</span> DIVX <span class="Statement">-o</span> <span class="PreProc">$name</span> <span class="Special">-info</span> <span class="Identifier">comment</span>=<span class="Statement">"</span><span class="PreProc">$info</span><span class="Statement">"</span> <span class="PreProc">$mencOpt</span> <span class="PreProc">$list</span>
<span class="Special">{</span> <span class="Statement">set</span><span class="Identifier"> </span><span class="Special">+x</span><span class="Statement">;</span> <span class="Special">}</span> <span class="Constant">2</span><span class="Statement">></span>/dev/null
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Extract subtitle</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">extractSubtitle()</span>
<span class="Identifier">{</span>
<span class="Comment"># It needs transcode tools :</span>
<span class="Comment"># tcextract, subtitle2pgm, pgm2txt, srttool</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$direct</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
fatal <span class="Statement">"</span><span class="Constant">sorry, you must rip the DVD</span><span class="Statement">"</span>
<span class="Statement">fi</span>
selectInput
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">sid</span><span class="Statement">"</span> structure.txt
selectSubtitleId
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$sid</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
fatal
<span class="Statement">fi</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">please wait...</span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Identifier">sid</span>=0x2<span class="PreProc">$ret</span>
cat <span class="PreProc">$list</span> <span class="Statement">|</span> <span class="PreProc">${</span><span class="PreProc">tcpath</span><span class="PreProc">}</span>/import/tcextract <span class="Special">-x</span> ps1 <span class="Special">-t</span> vob <span class="Special">-a</span> <span class="PreProc">$sid</span> <span class="Statement">></span>subs
<span class="Statement">echo</span><span class="Constant"> -ne </span><span class="PreProc">$bel</span>
myRead <span class="Statement">"</span><span class="Constant">language ?</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">francais</span><span class="Statement">"</span>
<span class="Identifier">lang</span>=<span class="PreProc">$ret</span>
<span class="PreProc">${</span><span class="PreProc">tcpath</span><span class="PreProc">}</span>/contrib/subrip/subtitle2pgm <span class="Special">-o</span> <span class="PreProc">$lang</span> <span class="Special">-c</span> <span class="PreProc">$subgreylevels</span> <span class="Statement"><</span> subs
<span class="PreProc">${</span><span class="PreProc">tcpath</span><span class="PreProc">}</span>/contrib/subrip/pgm2txt <span class="PreProc">$lang</span>
myRead <span class="Statement">"</span><span class="Constant">check spelling ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">n</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
ispell <span class="Statement">-d</span> <span class="PreProc">$lang</span> <span class="PreProc">$lang</span>*txt
<span class="Statement">fi</span>
<span class="PreProc">${</span><span class="PreProc">tcpath</span><span class="PreProc">}</span>/contrib/subrip/srttool <span class="Special">-s</span> <span class="Special">-w</span> <span class="Statement"><</span> <span class="PreProc">$lang</span>.srtx <span class="Statement">></span><span class="PreProc">$lang</span>.srt
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Extract wav</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">extractWav()</span>
<span class="Identifier">{</span>
selectInput
myRead <span class="Statement">"</span><span class="Constant">number of files :</span><span class="Special">\n</span><span class="Constant"> (1) one per chapter</span><span class="Special">\n</span><span class="Constant"> (2) only one</span><span class="Special">\n</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">1</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">1</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$direct</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
selectChapters
<span class="Statement">else</span>
selectAudio
<span class="Statement">fi</span>
<span class="Statement">for ((</span><span class="Statement">i </span><span class="Statement">=</span><span class="Statement"> </span><span class="Constant">first</span><span class="Statement">; i </span><span class="Statement"><=</span><span class="Statement"> last; ++i</span><span class="Statement">))</span><span class="Statement">;</span> <span class="Statement">do</span>
<span class="Identifier">n</span>=<span class="Special">`</span><span class="Statement">printf</span><span class="Special"> %02d </span><span class="PreProc">$i</span><span class="Special">`</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$direct</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
mplayer <span class="PreProc">$title</span> <span class="PreProc">$angle</span> <span class="Special">-chapter</span> <span class="PreProc">$i</span>-<span class="PreProc">$i</span>\
<span class="Special">-vo</span> null <span class="Special">-ao</span> pcm:file<span class="Statement">=</span><span class="Constant">audio_</span><span class="PreProc">$n</span>.wav
<span class="Statement">else</span>
mplayer dump.<span class="PreProc">$n</span> <span class="Special">-vo</span> null <span class="Special">-aid</span> <span class="PreProc">$aid</span> <span class="Special">-ao</span> pcm:file<span class="Statement">=</span><span class="Constant">audio_</span><span class="PreProc">$n</span>.wav
<span class="Statement">fi</span>
<span class="Statement">done</span>
<span class="Statement">else</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$direct</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
mplayer <span class="PreProc">$title</span> <span class="PreProc">$angle</span> <span class="Special">-vo</span> null <span class="Special">-ao</span> pcm:file<span class="Statement">=</span><span class="Constant">audio</span>.wav
<span class="Statement">else</span>
selectAudio
cat <span class="PreProc">$list</span> <span class="Statement">|</span> mplayer <span class="Special">-vo</span> null <span class="Special">-aid</span> <span class="PreProc">$aid</span> <span class="Special">-ao</span> pcm:file<span class="Statement">=</span><span class="Constant">audio</span>.wav -
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Check a numeric value</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">checkNumericValue()</span>
<span class="Identifier">{</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$1</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">grep</span><span class="Special"> </span><span class="Statement">[</span>^0<span class="Statement">-9</span>,<span class="Statement">]</span><span class="Special">`</span><span class="Statement">"</span> <span class="Statement">]</span> <span class="Statement">||</span>\
<span class="PreProc">(</span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$3</span><span class="Statement">"</span> <span class="Statement">]</span> <span class="Statement">&&</span> <span class="Statement">(</span><span class="PreProc">(</span><span class="PreProc">$1</span> <span class="Statement"><</span> <span class="PreProc">$3</span><span class="PreProc">)</span><span class="Statement">)</span><span class="PreProc">)</span> <span class="Statement">||</span>\
<span class="PreProc">(</span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$4</span><span class="Statement">"</span> <span class="Statement">]</span> <span class="Statement">&&</span> <span class="Statement">(</span><span class="PreProc">(</span><span class="PreProc">$1</span> <span class="Statement">></span> <span class="PreProc">$4</span><span class="PreProc">)</span><span class="Statement">)</span><span class="PreProc">)</span><span class="Statement">;</span> <span class="Statement">then</span>
fatal <span class="Statement">"</span><span class="Constant">bad value for: </span><span class="PreProc">$2</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Read options</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">readOptions()</span>
<span class="Identifier">{</span>
<span class="Comment"># Initialize some variables set by options.</span>
<span class="Identifier">dir</span>=
<span class="Identifier">auto</span>=no
<span class="Identifier">sid</span>=
<span class="Identifier">subgreylevels</span>=<span class="Constant">255</span>,<span class="Constant">255</span>,<span class="Constant">0</span>,<span class="Constant">255</span>
<span class="Identifier">title</span>=
<span class="Identifier">angle</span>=
<span class="Identifier">first</span>=
<span class="Identifier">last</span>=
<span class="Identifier">normalize</span>=false
<span class="Identifier">nbcd</span>=
<span class="Identifier">crop</span>=
<span class="Identifier">subtitle</span>=no
<span class="Identifier">split</span>=no
<span class="Identifier">ipod</span>=no
<span class="Identifier">res</span>=
<span class="Identifier">rate</span>=
<span class="Identifier">audiobr</span>=<span class="Constant">128</span>
<span class="Identifier">volume</span>=<span class="Constant">1</span>
<span class="Identifier">wav</span>=no
<span class="Identifier">deinterlace</span>=
<span class="Identifier">dev</span>=
<span class="Identifier">cdrsize</span>=<span class="Constant">700</span>
<span class="Identifier">verbose</span>=no
<span class="Identifier">bel</span>=<span class="Statement">"</span><span class="Special">\a</span><span class="Statement">"</span>
<span class="Identifier">mencOpt</span>=
<span class="Identifier">ac_prev</span>=
<span class="Statement">for</span> ac_option
<span class="Statement">do</span>
<span class="Comment"># If the previous option needs an argument, assign it.</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$ac_prev</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">case</span> <span class="Statement">"</span><span class="PreProc">$ac_prev</span><span class="Statement">"</span> <span class="Statement">in</span>
rate<span class="Statement">)</span>
checkNumericValue <span class="PreProc">$ac_option</span> <span class="Statement">"</span><span class="PreProc">$ac_prev</span><span class="Statement">"</span> <span class="Constant">4</span> <span class="Constant">24000000</span> <span class="Statement">;;</span>
audiobr<span class="Statement">)</span>
checkNumericValue <span class="PreProc">$ac_option</span> <span class="Statement">"</span><span class="PreProc">$ac_prev</span><span class="Statement">"</span> <span class="Constant">32</span> <span class="Constant">320</span> <span class="Statement">;;</span>
title <span class="Statement">|</span> angle <span class="Statement">|</span> first<span class="Statement">)</span>
checkNumericValue <span class="PreProc">$ac_option</span> <span class="Statement">"</span><span class="PreProc">$ac_prev</span><span class="Statement">"</span> <span class="Constant">1</span> <span class="Statement">;;</span>
nbcd<span class="Statement">)</span>
checkNumericValue <span class="PreProc">$ac_option</span> <span class="Statement">"</span><span class="PreProc">$ac_prev</span><span class="Statement">"</span> <span class="Constant">1</span> <span class="Constant">2</span> <span class="Statement">;;</span>
cdrsize<span class="Statement">)</span>
checkNumericValue <span class="PreProc">$ac_option</span> <span class="Statement">"</span><span class="PreProc">$ac_prev</span><span class="Statement">"</span> <span class="Constant">0</span> <span class="Constant">2048</span> <span class="Statement">;;</span>
<span class="Statement">esac</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">"</span><span class="PreProc">$ac_prev</span><span class="Statement">"</span> <span class="Statement">!=</span> <span class="Statement">"</span><span class="Constant">--</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">eval</span> <span class="Statement">"</span><span class="PreProc">$ac_prev</span><span class="Constant">=</span><span class="Special">\$</span><span class="Constant">ac_option</span><span class="Statement">"</span>
<span class="Identifier">ac_prev</span>=
<span class="Statement">else</span>
<span class="Identifier">mencOpt</span>=<span class="Statement">"</span><span class="PreProc">$mencOpt</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">continue</span>
<span class="Statement">fi</span>
<span class="Statement">case</span> <span class="Statement">"</span><span class="PreProc">$ac_option</span><span class="Statement">"</span> <span class="Statement">in</span>
-d <span class="Statement">|</span> -dir <span class="Statement">|</span> --dir<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=dir <span class="Statement">;;</span>
-d=* <span class="Statement">|</span> -dir=* <span class="Statement">|</span> --dir=*<span class="Statement">)</span>
<span class="Identifier">dir</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span> <span class="Statement">;;</span>
-A <span class="Statement">|</span> -auto <span class="Statement">|</span> --auto<span class="Statement">)</span>
<span class="Identifier">auto</span>=yes
<span class="Identifier">bel</span>=
<span class="Statement">;;</span>
-f <span class="Statement">|</span> -sid <span class="Statement">|</span> --sid<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=sid <span class="Statement">;;</span>
-f=* <span class="Statement">|</span> -sid=* <span class="Statement">|</span> --sid=*<span class="Statement">)</span>
<span class="Identifier">sid</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span> <span class="Statement">;;</span>
-g <span class="Statement">|</span> -subgreylevels <span class="Statement">|</span> --subgreylevels<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=subgreylevels <span class="Statement">;;</span>
-g=* <span class="Statement">|</span> -subgreylevels=* <span class="Statement">|</span> --subgreylevels=*<span class="Statement">)</span>
<span class="Identifier">subgreylevels</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span> <span class="Statement">;;</span>
-l <span class="Statement">|</span> -crop <span class="Statement">|</span> --crop<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=crop <span class="Statement">;;</span>
-l=* <span class="Statement">|</span> -crop=* <span class="Statement">|</span> --crop=*<span class="Statement">)</span>
<span class="Identifier">crop</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span> <span class="Statement">;;</span>
-T <span class="Statement">|</span> -chapter <span class="Statement">|</span> --chapter<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=first <span class="Statement">;;</span>
-T=* <span class="Statement">|</span> -chapter=* <span class="Statement">|</span> --chapter=*<span class="Statement">)</span>
<span class="Identifier">first</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
<span class="Identifier">last</span>=<span class="PreProc">$first</span>
checkNumericValue <span class="PreProc">$first</span> <span class="Statement">"</span><span class="Constant">chapter</span><span class="Statement">"</span> <span class="Constant">1</span>
<span class="Statement">;;</span>
-t <span class="Statement">|</span> -title <span class="Statement">|</span> --title<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=title <span class="Statement">;;</span>
-t=* <span class="Statement">|</span> -title=* <span class="Statement">|</span> --title=*<span class="Statement">)</span>
<span class="Identifier">title</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
checkNumericValue <span class="PreProc">$title</span> <span class="Statement">"</span><span class="Constant">titre</span><span class="Statement">"</span> <span class="Constant">1</span>
<span class="Statement">;;</span>
-a <span class="Statement">|</span> -angle <span class="Statement">|</span> --angle<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=angle <span class="Statement">;;</span>
-a=* <span class="Statement">|</span> -angle=* <span class="Statement">|</span> --angle=*<span class="Statement">)</span>
<span class="Identifier">angle</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
checkNumericValue <span class="PreProc">$angle</span> <span class="Statement">"</span><span class="Constant">angle</span><span class="Statement">"</span> <span class="Constant">1</span>
<span class="Statement">;;</span>
-n <span class="Statement">|</span> -normalize <span class="Statement">|</span> --normalize<span class="Statement">)</span>
<span class="Identifier">normalize</span>=true <span class="Statement">;;</span>
-N <span class="Statement">|</span> -nbcd <span class="Statement">|</span> --nbcd<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=nbcd <span class="Statement">;;</span>
-N=* <span class="Statement">|</span> -nbcd=* <span class="Statement">|</span> --nbcd=*<span class="Statement">)</span>
<span class="Identifier">angle</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
checkNumericValue <span class="PreProc">$nbcd</span> <span class="Statement">"</span><span class="Constant">nbcd</span><span class="Statement">"</span> <span class="Constant">1</span> <span class="Constant">2</span>
<span class="Statement">;;</span>
-D <span class="Statement">|</span> -deinterlace <span class="Statement">|</span> --deinterlace<span class="Statement">)</span>
<span class="Identifier">deinterlace</span>=<span class="Statement">"</span><span class="Constant">yadif=0,</span><span class="Statement">"</span> <span class="Statement">;;</span>
-s <span class="Statement">|</span> -subtitle <span class="Statement">|</span> --subtitle<span class="Statement">)</span>
<span class="Identifier">subtitle</span>=yes <span class="Statement">;;</span>
-S <span class="Statement">|</span> -split <span class="Statement">|</span> --split<span class="Statement">)</span>
<span class="Identifier">split</span>=yes <span class="Statement">;;</span>
-p <span class="Statement">|</span> -ipod <span class="Statement">|</span> --ipod<span class="Statement">)</span>
<span class="Identifier">ipod</span>=yes <span class="Statement">;;</span>
-r <span class="Statement">|</span> -res <span class="Statement">|</span> --res<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=res <span class="Statement">;;</span>
-r=* <span class="Statement">|</span> -res=* <span class="Statement">|</span> --res=*<span class="Statement">)</span>
<span class="Identifier">res</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
<span class="Statement">;;</span>
-B <span class="Statement">|</span> -videobr <span class="Statement">|</span> --videobr<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=rate <span class="Statement">;;</span>
-B=* <span class="Statement">|</span> -videobr=* <span class="Statement">|</span> --videobr=*<span class="Statement">)</span>
<span class="Identifier">rate</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
checkNumericValue <span class="PreProc">$rate</span> <span class="Statement">"</span><span class="Constant">videobr</span><span class="Statement">"</span> <span class="Constant">4</span> <span class="Constant">24000000</span>
<span class="Statement">;;</span>
-b <span class="Statement">|</span> -audiobr <span class="Statement">|</span> --audiobr<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=audiobr <span class="Statement">;;</span>
-b=* <span class="Statement">|</span> -audiobr=* <span class="Statement">|</span> --audiobr=*<span class="Statement">)</span>
<span class="Identifier">audiobr</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
checkNumericValue <span class="PreProc">$audiobr</span> <span class="Statement">"</span><span class="Constant">audiobr</span><span class="Statement">"</span> <span class="Constant">32</span> <span class="Constant">320</span>
<span class="Statement">;;</span>
-V <span class="Statement">|</span> -vol <span class="Statement">|</span> --vol<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=volume <span class="Statement">;;</span>
-V=* <span class="Statement">|</span> -vol=* <span class="Statement">|</span> --vol=*<span class="Statement">)</span>
<span class="Identifier">volume</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span> <span class="Statement">;;</span>
-w <span class="Statement">|</span> -wav <span class="Statement">|</span> --wav<span class="Statement">)</span>
<span class="Identifier">wav</span>=yes <span class="Statement">;;</span>
-i <span class="Statement">|</span> -dev <span class="Statement">|</span> --dev<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=dev <span class="Statement">;;</span>
-i=* <span class="Statement">|</span> -dev=* <span class="Statement">|</span> --dev=*<span class="Statement">)</span>
<span class="Identifier">dev</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span> <span class="Statement">;;</span>
-c <span class="Statement">|</span> -nocolors <span class="Statement">|</span> --nocolors<span class="Statement">)</span>
<span class="Identifier">red</span>=
<span class="Identifier">green</span>=
<span class="Identifier">blue</span>=
<span class="Identifier">reset</span>=
<span class="Statement">;;</span>
-C <span class="Statement">|</span> -cdrsize <span class="Statement">|</span> --cdrsize<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=cdrsize <span class="Statement">;;</span>
-C=* <span class="Statement">|</span> -cdrsize=* <span class="Statement">|</span> --cdrsize=*<span class="Statement">)</span>
<span class="Identifier">cdrsize</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$ac_option</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
checkNumericValue <span class="PreProc">$cdrsize</span> <span class="Statement">"</span><span class="Constant">cdrsize</span><span class="Statement">"</span> <span class="Constant">0</span> <span class="Constant">2048</span>
<span class="Statement">;;</span>
-v <span class="Statement">|</span> -verbose <span class="Statement">|</span> --verbose<span class="Statement">)</span>
<span class="Identifier">verbose</span>=yes <span class="Statement">;;</span>
-h <span class="Statement">|</span> -help <span class="Statement">|</span> --help<span class="Statement">)</span>
<span class="Identifier">this</span>=<span class="PreProc">${</span><span class="PreProc">0</span><span class="Statement">##</span>*/<span class="PreProc">}</span>
cat <span class="Statement"><< EOF</span>
<span class="PreProc">$this</span><span class="Constant"> is a shell script to rip DVD and encode to DIVX</span>
<span class="Constant">It can :</span>
<span class="Constant"> - rip, encode audio, encode video, separately into different sessions</span>
<span class="Constant"> - crop the black bars with autodetection</span>
<span class="Constant"> - choose the best resolution for the 16:9 or 4:3 format</span>
<span class="Constant"> - maximize volume (with a mencoder patch)</span>
<span class="Constant"> - extract subtitle into a separated text file (with transcode tools)</span>
<span class="Constant"> - split the AVI</span>
<span class="Constant">The video bitrate is a bit different from the mencoder recommendation, it's</span>
<span class="Constant">for a maximum filling for one CD, or to leave a margin to split the AVI.</span>
<span class="Constant">Usage: </span><span class="PreProc">$this</span><span class="Constant"> [options]</span>
<span class="Constant">Options:</span>
<span class="Constant"> -A, --auto use automatic values</span>
<span class="Constant"> -a, --angle=N set angle</span>
<span class="Constant"> -B, --videobr=<4-24000000> set video bitrate</span>
<span class="Constant"> -b, --audiobr=<32-320> change audio bitrate for lame [</span><span class="PreProc">$audiobr</span><span class="Constant">]</span>
<span class="Constant"> -C, --cdrsize=SIZE change the size of a CD [</span><span class="PreProc">$cdrsize</span><span class="Constant">]</span>
<span class="Constant"> -c, --nocolors do not use colors</span>
<span class="Constant"> -D, --deinterlace use deinterlace filter</span>
<span class="Constant"> -d, --dir=DIR change directory [./]</span>
<span class="Constant"> -f, --sid=FILE|0-31 set subtitle file or sid</span>
<span class="Constant"> -g, --subgreylevels=LEVEL set subgrey levels [</span><span class="PreProc">$subgreylevels</span><span class="Constant">]</span>
<span class="Constant"> -h, --help print this help message</span>
<span class="Constant"> -i, --dev=DEV change dvd device [/dev/dvd]</span>
<span class="Constant"> -l, --crop=CROP set crop (ex: 720:576:0:0 = no crop)</span>
<span class="Constant"> -N, --nbcd=<1-2> set number of CD</span>
<span class="Constant"> -n, --normalize use normalize to maximize volume</span>
<span class="Constant"> -p, --ipod make an ipod video</span>
<span class="Constant"> -r, --res=XXX:YYY set resolution</span>
<span class="Constant"> -S, --split split AVI</span>
<span class="Constant"> -s, --subtitle extract text subtitle</span>
<span class="Constant"> -T, --chapter=N set chapter</span>
<span class="Constant"> -t, --title=N set title</span>
<span class="Constant"> -V, --vol=<0-10> change audio input gain for lame [</span><span class="PreProc">$volume</span><span class="Constant">]</span>
<span class="Constant"> -w, --wav extract audio to wav file(s)</span>
<span class="Constant"> -- options passed to mencoder (ex: -- -ni)</span>
<span class="Constant">For more info type : vi </span><span class="PreProc">$this</span>
<span class="Statement">EOF</span>
<span class="Statement">exit</span> <span class="Constant">0</span> <span class="Statement">;;</span>
--<span class="Statement">)</span>
<span class="Identifier">ac_prev</span>=-- <span class="Statement">;;</span>
*<span class="Statement">)</span>
fatal <span class="Statement">"</span><span class="Constant">unknown parameter: </span><span class="PreProc">$ac_option</span><span class="Statement">"</span> <span class="Statement">;;</span>
<span class="Statement">esac</span>
<span class="Statement">done</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$ac_prev</span><span class="Statement">"</span> <span class="Statement">]</span> <span class="Statement">&&</span> <span class="Statement">[</span> <span class="Statement">"</span><span class="PreProc">$ac_prev</span><span class="Statement">"</span> <span class="Statement">!=</span> <span class="Statement">"</span><span class="Constant">--</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
fatal <span class="Statement">"</span><span class="Constant">bad value for: </span><span class="PreProc">$ac_prev</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$sid</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-f</span> <span class="PreProc">$sid</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">sid</span>=<span class="Statement">"</span><span class="Constant">-sub </span><span class="PreProc">$sid</span><span class="Constant"> -subfont-text-scale 3</span><span class="Statement">"</span>
<span class="Statement">else</span>
<span class="Identifier">sid</span>=<span class="Statement">"</span><span class="Constant">-sid </span><span class="PreProc">$sid</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$dir</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">!</span> <span class="Statement">-d</span> <span class="PreProc">$dir</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="PreProc">$dir</span><span class="Constant"> does not exist, create it ? (y/n)</span><span class="Statement">"</span> y
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">mkdir</span> <span class="Statement">-p</span> <span class="PreProc">$dir</span>
<span class="Statement">cd</span> <span class="PreProc">$dir</span>
<span class="Statement">fi</span>
<span class="Statement">else</span>
<span class="Statement">cd</span> <span class="PreProc">$dir</span>
<span class="Statement">fi</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$title</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">title</span>=dvd://<span class="PreProc">$title</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$angle</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">angle</span>=<span class="Statement">"</span><span class="Constant">-dvdangle </span><span class="PreProc">$angle</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">"</span><span class="PreProc">$first</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">last</span>=<span class="PreProc">$first</span>
<span class="Statement">fi</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># splitAVI</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">splitAVI()</span>
<span class="Identifier">{</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-f</span> frameno.avi <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">mv</span> frameno.avi frameno.avi.sav
<span class="Statement">fi</span>
<span class="Identifier">name</span>=`<span class="Statement">ls</span> <span class="Constant">-1</span> <span class="Special">--indicator-style</span><span class="Statement">=</span>none *.avi <span class="Constant">2</span><span class="Statement">></span>/dev/null <span class="Statement">|</span> <span class="Statement">tail</span> <span class="Special">-n</span> <span class="Constant">1</span>`
myRead <span class="Statement">"</span><span class="Constant">avi to split ?</span><span class="Statement">"</span> <span class="PreProc">$name</span>
<span class="Identifier">name</span>=<span class="PreProc">$ret</span>
<span class="Identifier">n0</span>=`mplayer <span class="Statement">"</span><span class="PreProc">$name</span><span class="Statement">"</span> <span class="Special">-v</span> <span class="Special">-frames</span> <span class="Constant">0</span> <span class="Constant">2</span><span class="Statement">></span>/dev/null <span class="Statement">|</span> <span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">frames total</span><span class="Statement">"</span> <span class="Statement">|</span>\
awk <span class="Statement">'</span><span class="Constant">{ print $3 }</span><span class="Statement">'</span>`
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">"</span><span class="PreProc">$n0</span><span class="Statement">"</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">frames total ?</span><span class="Statement">"</span>
<span class="Identifier">n0</span>=<span class="PreProc">$ret</span>
<span class="Statement">fi</span>
<span class="Identifier">ret</span>=n
<span class="Statement">while </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">n</span> <span class="Statement">]</span><span class="Statement">;</span><span class="Statement"> </span><span class="Statement">do</span>
myRead <span class="Statement">"</span><span class="Constant">offset (secondes) ?</span><span class="Statement">"</span> <span class="Constant">-60</span>
<span class="Identifier">offset</span>=<span class="PreProc">$ret</span>
<span class="Statement">(</span><span class="PreProc">(</span>time <span class="Statement">=</span> n0 / <span class="Constant">50</span> + offset<span class="PreProc">)</span><span class="Statement">)</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$n0</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">press return to start playing,</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="Constant">then press escape where to split</span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Statement">read</span> ret
mplayer <span class="Statement">"</span><span class="PreProc">$name</span><span class="Statement">"</span> <span class="Special">-vf</span> <span class="Identifier">framestep</span>=I <span class="Special">-ss</span> <span class="PreProc">$time</span> <span class="Special">-nofs</span> <span class="Special">-xy</span> <span class="Constant">1</span> <span class="Constant">2</span><span class="Statement">></span>/dev/null <span class="Statement">|</span>\
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">ct:</span><span class="Statement">"</span> <span class="Statement">|</span> tee keyframes.txt
<span class="Identifier">frame</span>=<span class="Special">`</span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> keyframes.txt </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">"</span><span class="Constant">/</span><span class="Statement">"</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">"</span><span class="Constant"> </span><span class="Statement">"</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">1</span><span class="Special">`</span>
myRead <span class="Statement">"</span><span class="Constant">frame=</span><span class="PreProc">$frame</span><span class="Constant"> (y/n)</span><span class="Statement">"</span> y
<span class="Statement">done</span>
<span class="Identifier">name</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="PreProc">$name</span><span class="Statement">"</span><span class="Constant"> </span><span class="Statement">|</span> <span class="Statement">sed</span> <span class="Statement">'</span><span class="Constant">s/\.avi//</span><span class="Statement">'</span>`
<span class="Identifier">info</span>=`mplayer <span class="Special">-novideo</span> <span class="Special">-nosound</span> <span class="Special">-v</span> <span class="PreProc">$name</span>.avi <span class="Constant">2</span><span class="Statement">></span>/dev/null <span class="Statement">|</span>\
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">Comments :</span><span class="Statement">"</span> <span class="Statement">|</span> <span class="Statement">sed</span> <span class="Statement">"</span><span class="Constant">s/Comments ://</span><span class="Statement">"</span>`
<span class="Identifier">info</span>=<span class="Statement">"</span><span class="Constant">%</span><span class="Statement">"</span>`<span class="Statement">expr</span> length <span class="Statement">"</span><span class="PreProc">$info</span><span class="Statement">"</span>`<span class="Statement">"</span><span class="Constant">%</span><span class="PreProc">$info</span><span class="Statement">"</span>
mencoder <span class="Statement">"</span><span class="PreProc">$name</span><span class="Constant">.avi</span><span class="Statement">"</span> <span class="Special">-ovc</span> copy <span class="Special">-oac</span> copy <span class="Special">-frames</span> <span class="PreProc">$((</span><span class="Special">frame - </span><span class="Constant">1</span><span class="PreProc">))</span>\
<span class="Special">-o</span> <span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">name</span><span class="PreProc">}</span><span class="Constant">_1.avi</span><span class="Statement">"</span> <span class="Special">-info</span> <span class="Identifier">comment</span>=<span class="Statement">"</span><span class="Constant">split </span><span class="PreProc">$info</span><span class="Statement">"</span> <span class="PreProc">$mencOpt</span>
<span class="Identifier">time</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$frame</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Statement">'</span><span class="Constant">{ print $0/25 }</span><span class="Statement">'</span>`
mencoder <span class="Statement">"</span><span class="PreProc">$name</span><span class="Constant">.avi</span><span class="Statement">"</span> <span class="Special">-ovc</span> copy <span class="Special">-oac</span> copy <span class="Special">-ss</span> <span class="PreProc">$time</span>\
<span class="Special">-o</span> <span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">name</span><span class="PreProc">}</span><span class="Constant">_2.avi</span><span class="Statement">"</span> <span class="Special">-info</span> <span class="Identifier">comment</span>=<span class="Statement">"</span><span class="Constant">split </span><span class="PreProc">$info</span><span class="Statement">"</span> <span class="PreProc">$mencOpt</span>
<span class="Identifier">n1</span>=`mplayer <span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">name</span><span class="PreProc">}</span><span class="Constant">_1.avi</span><span class="Statement">"</span> <span class="Special">-v</span> <span class="Special">-frames</span> <span class="Constant">0</span> <span class="Constant">2</span><span class="Statement">></span>/dev/null <span class="Statement">|</span>\
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">frames total</span><span class="Statement">"</span> <span class="Statement">|</span> awk <span class="Statement">'</span><span class="Constant">{ print $3 }</span><span class="Statement">'</span>`
<span class="Identifier">n2</span>=`mplayer <span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">name</span><span class="PreProc">}</span><span class="Constant">_2.avi</span><span class="Statement">"</span> <span class="Special">-v</span> <span class="Special">-frames</span> <span class="Constant">0</span> <span class="Constant">2</span><span class="Statement">></span>/dev/null <span class="Statement">|</span>\
<span class="Statement">grep</span> <span class="Statement">"</span><span class="Constant">frames total</span><span class="Statement">"</span> <span class="Statement">|</span> awk <span class="Statement">'</span><span class="Constant">{ print $3 }</span><span class="Statement">'</span>`
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">name</span><span class="PreProc">}</span><span class="Constant">_1.avi: </span><span class="PreProc">$n1</span><span class="Constant"> frames</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">name</span><span class="PreProc">}</span><span class="Constant">_2.avi: </span><span class="PreProc">$n2</span><span class="Constant"> frames</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="PreProc">$((</span><span class="Special">n1 + n2</span><span class="PreProc">))</span><span class="Constant">/</span><span class="PreProc">$n0</span><span class="Constant"> frames</span><span class="Statement">"</span>
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># makeIpod</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">makeIpod()</span>
<span class="Identifier">{</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$direct</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
fatal <span class="Statement">"</span><span class="Constant">sorry, you must rip the DVD</span><span class="Statement">"</span>
<span class="Statement">fi</span>
selectInput
selectAudio
<span class="Statement">for ((</span><span class="Statement">i </span><span class="Statement">=</span><span class="Statement"> </span><span class="Constant">first</span><span class="Statement">; i </span><span class="Statement"><=</span><span class="Statement"> last; ++i</span><span class="Statement">))</span><span class="Statement">;</span> <span class="Statement">do</span>
<span class="Identifier">num</span>=<span class="Special">`</span><span class="Statement">printf</span><span class="Special"> %02d </span><span class="PreProc">$i</span><span class="Special">`</span>
<span class="Identifier">file</span>=dump.<span class="PreProc">$num</span>
mencoder <span class="PreProc">$file</span> <span class="Special">-aid</span> <span class="PreProc">$aid</span> <span class="Special">-oac</span> pcm <span class="Special">-ovc</span> copy <span class="Statement">-o</span> dump.tmp <span class="PreProc">$mencOpt</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-r</span> titles.txt <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Identifier">title</span>=<span class="Special">`head </span><span class="Special">-n</span><span class="Special"> </span><span class="PreProc">$i</span><span class="Special"> titles.txt </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special">`</span>
<span class="Identifier">title</span>=<span class="Statement">"</span><span class="Constant"> - </span><span class="PreProc">$title</span><span class="Statement">"</span>
<span class="Statement">fi</span>
ffmpeg <span class="Statement">-f</span> dvd <span class="Statement">-i</span> dump.tmp <span class="Statement">-f</span> mp4 <span class="Special">-vcodec</span> mpeg4 <span class="Special">-maxrate</span> <span class="Constant">1000</span>\
<span class="Statement">-b</span> <span class="Constant">700</span> <span class="Special">-qmin</span> <span class="Constant">3</span> <span class="Special">-qmax</span> <span class="Constant">5</span> <span class="Special">-bufsize</span> <span class="Constant">4096</span> <span class="Statement">-g</span> <span class="Constant">300</span> <span class="Special">-acodec</span> libfaac\
<span class="Special">-ab</span> <span class="Constant">192</span> <span class="Statement">-s</span> 320x180 <span class="Special">-aspect</span> 16:9 <span class="Statement">"</span><span class="PreProc">$num$title</span><span class="Constant">.mov</span><span class="Statement">"</span>
<span class="Statement">done</span>
<span class="Statement">rm</span> <span class="Special">-f</span> dump.tmp
<span class="Identifier">}</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># main</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
readOptions <span class="PreProc">$*</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$split</span> <span class="Statement">=</span> <span class="Constant">yes</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
splitAVI
<span class="Statement">exit</span> <span class="Constant">0</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-r</span> structure.txt <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">warning : structure.txt exist, it will be used</span><span class="PreProc">$reset</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Identifier">dir</span>=<span class="Special">`</span><span class="Statement">pwd</span><span class="Special">`</span>
<span class="Identifier">size</span>=<span class="Special">`df </span><span class="Special">-Ph</span><span class="Special"> </span><span class="Statement">"</span><span class="PreProc">$dir</span><span class="Statement">"</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> awk </span><span class="Statement">'</span><span class="Constant">BEGIN { FS = " " } { print $4 }</span><span class="Statement">'</span><span class="Special">`</span>
<span class="Statement">echo</span><span class="Constant"> -e </span><span class="Statement">"</span><span class="PreProc">${</span><span class="PreProc">blue</span><span class="PreProc">}</span><span class="Constant">disk space left in </span><span class="PreProc">$dir</span><span class="Constant"> : </span><span class="PreProc">$size$reset</span><span class="Statement">"</span>
myRead <span class="Statement">"</span><span class="Constant">continue ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">y</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">n</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
<span class="Statement">exit</span> <span class="Constant">0</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-f</span> dump.<span class="Constant">01</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
myRead <span class="Statement">"</span><span class="Constant">rip the DVD ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">n</span><span class="Statement">"</span>
<span class="Statement">else</span>
myRead <span class="Statement">"</span><span class="Constant">rip the DVD ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">y</span><span class="Statement">"</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
makeDump
<span class="Identifier">direct</span>=n
<span class="Statement">else</span>
myRead <span class="Statement">"</span><span class="Constant">encode directly from the DVD ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">n</span><span class="Statement">"</span>
<span class="Identifier">direct</span>=<span class="PreProc">$ret</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$subtitle</span> <span class="Statement">=</span> <span class="Constant">yes</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
extractSubtitle
<span class="Statement">exit</span> <span class="Constant">0</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$wav</span> <span class="Statement">=</span> <span class="Constant">yes</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
extractWav
<span class="Statement">exit</span> <span class="Constant">0</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ipod</span> <span class="Statement">=</span> <span class="Constant">yes</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
makeIpod
<span class="Statement">exit</span> <span class="Constant">0</span>
<span class="Statement">fi</span>
myRead <span class="Statement">"</span><span class="Constant">encode video ? (y/n)</span><span class="Statement">"</span> <span class="Statement">"</span><span class="Constant">y</span><span class="Statement">"</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ret</span> <span class="Statement">=</span> <span class="Constant">y</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
makeVideo
<span class="Statement">fi</span>
<span class="Statement">echo</span><span class="Constant"> -ne </span><span class="Statement">"</span><span class="Special">\a</span><span class="Statement">"</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->