Rev 20 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 20 | Rev 21 | ||
---|---|---|---|
1 | #!/bin/sh
|
1 | #!/bin/sh
|
2 | appname="${0##*/}" |
2 | appname="${0##*/}" |
3 | ver="0.6.1.2006031907" |
3 | ver="0.6.1.2007011316" |
4 | copy="2005, 2006" |
4 | copy="2005-2007" |
5 | mail_feedback="dvd@PointedEars.de" |
5 | mail_feedback="dvd@PointedEars.de" |
6 | # ----------------------------------------------------------------------------
|
6 | # ----------------------------------------------------------------------------
|
7 | # DVD Subtitles 0.6.1 -- Extracts subtitles from Video DVD data to a text file
|
7 | # DVD Subtitles 0.6.1 -- Extracts subtitles from DVD-Video data to a text file
|
8 | # Copyright (C) 2005, 2006 Thomas Lahn <PointedEars@gmx.de>
|
8 | # Copyright (C) 2005, 2006 Thomas Lahn <PointedEars@gmx.de>
|
9 | #
|
9 | #
|
10 | # This program is free software; you can redistribute it and/or modify it
|
10 | # This program is free software; you can redistribute it and/or modify it
|
11 | # under the terms of the GNU General Public License (GPL) as published
|
11 | # under the terms of the GNU General Public License (GPL) as published
|
12 | # by the Free Software Foundation; either version 2 of the License, or
|
12 | # by the Free Software Foundation; either version 2 of the License, or
|
13 | # (at your option) any later version.
|
13 | # (at your option) any later version.
|
14 | #
|
14 | #
|
15 | # This program is distributed in the hope that it will be useful,
|
15 | # This program is distributed in the hope that it will be useful,
|
16 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
17 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
18 | # GNU General Public License for more details.
|
18 | # GNU General Public License for more details.
|
19 | #
|
19 | #
|
20 | # You should have received a copy of the GNU GPL along with this
|
20 | # You should have received a copy of the GNU GPL along with this
|
21 | # program; if not, write to the Free Software Foundation, Inc.,
|
21 | # program; if not, write to the Free Software Foundation, Inc.,
|
22 | # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
22 | # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
23 | #
|
23 | #
|
24 | ## Standard shell script disclaimer blurb thing:
|
24 | ## Standard shell script disclaimer blurb thing:
|
25 | ##
|
25 | ##
|
26 | ## This script is a hack. It's brute force. It's horrible.
|
26 | ## This script is a hack. It's brute force. It's horrible.
|
27 | ## It doesn't use Artificial Intelligence. It doesn't use Virtual Reality.
|
27 | ## It doesn't use Artificial Intelligence. It doesn't use Virtual Reality.
|
28 | ## It's not perl. It's not python. It probably won't work unchanged on
|
28 | ## It's not perl. It's not python. It probably won't work unchanged on
|
29 | ## the "other" thousands of unices. But it worksforme. --ramiro
|
29 | ## the "other" thousands of unices. But it worksforme. --ramiro
|
30 | # (from /usr/local/mozilla/run-mozilla.sh)
|
30 | # (from /usr/local/mozilla/run-mozilla.sh)
|
31 | #
|
31 | #
|
32 | # This is work in progress. If you have an improvement, patch,
|
32 | # This is work in progress. If you have an improvement, patch,
|
33 | # idea, whatever, on how to make this script better, please
|
33 | # idea, whatever, on how to make this script better, please
|
34 | # send it to <dvd@PointedEars.de>
|
34 | # send it to <dvd@PointedEars.de>
|
35 | 35 | ||
36 | _title () |
36 | _title () |
37 | {
|
37 | {
|
38 | echo "\ |
38 | echo "\ |
39 | ${extd}DVD Subtitles $ver
|
39 | ${extd}DVD Subtitles $ver
|
40 | Copyright (C) $copy Thomas Lahn <$mail_feedback>$norm
|
40 | Copyright (C) $copy Thomas Lahn <$mail_feedback>$norm
|
41 | Distributed under the terms of the GNU General Public License (GPL), see
|
41 | Distributed under the terms of the GNU General Public License (GPL), see
|
42 | COPYING file or http://www.gnu.org/licenses/licenses.html#GPL for details.
|
42 | COPYING file or http://www.gnu.org/licenses/licenses.html#GPL for details.
|
43 | "
|
43 | "
|
44 | }
|
44 | }
|
45 | 45 | ||
46 | _help () |
46 | _help () |
47 | {
|
47 | {
|
48 | echo "\ |
48 | echo "\ |
49 | Extracts a subtitle stream from Video DVD data and converts it to a text file.
|
49 | Extracts a subtitle stream from DVD-Video data and converts it to a text file.
|
50 | 50 | ||
51 | $extd$appname$norm [options] ${ital}SOURCE$norm
|
51 | $extd$appname$norm [options] ${ital}SOURCE$norm
|
- | 52 | ||
- | 53 | Deprecated:
|
|
52 | $extd$appname$norm [$extd-hVkl$norm] [${ital}SOURCE$norm [${ital}TITLE$norm\
|
54 | $extd$appname$norm [$extd-hVkl$norm] [${ital}SOURCE$norm [${ital}TITLE$norm\
|
53 | [${ital}SUBTITLE$norm [${ital}TARGET$norm [${ital}GREY_LEVELS$norm]]]]]
|
55 | [${ital}SUBTITLE$norm [${ital}TARGET$norm [${ital}GREY_LEVELS$norm]]]]]
|
54 |
|
56 |
|
55 | Any option argument is overwritten by the respective additional program
|
57 | Any option argument is overwritten by the respective additional program
|
56 | argument. Options may be given in any order, and are also considered
|
58 | argument. Options may be given in any order, and are also considered
|
57 | options if located after the first program argument. Too many program
|
59 | options if located after the first program argument. Too many program
|
58 | arguments are silently ignored.
|
60 | arguments are silently ignored.
|
59 | 61 | ||
60 | $extd-c$norm, $extd--compile$norm ${ital}FILE$norm | ${ital}DIRECTORY$norm
|
62 | $extd-c$norm, $extd--compile$norm ${ital}FILE$norm | ${ital}DIRECTORY$norm
|
61 | Compile subtitle text files according to subtitle index\
|
63 | Compile subtitle text files according to subtitle index\
|
62 | ${ital}FILE$norm
|
64 | ${ital}FILE$norm
|
63 | or to subtitle index files in ${ital}DIRECTORY$norm to\
|
65 | or to subtitle index files in ${ital}DIRECTORY$norm to\
|
- | 66 | ${ital}TARGET$norm. Clean up
|
|
64 | ${ital}TARGET$norm. Clean up if this is successful, then exit.
|
67 | if this is successful, then exit.
|
65 | 68 | ||
66 | $extd-k$norm, $extd--keep$norm Keep subtitle stream file even if\
|
69 | $extd-k$norm, $extd--keep$norm Keep subtitle stream file even if\
|
67 | conversion is successful.
|
70 | conversion is successful.
|
68 | 71 | ||
69 | $extd-l$norm, $extd--list$norm List subtitles for TITLE using\
|
72 | $extd-l$norm, $extd--list$norm List subtitles for TITLE using\
|
70 | ${extd}mplayer$norm(1) and exit.
|
73 | ${extd}mplayer$norm(1) and exit.
|
71 | If TITLE is not provided or \`$extd-$norm', list subtitles for
|
74 | If TITLE is not provided or \`$extd-$norm', list subtitles for
|
72 | title #2 (as title #1 may be an intro without subtitles)
|
75 | title #2 (as title #1 may be an intro without subtitles)
|
73 | and exit.
|
76 | and exit.
|
74 |
|
77 |
|
75 | SOURCE Video DVD data source, i.e. a device (usually /dev/dvd),
|
78 | SOURCE Video DVD data source, i.e. a device (usually /dev/dvd),
|
76 | a directory (e.g. one containing content created via
|
79 | a directory (e.g. one containing content created via
|
77 | ${extd}dvdbackup$norm(1)) or a Video DVD image file.
|
80 | ${extd}dvdbackup$norm(1)) or a Video DVD image file.
|
78 | If \`$extd-$norm', a previously created subtitle stream file\
|
81 | If \`$extd-$norm', a previously created subtitle stream file\
|
79 | named
|
82 | named
|
80 | ${extd}subtitle_stream-$norm*$extd-${norm}TITLE${extd}-${norm}SUBTITLE\
|
83 | ${extd}subtitle_stream-$norm*$extd-${norm}TITLE${extd}-${norm}SUBTITLE\
|
81 | in the current working
|
84 | in the current working
|
82 | directory will be used for only the stream-to-graphics-
|
85 | directory will be used for only the stream-to-graphics-
|
83 | to-text conversion instead. Both TITLE and SUBTITLE
|
86 | to-text conversion instead. Both TITLE and SUBTITLE
|
84 | must not be \`$extd-$norm' in that case.
|
87 | must not be \`$extd-$norm' in that case.
|
85 | The default is \`$extd/dev/dvd$norm'.
|
88 | The default is \`$extd/dev/dvd$norm'.
|
86 | 89 | ||
87 | $extd-t$norm, $extd--title$norm
|
90 | $extd-t$norm, $extd--title$norm
|
88 | TITLE Number of the title (1-n) which will be accessed for
|
91 | TITLE Number of the title (1-n) which will be accessed for
|
89 | subtitle stream extraction. If left out or \`$extd-$norm', the
|
92 | subtitle stream extraction. If left out or \`$extd-$norm', the
|
90 | program uses ${extd}mplayer$norm(1) to detect how many titles are
|
93 | program uses ${extd}mplayer$norm(1) to detect how many titles are
|
91 | available on the DVD data source and asks for the
|
94 | available on the DVD data source and asks for the
|
92 | title to be accessed.
|
95 | title to be accessed.
|
93 |
|
96 |
|
94 | $extd-s$norm, $extd--subtitle-id$norm
|
97 | $extd-s$norm, $extd--subtitle-id$norm
|
95 | SUBTITLE ID of the subtitle stream to be extracted (0-n).
|
98 | SUBTITLE ID of the subtitle stream to be extracted (0-n).
|
96 | If left out or \`$extd-$norm', the program uses its\
|
99 | If left out or \`$extd-$norm', the program uses its\
|
97 | ${extd}-l$norm option to detect
|
100 | ${extd}-l$norm option to detect
|
98 | which subtitles are available for the given TITLE and asks
|
101 | which subtitles are available for the given TITLE and asks
|
99 | for the ID to be used.
|
102 | for the ID to be used.
|
100 | 103 | ||
101 | $extd-o$norm, $extd--output-target$norm
|
104 | $extd-o$norm, $extd--output-target$norm
|
102 | TARGET Name of the resulting subtitles text file.
|
105 | TARGET Name of the resulting subtitles text file.
|
103 | If not provided, the file is named after the subtitle stream
|
106 | If not provided, the file is named after the subtitle stream
|
104 | file. NOTE: Unlike previous versions, this version appends
|
107 | file. NOTE: Unlike previous versions, this version appends
|
105 | the filename suffix $extd.srt$norm automagically ONLY in that\
|
108 | the filename suffix $extd.srt$norm automagically ONLY in that\
|
106 | case.
|
109 | case.
|
107 |
|
110 |
|
108 | $extd-g$norm, $extd--grey-levels$norm
|
111 | $extd-g$norm, $extd--grey-levels$norm
|
109 | GREY_LEVELS Optional grey-levels value\
|
112 | GREY_LEVELS Optional grey-levels value\
|
110 | (\`c0$extd,${norm}c1$extd,${norm}c2$extd,${norm}c3' with 0 <= cN <= 255,
|
113 | (\`c0$extd,${norm}c1$extd,${norm}c2$extd,${norm}c3' with 0 <= cN <= 255,
|
111 | where 0 is black and 255 is white) to be used for converting
|
114 | where 0 is black and 255 is white) to be used for converting
|
112 | the subtitle stream graphics to text via OCR. The default is
|
115 | the subtitle stream graphics to text via OCR. The default is
|
113 | \`${extd}255,255,0,255$norm'. Unfortunately, the\
|
116 | \`${extd}255,255,0,255$norm'. Unfortunately, the\
|
114 | ${extd}subtitle2pgm$norm program,
|
117 | ${extd}subtitle2pgm$norm program,
|
115 | which requires this value, appears to be poorly documented;
|
118 | which requires this value, appears to be poorly documented;
|
116 | if you find a more detailed, working documentation, please
|
119 | if you find a more detailed, working documentation, please
|
117 | refer to it and inform this program's author about it.
|
120 | refer to it and inform this program's author about it.
|
118 | 121 | ||
119 | $extd-h$norm, $extd--help$norm Display this help and exit.
|
122 | $extd-h$norm, $extd--help$norm Display this help and exit.
|
120 | $extd-v$norm, $extd--verbose$norm Be verbose. The number of ${extd}-v$norm\
|
123 | $extd-v$norm, $extd--verbose$norm Be verbose. The number of ${extd}-v$norm\
|
121 | options specify the level of
|
124 | options specify the level of
|
122 | verbosity.
|
125 | verbosity.
|
123 | $extd-V$norm, $extd--version$norm Display version information and exit.
|
126 | $extd-V$norm, $extd--version$norm Display version information and exit.
|
124 |
|
127 |
|
125 | ${extd}EXIT STATUS$norm
|
128 | ${extd}EXIT STATUS$norm
|
126 | ${extd} 0$norm Successful program execution
|
129 | ${extd} 0$norm Successful program execution
|
127 | ${extd} 1$norm Error detecting/extracting subtitle stream, or cancelled
|
130 | ${extd} 1$norm Error detecting/extracting subtitle stream, or cancelled
|
128 | without selecting a title number or subtitle ID
|
131 | without selecting a title number or subtitle ID
|
129 | ${extd} 2$norm Unable to convert subtitle stream to image files
|
132 | ${extd} 2$norm Unable to convert subtitle stream to image files
|
130 | ${extd} 3$norm Cancelled due to ${extd}gocr$norm(1) error or without\
|
133 | ${extd} 3$norm Cancelled due to ${extd}gocr$norm(1) error or without\
|
131 | entering another
|
134 | entering another
|
132 | grey-levels value
|
135 | grey-levels value
|
133 | ${extd} 4$norm Unable to compile to text file
|
136 | ${extd} 4$norm Unable to compile to text file
|
134 | ${extd} 5$norm Unable to clean up
|
137 | ${extd} 5$norm Unable to clean up
|
135 | ${extd}127$norm Insufficient number of arguments / help was displayed
|
138 | ${extd}127$norm Insufficient number of arguments / help was displayed
|
136 |
|
139 |
|
137 | See the $extd$appname$norm(1) manpage for complete documentation."
|
140 | See the $extd$appname$norm(1) manpage for complete documentation."
|
138 | }
|
141 | }
|
139 | 142 | ||
140 | if test -z "$LINES" -o -z "$COLUMNS" ; then |
143 | if test -z "$LINES" -o -z "$COLUMNS" ; then |
141 | eval `stty size 2>/dev/null | (read L C; \ |
144 | eval `stty size 2>/dev/null | (read L C; \ |
142 | echo LINES=${L:-24} COLUMNS=${C:-80})` |
145 | echo LINES=${L:-24} COLUMNS=${C:-80})` |
143 | fi
|
146 | fi
|
144 | test $LINES -eq 0 && LINES=24 |
147 | test $LINES -eq 0 && LINES=24 |
145 | test $COLUMNS -eq 0 && COLUMNS=80 |
148 | test $COLUMNS -eq 0 && COLUMNS=80 |
146 | 149 | ||
147 | if test "$TERM" != "raw" && stty size >/dev/null 2>&1 ; then |
150 | if test "$TERM" != "raw" && stty size >/dev/null 2>&1 ; then |
148 | # esc=`echo -en "\033"`
|
151 | # esc=`echo -en "\033"`
|
149 | # extd="${esc}[1m"
|
152 | # extd="${esc}[1m"
|
150 | extd=`tput bold 2>/dev/null` |
153 | extd=`tput bold 2>/dev/null` |
151 | ital=`tput sitm 2>/dev/null` |
154 | ital=`tput sitm 2>/dev/null` |
152 | # norm=`echo -en "${esc}[m\017"`
|
155 | # norm=`echo -en "${esc}[m\017"`
|
153 | norm=`tput sgr0 2>/dev/null` |
156 | norm=`tput sgr0 2>/dev/null` |
154 | else
|
157 | else
|
155 | esc="" |
158 | esc="" |
156 | extd="" |
159 | extd="" |
157 | norm="" |
160 | norm="" |
158 | fi
|
161 | fi
|
159 | 162 | ||
160 | # Note that we use `"$@"' to let each command-line parameter expand to a
|
163 | # Note that we use `"$@"' to let each command-line parameter expand to a
|
161 | # separate word. The quotes around `$@' are essential!
|
164 | # separate word. The quotes around `$@' are essential!
|
162 | # We need `tmp' as the `eval set --' would nuke the return value of getopt.
|
165 | # We need `tmp' as the `eval set --' would nuke the return value of getopt.
|
163 | 166 | ||
164 | [ "$1" = "-vv" ] && echo "$extd |
167 | [ "$1" = "-vv" ] && echo "$extd |
165 | Debug output for POSIX conform command-line parsing
|
168 | Debug output for POSIX conform command-line parsing
|
166 | 169 | ||
167 | Original arguments: $*" >&2 |
170 | Original arguments: $*" >&2 |
168 | if `getopt -T >/dev/null 2>&1` ; [ $? = 4 ] ; then |
171 | if `getopt -T >/dev/null 2>&1` ; [ $? = 4 ] ; then |
169 | getopt_type=long
|
172 | getopt_type=long
|
170 | [ "$1" = "-vv" ] && echo "getopt(1) type: enhanced" >&2 |
173 | [ "$1" = "-vv" ] && echo "getopt(1) type: enhanced" >&2 |
171 | tmp=`getopt -o c:klg:o:S::s:t:hVv \ |
174 | tmp=`getopt -o c:klg:o:S::s:t:hVv \ |
172 | -l compile:,keep-stream,list,grey-levels:,output-target:\
|
175 | -l compile:,keep-stream,list,grey-levels:,output-target:\
|
173 | ,spell-check,subtitle-id:,title:,help,verbose,version \
|
176 | ,spell-check,subtitle-id:,title:,help,verbose,version \
|
174 | -n "$appname" -s sh \ |
177 | -n "$appname" -s sh \ |
175 | -- "$@"` |
178 | -- "$@"` |
176 | else
|
179 | else
|
177 | getopt_type=short
|
180 | getopt_type=short
|
178 | [ "$1" = "-vv" ] && echo "getopt(1) type: old" >&2 |
181 | [ "$1" = "-vv" ] && echo "getopt(1) type: old" >&2 |
179 | tmp=`getopt c:klg:o:S:s:t:hVv "$@"` |
182 | tmp=`getopt c:klg:o:S:s:t:hVv "$@"` |
180 | fi
|
183 | fi
|
181 | 184 | ||
182 | # exit status
|
185 | # exit status
|
183 | ESUCCESS=0 |
186 | ESUCCESS=0 |
184 | ECANTEXTRACT=1 |
187 | ECANTEXTRACT=1 |
185 | ECANTCONVERT=2 |
188 | ECANTCONVERT=2 |
186 | EOCRERROR=3 |
189 | EOCRERROR=3 |
187 | ECANTCOMPILE=4 |
190 | ECANTCOMPILE=4 |
188 | ECANTCLEANUP=5 |
191 | ECANTCLEANUP=5 |
189 | EARGERROR=127 |
192 | EARGERROR=127 |
190 | 193 | ||
191 | getopt_exit_code=$? |
194 | getopt_exit_code=$? |
192 | help=0 |
195 | help=0 |
193 | verbose=0 |
196 | verbose=0 |
194 | version=0 |
197 | version=0 |
195 | list=0 |
198 | list=0 |
196 | source='/dev/dvd' |
199 | source='/dev/dvd' |
197 | title='-' |
200 | title='-' |
198 | sid='-' |
201 | sid='-' |
199 | target='-' |
202 | target='-' |
200 | args='' |
203 | args='' |
201 | keep=0 |
204 | keep=0 |
202 | compile=0 |
205 | compile=0 |
203 | if [ $getopt_exit_code -eq 0 ]; then |
206 | if [ $getopt_exit_code -eq 0 ]; then |
204 | ## getopt returns error code 0 for successful parsing, 1 if
|
207 | ## getopt returns error code 0 for successful parsing, 1 if
|
205 | ## getopt(3) returns errors, 2 if it does not understand its
|
208 | ## getopt(3) returns errors, 2 if it does not understand its
|
206 | ## own parameters, 3 if an internal error occurs like out-of-
|
209 | ## own parameters, 3 if an internal error occurs like out-of-
|
207 | ## memory, and 4 if it is called with -T.
|
210 | ## memory, and 4 if it is called with -T.
|
208 | #
|
211 | #
|
209 | # Note the quotes around `$tmp': they are essential!
|
212 | # Note the quotes around `$tmp': they are essential!
|
210 | # echo $tmp
|
213 | # echo $tmp
|
211 | # remove "--"
|
214 | # remove "--"
|
212 | # for i in $tmp; do if [ "$i" != "--" ]; then tmp2="${tmp2} $i"; fi; done
|
215 | # for i in $tmp; do if [ "$i" != "--" ]; then tmp2="${tmp2} $i"; fi; done
|
213 | eval set -- "$tmp" |
216 | eval set -- "$tmp" |
214 | [ "$1" = "-vv" ] && echo "New arguments: $*$norm |
217 | [ "$1" = "-vv" ] && echo "New arguments: $*$norm |
215 | " >&2 |
218 | " >&2 |
216 | while true ; do |
219 | while true ; do |
217 | case "$1" in |
220 | case "$1" in |
218 | -h | --help) |
221 | -h | --help) |
219 | help=1 |
222 | help=1 |
220 | shift;; |
223 | shift;; |
221 | 224 | ||
222 | -v | --verbose) |
225 | -v | --verbose) |
223 | let verbose++
|
226 | let verbose++
|
224 | shift;; |
227 | shift;; |
225 | 228 | ||
226 | -V | --version) |
229 | -V | --version) |
227 | version=1 |
230 | version=1 |
228 | shift;; |
231 | shift;; |
229 | 232 | ||
230 | -c | --compile) |
233 | -c | --compile) |
231 | compile=1 |
234 | compile=1 |
232 | source=$2 |
235 | source=$2 |
233 | shift 2;; |
236 | shift 2;; |
234 | 237 | ||
235 | -k | --keep) |
238 | -k | --keep) |
236 | keep=1 |
239 | keep=1 |
237 | shift;; |
240 | shift;; |
238 | 241 | ||
239 | -l | --list) |
242 | -l | --list) |
240 | list=1 |
243 | list=1 |
241 | shift;; |
244 | shift;; |
242 | 245 | ||
243 | -g | --grey-levels) |
246 | -g | --grey-levels) |
244 | grey_levels=$2 |
247 | grey_levels=$2 |
245 | shift 2;; |
248 | shift 2;; |
246 | 249 | ||
247 | -o | --output-target) |
250 | -o | --output-target) |
248 | target=$2 |
251 | target=$2 |
249 | shift 2;; |
252 | shift 2;; |
250 | 253 | ||
251 | -s | --subtitle-id) |
254 | -s | --subtitle-id) |
252 | sid=$2 |
255 | sid=$2 |
253 | shift 2;; |
256 | shift 2;; |
254 | 257 | ||
255 | -t | --title) |
258 | -t | --title) |
256 | title=$2 |
259 | title=$2 |
257 | shift 2;; |
260 | shift 2;; |
258 | 261 | ||
259 | --)
|
262 | --)
|
260 | shift
|
263 | shift
|
261 | break;; |
264 | break;; |
262 | esac
|
265 | esac
|
263 | done
|
266 | done
|
264 | [ -n "$*" ] && args=$args" $*" |
267 | [ -n "$*" ] && args=$args" $*" |
265 | set -- $args |
268 | set -- $args |
266 | else
|
269 | else
|
267 | [ $verbose -gt 1 ] && echo "getopt exited: $getopt_exit_code |
270 | [ $verbose -gt 1 ] && echo "getopt exited: $getopt_exit_code |
268 | " >&2 |
271 | " >&2 |
269 | if [ $getopt_exit_code -eq 1 -o $getopt_exit_code -eq 2 ]; then |
272 | if [ $getopt_exit_code -eq 1 -o $getopt_exit_code -eq 2 ]; then |
270 | help=1 |
273 | help=1 |
271 | else
|
274 | else
|
272 | exit $getopt_exit_code |
275 | exit $getopt_exit_code |
273 | fi
|
276 | fi
|
274 | fi
|
277 | fi
|
275 | 278 | ||
276 | [ $list -eq 0 ] && _title |
279 | [ $list -eq 0 ] && _title |
277 | [ $version -eq 1 ] && exit $ESUCCESS |
280 | [ $version -eq 1 ] && exit $ESUCCESS |
278 | [ $help -eq 1 ] && |
281 | [ $help -eq 1 ] && |
279 | {
|
282 | {
|
280 | _help "$0"
|
283 | _help "$0"
|
281 | exit $EARGERROR |
284 | exit $EARGERROR |
282 | }
|
285 | }
|
283 | 286 | ||
284 | result=$ESUCCESS |
287 | result=$ESUCCESS |
285 | [ $compile -eq 0 ] && |
288 | [ $compile -eq 0 ] && |
286 | {
|
289 | {
|
287 | [ -n "$1" ] && source=$1 |
290 | [ -n "$1" ] && source=$1 |
288 | [ -z "$title" -a -n "$2" ] && title=$2 |
291 | [ -z "$title" -a -n "$2" ] && title=$2 |
289 | [ -z "$sid" -a -n "$3" ] && sid=$3 |
292 | [ -z "$sid" -a -n "$3" ] && sid=$3 |
290 | [ -z "$target" -a -n "$4" ] && target=$4 |
293 | [ -z "$target" -a -n "$4" ] && target=$4 |
291 | [ -z "$grey_levels" -a -n "$5" ] && grey_levels=$5 |
294 | [ -z "$grey_levels" -a -n "$5" ] && grey_levels=$5 |
292 | 295 | ||
293 | getsubtitles () |
296 | getsubtitles () |
294 | {
|
297 | {
|
295 | mplayer -dvd-device "$1" -vo null -ao null -frames 0 \ |
298 | mplayer -dvd-device "$1" -vo null -ao null -frames 0 \ |
296 | -v "dvd://${2:-2}" 2>&1 | |
299 | -v "dvd://${2:-2}" 2>&1 | |
297 | sed -n '/sid/ s/^[^:]\{1,\}:[[:space:]]//p' |
300 | sed -n '/sid/ s/^[^:]\{1,\}:[[:space:]]//p' |
298 | # echo "$subtitles"
|
301 | # echo "$subtitles"
|
299 | }
|
302 | }
|
300 | 303 | ||
301 | [ $list -eq 1 ] && |
304 | [ $list -eq 1 ] && |
302 | {
|
305 | {
|
303 | # first title may be only an intro
|
306 | # first title may be only an intro
|
304 | [ "$title" = '-' ] && title=2 |
307 | [ "$title" = '-' ] && title=2 |
305 | tmp=`getsubtitles $source $title` |
308 | tmp=`getsubtitles $source $title` |
306 | if [ -n "$tmp" ]; then |
309 | if [ -n "$tmp" ]; then |
307 | echo "${extd}The following subtitles are available for title #$title:$norm |
310 | echo "${extd}The following subtitles are available for title #$title:$norm |
308 | $tmp"
|
311 | $tmp"
|
309 | exit $ESUCCESS |
312 | exit $ESUCCESS |
310 | else
|
313 | else
|
311 | exit $ECANTEXTRACT |
314 | exit $ECANTEXTRACT |
312 | fi
|
315 | fi
|
313 | }
|
316 | }
|
314 | 317 | ||
315 | [ "$sid" != '-' -a "$title" != '-' ] && |
318 | [ "$sid" != '-' -a "$title" != '-' ] && |
316 | {
|
319 | {
|
317 | subtitles=`getsubtitles $source $title` |
320 | subtitles=`getsubtitles $source $title` |
318 | [ -n "$subtitles" ] && |
321 | [ -n "$subtitles" ] && |
319 | st_descr=`echo "$subtitles" | grep "^$sid[[:space:]]" | |
322 | st_descr=`echo "$subtitles" | grep "^$sid[[:space:]]" | |
320 | cut -f 2- -d ' '` |
323 | cut -f 2- -d ' '` |
321 | }
|
324 | }
|
322 | 325 | ||
323 | if [ "$source" = '-' ]; then |
326 | if [ "$source" = '-' ]; then |
324 | stream_file=`ls subtitle_stream-*-$title-$sid 2>/dev/null | head -n 1` |
327 | stream_file=`ls subtitle_stream-*-$title-$sid 2>/dev/null | head -n 1` |
325 | if [ $? -eq 0 ]; then |
328 | if [ $? -eq 0 ]; then |
326 | read -r -s -p "Use '$stream_file' [Y/n]? " -n 1 |
329 | read -r -s -p "Use '$stream_file' [Y/n]? " -n 1 |
327 | case $REPLY in |
330 | case $REPLY in |
328 | [Nn]) |
331 | [Nn]) |
329 | echo $REPLY |
332 | echo $REPLY |
330 | exit 1;; |
333 | exit 1;; |
331 | *) |
334 | *) |
332 | echo Y
|
335 | echo Y
|
333 | esac
|
336 | esac
|
334 | echo
|
337 | echo
|
335 | 338 | ||
336 | id=${stream_file#*-} |
339 | id=${stream_file#*-} |
337 | else
|
340 | else
|
338 | echo "$appname: No such file: subtitle_stream-*-$title-$sid" >&2 |
341 | echo "$appname: No such file: subtitle_stream-*-$title-$sid" >&2 |
339 | exit $ECANTEXTRACT |
342 | exit $ECANTEXTRACT |
340 | fi
|
343 | fi
|
341 | else
|
344 | else
|
342 | read_error () |
345 | read_error () |
343 | {
|
346 | {
|
344 | case $1 in |
347 | case $1 in |
345 | 0) subject='titles available on this DVD source.';; |
348 | 0) subject='titles available on this DVD source.';; |
346 | *) subject='subtitles available for this title.';; |
349 | *) subject='subtitles available for this title.';; |
347 | esac
|
350 | esac
|
348 | 351 | ||
349 | echo >&2 "\ |
352 | echo >&2 "\ |
350 | Sorry, there are no $subject
|
353 | Sorry, there are no $subject
|
351 | Please verify that the DVD data source is available and
|
354 | Please verify that the DVD data source is available and
|
352 | that its filesystem is consistent."
|
355 | that its filesystem is consistent."
|
353 | 356 | ||
354 | unset subject
|
357 | unset subject
|
355 | exit $ECANTEXTRACT |
358 | exit $ECANTEXTRACT |
356 | }
|
359 | }
|
357 | 360 | ||
358 | if [ "$title" = '-' ]; then |
361 | if [ "$title" = '-' ]; then |
359 | titles=`mplayer -dvd-device "$source" -vo null -ao null -frames 0 \ |
362 | titles=`mplayer -dvd-device "$source" -vo null -ao null -frames 0 \ |
360 | -v dvd:// 2>&1 | egrep '[0-9]+ titles'` |
363 | -v dvd:// 2>&1 | egrep '[0-9]+ titles'` |
361 | num_titles=`echo "$titles" | awk '{print $3}'` |
364 | num_titles=`echo "$titles" | awk '{print $3}'` |
362 | 365 | ||
363 | [ $(($num_titles)) -lt 1 ] && read_error 0 |
366 | [ $(($num_titles)) -lt 1 ] && read_error 0 |
364 | 367 | ||
365 | echo "$titles" |
368 | echo "$titles" |
366 | while true |
369 | while true |
367 | do
|
370 | do
|
368 | read -r -p "\ |
371 | read -r -p "\ |
369 | ${extd}Enter title# (1-$num_titles), or nothing to abort: $norm"
|
372 | ${extd}Enter title# (1-$num_titles), or nothing to abort: $norm"
|
370 | if [ -n "$REPLY" ]; then |
373 | if [ -n "$REPLY" ]; then |
371 | title=$(($REPLY)) |
374 | title=$(($REPLY)) |
372 | [ $title -ge 1 -a $title -le $num_titles ] && break |
375 | [ $title -ge 1 -a $title -le $num_titles ] && break |
373 | else
|
376 | else
|
374 | exit $ECANTEXTRACT |
377 | exit $ECANTEXTRACT |
375 | fi
|
378 | fi
|
376 | done
|
379 | done
|
377 | echo
|
380 | echo
|
378 | fi
|
381 | fi
|
379 | 382 | ||
380 | if [ "$sid" = '-' ]; then |
383 | if [ "$sid" = '-' ]; then |
381 | if [ -z "$subtitles" ]; then subtitles=`"$0" -lt "$title" "$source"`; fi |
384 | if [ -z "$subtitles" ]; then subtitles=`"$0" -lt "$title" "$source"`; fi |
382 | if [ $? -eq 0 ]; then |
385 | if [ $? -eq 0 ]; then |
383 | sid_max=`echo "$subtitles" | tail -n 1 | awk '{print $1}'` |
386 | sid_max=`echo "$subtitles" | tail -n 1 | awk '{print $1}'` |
384 | echo "$subtitles" |
387 | echo "$subtitles" |
385 | while true; do |
388 | while true; do |
386 | read -r -p "\ |
389 | read -r -p "\ |
387 | ${extd}Enter ID of subtitle stream (0-$sid_max) to extract, or nothing to abort: $norm"
|
390 | ${extd}Enter ID of subtitle stream (0-$sid_max) to extract, or nothing to abort: $norm"
|
388 | if [ -n "$REPLY" ]; then |
391 | if [ -n "$REPLY" ]; then |
389 | sid=$(($REPLY)) |
392 | sid=$(($REPLY)) |
390 | [ $sid -ge 0 -a $sid -lt $sid_max ] && break |
393 | [ $sid -ge 0 -a $sid -lt $sid_max ] && break |
391 | else
|
394 | else
|
392 | exit $ECANTEXTRACT |
395 | exit $ECANTEXTRACT |
393 | fi
|
396 | fi
|
394 | done
|
397 | done
|
395 | else
|
398 | else
|
396 | read_error 1
|
399 | read_error 1
|
397 | fi
|
400 | fi
|
398 | fi
|
401 | fi
|
399 | 402 | ||
400 | # remove trailing /
|
403 | # remove trailing /
|
401 | source=${source%/} |
404 | source=${source%/} |
402 | 405 | ||
403 | vol=`(echo $(volname $source 2>/dev/null); exit $?;) || echo ${source##*/}` |
406 | vol=`(echo $(volname $source 2>/dev/null); exit $?;) || echo ${source##*/}` |
404 | id=$vol-$title-$sid |
407 | id=$vol-$title-$sid |
405 | stream_file=subtitle_stream-$id |
408 | stream_file=subtitle_stream-$id |
406 | 409 | ||
407 | unset REPLY
|
410 | unset REPLY
|
408 | [ -f "$stream_file" ] && |
411 | [ -f "$stream_file" ] && |
409 | {
|
412 | {
|
410 | read -r -s -p "${extd}Use existing '$stream_file' [Y/n]? $norm" -n 1 |
413 | read -r -s -p "${extd}Use existing '$stream_file' [Y/n]? $norm" -n 1 |
411 | case $REPLY in |
414 | case $REPLY in |
412 | [Nn]) |
415 | [Nn]) |
413 | echo $REPLY |
416 | echo $REPLY |
414 | read -r -s -p "${extd}Overwrite existing '$stream_file' [y/N]? $norm"\ |
417 | read -r -s -p "${extd}Overwrite existing '$stream_file' [y/N]? $norm"\ |
415 | -n 1 REPLY2 |
418 | -n 1 REPLY2 |
416 | case $REPLY2 in |
419 | case $REPLY2 in |
417 | [Yy]) echo $REPLY2;; |
420 | [Yy]) echo $REPLY2;; |
418 | *) |
421 | *) |
419 | echo N
|
422 | echo N
|
420 | id=$vol-$title-$sid-$$ |
423 | id=$vol-$title-$sid-$$ |
421 | stream_file=subtitle_stream-$id |
424 | stream_file=subtitle_stream-$id |
422 | echo "Using '$stream_file'" |
425 | echo "Using '$stream_file'" |
423 | esac
|
426 | esac
|
424 | echo
|
427 | echo
|
425 | unset REPLY2;; |
428 | unset REPLY2;; |
426 | *) |
429 | *) |
427 | echo Y
|
430 | echo Y
|
428 | REPLY='y' |
431 | REPLY='y' |
429 | esac
|
432 | esac
|
430 | echo
|
433 | echo
|
431 | }
|
434 | }
|
432 | 435 | ||
433 | [ "$target" = '-' ] && target="$stream_file.srt" |
436 | [ "$target" = '-' ] && target="$stream_file.srt" |
434 | 437 | ||
435 | [ -z "$REPLY" -o "$REPLY" == 'N' -o "$REPLY" == 'n' ] && |
438 | [ -z "$REPLY" -o "$REPLY" == 'N' -o "$REPLY" == 'n' ] && |
436 | {
|
439 | {
|
437 | echo "\ |
440 | echo "\ |
438 | ${extd}Extracting subtitle stream $norm$sid${st_descr:+ ($st_descr)}$extd
|
441 | ${extd}Extracting subtitle stream $norm$sid${st_descr:+ ($st_descr)}$extd
|
439 | of title $norm#$title$extd
|
442 | of title $norm#$title$extd
|
440 | on $norm$source$extd
|
443 | on $norm$source$extd
|
441 | to \"$norm$target$extd\" ...$norm
|
444 | to \"$norm$target$extd\" ...$norm
|
442 | " >&2 |
445 | " >&2 |
443 | 446 | ||
444 | > "$stream_file" |
447 | > "$stream_file" |
445 | tccat -i "$source" -T "$title" -L | |
448 | tccat -i "$source" -T "$title" -L | |
446 | tcextract -x ps1 -t vob -a 0x2$sid > "$stream_file" |
449 | tcextract -x ps1 -t vob -a 0x2$sid > "$stream_file" |
447 | }
|
450 | }
|
448 | fi
|
451 | fi
|
449 | 452 | ||
450 | if [ -f "$stream_file" -a -s "$stream_file" ]; then |
453 | if [ -f "$stream_file" -a -s "$stream_file" ]; then |
451 | echo "${extd}... done.$norm" |
454 | echo "${extd}... done.$norm" |
452 | else
|
455 | else
|
453 | echo "${extd}... failed.$norm" |
456 | echo "${extd}... failed.$norm" |
454 | [ -f "$stream_file" ] && rm ./"$stream_file" |
457 | [ -f "$stream_file" ] && rm ./"$stream_file" |
455 | exit $ECANTEXTRACT |
458 | exit $ECANTEXTRACT |
456 | fi
|
459 | fi
|
457 | 460 | ||
458 | result=$ESUCCESS |
461 | result=$ESUCCESS |
459 | while true |
462 | while true |
460 | do
|
463 | do
|
461 | echo -n " |
464 | echo -n " |
462 | ${extd}Converting subtitle stream \"$norm$stream_file$extd\"
|
465 | ${extd}Converting subtitle stream \"$norm$stream_file$extd\"
|
463 | to Netpbm Portable Greymaps (PGMs) ... $norm" | fold -s >&2 |
466 | to Netpbm Portable Greymaps (PGMs) ... $norm" | fold -s >&2 |
464 | subtitle2pgm -o ./${id}- ${grey_levels:+-c "$grey_levels"} < $stream_file |
467 | subtitle2pgm -o ./${id}- ${grey_levels:+-c "$grey_levels"} < $stream_file |
465 | result=$? |
468 | result=$? |
466 | if [ $result -eq 0 ]; then |
469 | if [ $result -eq 0 ]; then |
467 | echo "${extd}done.$norm |
470 | echo "${extd}done.$norm |
468 |
|
471 |
|
469 | ${extd}Converting PGMs to text files (TXTs) using GNU OCR (gocr) ... $norm"
|
472 | ${extd}Converting PGMs to text files (TXTs) using GNU OCR (gocr) ... $norm"
|
470 | st_lang=$(echo "$st_descr" | sed 's/.*language: \([a-z]\{2\}\)/\1/') |
473 | st_lang=$(echo "$st_descr" | sed 's/.*language: \([a-z]\{2\}\)/\1/') |
471 | pgm2txt ${st_lang:+-f $st_lang} ./${id}- |
474 | pgm2txt ${st_lang:+-f $st_lang} ./${id}- |
472 | result=$? |
475 | result=$? |
473 | if [ $result -eq 0 ]; then |
476 | if [ $result -eq 0 ]; then |
474 | echo "${extd}done, using a grey-levels value of\ |
477 | echo "${extd}done, using a grey-levels value of\ |
475 | \`$norm${grey_levels:-255,255,0,255}$extd'.$norm"
|
478 | \`$norm${grey_levels:-255,255,0,255}$extd'.$norm"
|
476 | break
|
479 | break
|
477 | else
|
480 | else
|
478 | echo "${extd}failed.
|
481 | echo "${extd}failed.
|
479 |
|
482 |
|
480 | If the conversion was cancelled due to inappropriate grey-levels value
|
483 | If the conversion was cancelled due to inappropriate grey-levels value
|
481 | \`${grey_levels:-255,255,0,255}', you may try another value,\
|
484 | \`${grey_levels:-255,255,0,255}', you may try another value,\
|
482 | else you should abort:
|
485 | else you should abort:
|
483 | $norm"
|
486 | $norm"
|
484 | select grey_levels in \ |
487 | select grey_levels in \ |
485 | `[ "$grey_levels" != '0,255,255,255' ] && echo 0,255,255,255` \ |
488 | `[ "$grey_levels" != '0,255,255,255' ] && echo 0,255,255,255` \ |
486 | `[ "$grey_levels" != '255,0,255,255' ] && echo 255,0,255,255` \ |
489 | `[ "$grey_levels" != '255,0,255,255' ] && echo 255,0,255,255` \ |
487 | `[ -n "$grey_levels" -a "$grey_levels" != '255,255,0,255' ] && |
490 | `[ -n "$grey_levels" -a "$grey_levels" != '255,255,0,255' ] && |
488 | echo 255,255,0,255` \ |
491 | echo 255,255,0,255` \ |
489 | `[ "$grey_levels" != '255,255,255,0' ] && echo 255,255,255,0` \ |
492 | `[ "$grey_levels" != '255,255,255,0' ] && echo 255,255,255,0` \ |
490 | Other \ |
493 | Other \ |
491 | Abort |
494 | Abort |
492 | do
|
495 | do
|
493 | case $grey_levels in |
496 | case $grey_levels in |
494 | Other)
|
497 | Other)
|
495 | read -r -p " |
498 | read -r -p " |
496 | ${extd}Enter new value (\`c0$extd,${norm}c1$extd,${norm}c2$extd,${norm}c3'\
|
499 | ${extd}Enter new value (\`c0$extd,${norm}c1$extd,${norm}c2$extd,${norm}c3'\
|
497 | with 0 <= cN <= 255), or nothing to select a value:
|
500 | with 0 <= cN <= 255), or nothing to select a value:
|
498 | $norm" grey_levels
|
501 | $norm" grey_levels
|
499 | [ -n "$grey_levels" ] && break;;
|
502 | [ -n "$grey_levels" ] && break;;
|
500 |
|
503 |
|
501 | Abort)
|
504 | Abort)
|
502 | result=$EOCRERROR
|
505 | result=$EOCRERROR
|
503 | break;;
|
506 | break;;
|
504 |
|
507 |
|
505 | *)
|
508 | *)
|
506 | break
|
509 | break
|
507 | esac
|
510 | esac
|
508 | done
|
511 | done
|
509 | fi
|
512 | fi
|
510 | else
|
513 | else
|
511 | echo "${extd}failed.$norm"
|
514 | echo "${extd}failed.$norm"
|
512 | result=$ECANTCONVERT
|
515 | result=$ECANTCONVERT
|
513 | break
|
516 | break
|
514 | fi
|
517 | fi
|
515 | done
|
518 | done
|
516 |
|
519 |
|
517 | echo -n "${extd}Cleaning up PGMs ... $norm"
|
520 | echo -n "${extd}Cleaning up PGMs ... $norm"
|
518 | rm ./${id}-*.pgm
|
521 | rm ./${id}-*.pgm
|
519 | if [ $? -eq 0 ]; then
|
522 | if [ $? -eq 0 ]; then
|
520 | echo "${extd}done.$norm"
|
523 | echo "${extd}done.$norm"
|
521 | else
|
524 | else
|
522 | echo "${extd}failed.$norm"
|
525 | echo "${extd}failed.$norm"
|
523 | fi
|
526 | fi
|
524 | }
|
527 | }
|
525 |
|
528 |
|
526 | [ $result -eq $ESUCCESS ] &&
|
529 | [ $result -eq $ESUCCESS ] &&
|
527 | {
|
530 | {
|
528 | if [ $compile -eq 1 ]; then
|
531 | if [ $compile -eq 1 ]; then
|
529 | try_file ()
|
532 | try_file ()
|
530 | {
|
533 | {
|
531 | [ ! -f "$source" ] && source="$source.srtx"
|
534 | [ ! -f "$source" ] && source="$source.srtx"
|
532 | [ -f "$source" ]
|
535 | [ -f "$source" ]
|
533 | }
|
536 | }
|
534 |
|
537 |
|
535 | if [ -d "$source" ]; then
|
538 | if [ -d "$source" ]; then
|
536 | # TODO: loop through all .srtx files in the directory
|
539 | # TODO: loop through all .srtx files in the directory
|
537 | if [ "$source" != '.' ]; then cd "$source"; fi
|
540 | if [ "$source" != '.' ]; then cd "$source"; fi
|
538 | [ $? -eq 0 ] &&
|
541 | [ $? -eq 0 ] &&
|
539 | {
|
542 | {
|
540 | ls "$source"/*.srtx 2>/dev/null
|
543 | ls "$source"/*.srtx 2>/dev/null
|
541 | }
|
544 | }
|
542 | echo >&2 "$appname: $source: Directory compile is not yet supported."
|
545 | echo >&2 "$appname: $source: Directory compile is not yet supported."
|
543 | exit $ECANTCOMPILE
|
546 | exit $ECANTCOMPILE
|
544 | elif try_file; then
|
547 | elif try_file; then
|
545 | d=${source%/*}
|
548 | d=${source%/*}
|
546 | if [ -a -d "$d" -a "$d" != '.' ]; then cd "$d"; fi
|
549 | if [ -a -d "$d" -a "$d" != '.' ]; then cd "$d"; fi
|
547 | id=${source%-*}
|
550 | id=${source%-*}
|
548 | stream_file=subtitle_stream-$id
|
551 | stream_file=subtitle_stream-$id
|
549 | source="./${source##*/}"
|
552 | source="./${source##*/}"
|
550 | else
|
553 | else
|
551 | echo >&2 "$appname: $source: No such file or directory."
|
554 | echo >&2 "$appname: $source: No such file or directory."
|
552 | exit $ECANTCOMPILE
|
555 | exit $ECANTCOMPILE
|
553 | fi
|
556 | fi
|
554 | else
|
557 | else
|
555 | source="${id}-.srtx"
|
558 | source="${id}-.srtx"
|
556 | fi
|
559 | fi
|
557 |
|
560 |
|
558 | unset REPLY
|
561 | unset REPLY
|
559 | [ -f "$target" ] &&
|
562 | [ -f "$target" ] &&
|
560 | {
|
563 | {
|
561 | # TODO: allow for diff
|
564 | # TODO: allow for diff
|
562 | read -r -s -p "${extd}'$target' exists.
|
565 | read -r -s -p "${extd}'$target' exists.
|
563 | Append, overwrite, create new file, or abort [a/o/n/Esc]? $norm" \
|
566 | Append, overwrite, create new file, or abort [a/o/n/Esc]? $norm" \
|
564 | -n 1
|
567 | -n 1
|
565 | case $REPLY in
|
568 | case $REPLY in
|
566 | [Oo]) echo $REPLY;;
|
569 | [Oo]) echo $REPLY;;
|
567 | [Aa]) echo $REPLY;;
|
570 | [Aa]) echo $REPLY;;
|
568 | [Nn])
|
571 | [Nn])
|
569 | echo $REPLY
|
572 | echo $REPLY
|
570 | target="${target%.*}-$$.${target##*.}";;
|
573 | target="${target%.*}-$$.${target##*.}";;
|
571 | *)
|
574 | *)
|
572 | REPLY=Abort
|
575 | REPLY=Abort
|
573 | echo $REPLY
|
576 | echo $REPLY
|
574 | exit $ECANTCOMPILE;;
|
577 | exit $ECANTCOMPILE;;
|
575 | esac
|
578 | esac
|
576 | }
|
579 | }
|
577 |
|
580 |
|
578 | echo "
|
581 | echo "
|
579 | ${extd}Compiling TXTs into \"$norm$target$extd\" ... $norm"
|
582 | ${extd}Compiling TXTs into \"$norm$target$extd\" ... $norm"
|
580 |
|
583 |
|
581 | case "$REPLY" in
|
584 | case "$REPLY" in
|
582 | [Oo]) > "$target";;
|
585 | [Oo]) > "$target";;
|
583 | [Aa])
|
586 | [Aa])
|
584 | # append new content marker here
|
587 | # append new content marker here
|
585 | echo "
|
588 | echo "
|
586 | -- `whoami`@`hostname` -- `date` --
|
589 | -- `whoami`@`hostname` -- `date` --
|
587 | " >> "$target" |
590 | " >> "$target" |
588 | esac
|
591 | esac
|
589 | 592 | ||
590 | (
|
593 | (
|
591 | # sed: thx to Erkan Yanar <erkan.yanar@t-online.de>, see
|
594 | # sed: thx to Erkan Yanar <erkan.yanar@t-online.de>, see
|
592 | # message ID <lduohb.v74.ln@510002093148-0001.dialin.t-online.de>
|
595 | # message ID <lduohb.v74.ln@510002093148-0001.dialin.t-online.de>
|
593 | srttool -s -i "$source" |
596 | srttool -s -i "$source" |
594 | 597 | ||
595 | # only if srttool is not available
|
598 | # only if srttool is not available
|
596 | if [ $? -gt 1 ]; then |
599 | if [ $? -gt 1 ]; then |
597 | sed -n 's,^\(\([^/]*\)\(/\)\(.*\.pgm\.txt\)\)$,/^\2\\\3\4$/ { \ |
600 | sed -n 's,^\(\([^/]*\)\(/\)\(.*\.pgm\.txt\)\)$,/^\2\\\3\4$/ { \ |
598 | r \1 \
|
601 | r \1 \
|
599 | d \
|
602 | d \
|
600 | },gp' "$source" | sed -f - "$source" |
603 | },gp' "$source" | sed -f - "$source" |
601 | fi
|
604 | fi
|
602 | ) >> "$target" |
605 | ) >> "$target" |
603 | 606 | ||
604 | if [ $? -eq 0 ]; then |
607 | if [ $? -eq 0 ]; then |
605 | echo "${extd}... done.$norm" |
608 | echo "${extd}... done.$norm" |
606 | else
|
609 | else
|
607 | echo "${extd}... failed.$norm" |
610 | echo "${extd}... failed.$norm" |
608 | exit $ECANTCOMPILE |
611 | exit $ECANTCOMPILE |
609 | fi
|
612 | fi
|
610 | 613 | ||
611 | echo -n "${extd}Cleaning up |
614 | echo -n "${extd}Cleaning up |
612 | ${id}-*.pgm.txt files ... $norm"
|
615 | ${id}-*.pgm.txt files ... $norm"
|
613 | rm ./"${id}"-*.pgm.txt |
616 | rm ./"${id}"-*.pgm.txt |
614 | if [ $? -eq 0 ]; then |
617 | if [ $? -eq 0 ]; then |
615 | echo "${extd}done.$norm" |
618 | echo "${extd}done.$norm" |
616 | else
|
619 | else
|
617 | echo "${extd}failed.$norm" |
620 | echo "${extd}failed.$norm" |
618 | result=$ECANTCLEANUP |
621 | result=$ECANTCLEANUP |
619 | fi
|
622 | fi
|
620 | 623 | ||
621 | echo -n " ${extd}Subtitle index file '${id}-.srtx' ... $norm" |
624 | echo -n " ${extd}Subtitle index file '${id}-.srtx' ... $norm" |
622 | rm ./"${id}-.srtx" # "$target.srtx" |
625 | rm ./"${id}-.srtx" # "$target.srtx" |
623 | if [ $? -eq 0 ]; then |
626 | if [ $? -eq 0 ]; then |
624 | echo "${extd}done.$norm" |
627 | echo "${extd}done.$norm" |
625 | else
|
628 | else
|
626 | echo "${extd}failed.$norm" |
629 | echo "${extd}failed.$norm" |
627 | result=$ECANTCLEANUP |
630 | result=$ECANTCLEANUP |
628 | fi
|
631 | fi
|
629 | 632 | ||
630 | [ $keep -eq 0 -a -f "./$stream_file" ] && |
633 | [ $keep -eq 0 -a -f "./$stream_file" ] && |
631 | {
|
634 | {
|
632 | echo -n " ${extd}Subtitle stream file '${stream_file}' ... $norm" |
635 | echo -n " ${extd}Subtitle stream file '${stream_file}' ... $norm" |
633 | rm ./"$stream_file" |
636 | rm ./"$stream_file" |
634 | 637 | ||
635 | if [ $? -eq 0 ]; then |
638 | if [ $? -eq 0 ]; then |
636 | echo "${extd}done.$norm" |
639 | echo "${extd}done.$norm" |
637 | else
|
640 | else
|
638 | echo "${extd}failed.$norm" |
641 | echo "${extd}failed.$norm" |
639 | result=$ECANTCLEANUP |
642 | result=$ECANTCLEANUP |
640 | fi
|
643 | fi
|
641 | }
|
644 | }
|
642 | 645 | ||
643 | exit $result |
646 | exit $result |
644 | }
|
647 | }
|
645 | 648 |