Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11290
Wohnort: Bremen
|
Hi! Wie sieht es denn mit dem Wiki-Artikel Baustelle/Book-To-MP3 aus? Ist ja schon länger nichts mehr passiert; wäre aber schade drum, wenn das versanden würde! so long hank
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11290
Wohnort: Bremen
|
Hi! Scheint verlassen zu sein; Manabe hatte ich vor 4 Wochen angeschrieben... so long hank
|
rennau80
Anmeldungsdatum: 10. November 2009
Beiträge: 23
Wohnort: Anchorage
|
hallo, hatte anfang diesen jahres einen ähnlichen thread gestartet und soweit ich weiß hatten einige erfolg mit dem script (pdf2mp3.py):
http://forum.ubuntuusers.de/topic/pdf-datei-in-mp3-datei-konvertieren-pdf2mp3/ gruß, rennau80
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11290
Wohnort: Bremen
|
Hi! Soll der Artikel aus der "verlassen"-Ecke wieder raus? Manabe scheint ja wieder aktiv daran zuarbeiten. Interessant wäre das ggf. auch, um es mit Texterkennungsprogrammen zu kombinieren; als Grundlage zum "Vorlesen" von eingescannten Dokumenten. Es gibt dazu ein Projekt, easy-ocr oder so ähnlich, was diese Idee verfolgt, aber grottenschlecht umgesetzt ist... (irgendwo auf googlecode hab' ich das gefunden) so long hank
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11290
Wohnort: Bremen
|
Hi! Hab' mich des Artikel angenommen, und aus der Verlassen-Ecke wieder rausgeholt : Baustelle/Book-To-MP3, Manabes Einverständnis stillschweigend voraussetzend, da er sich hier leider noch nicht gemeldet hat. Habe allerdings unter Maverick kleine Probleme mit dem Skript; es läuft durch, es werden auch MP3s erstellt, aber dann hängt das Terminal plötzlich mit einer Fehlermeldung:
cat: spc.txt: No such file or directory
Anzahl der Wörter (word count) : 0 Wörter
Geschätzte Größe (mp3 size) : 0 kB
und danach hängt der Cursor irgendwo, bendet wird der Prozess nicht von selber. Es scheint die Ausgabe der Zeilen 7-12 des Skriptes zu sein: spanner(){
sleep 20.0
ANZW=$(cat spc.txt | wc -w)
echo "Anzahl der Wörter (word count) : $ANZW Wörter"
BEGR=$(echo "scale=5 ; $ANZW*3.34" | bc)
echo "Geschätzte Größe (mp3 size) : $BEGR kB" Mir ist nicht so ganz klar, was da warum passiert, muss mir das Skript aber auch noch mal genauer anschauen... Nett wäre ja, wenn man die Baustelle/Gespeaker-Einstellungen für die Stimmen noch verwenden könnte; dann ließe sich das ganze noch "natürlicher" vorlesen (wird kein Harry Rowohlt, aber r2d2 muss es ja auch nicht unbedingt sein 😉) so long hank
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11290
Wohnort: Bremen
|
Hi! Habe den Artikel mal etwas aufgebohrt, bin aber noch nicht ganz durch. Das oben beschriebene Problem mit dem Maverick-Skript liegt vermutlich daran, dass der erstellte tmp-Ordner mitsamt Inhalt gelöscht wird, bevor die Dateien ausgelesen, und die statistischen Daten ausgegeben werden können - teste demnächst mal, wie man das anpassen kann (imho könnte man auf den Teil aber auch ganz verzichten, wie in der ersten Version) Zur ersten Version: Wird denn nun eSpeak oder mbrola verwendet, um die wave-Datei zu erzeugen? Warum beide Programme in dem "gepipten" Aufruf? Stehe da gerade etwas auf dem Schlauch 😠 so long hank
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11290
Wohnort: Bremen
|
Hi! Kann jemand von den "Befugten" den Thread ins Wiki-Forum verschieben? Dort wäre er imho besser aufgehoben - Danke! so long hank
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11290
Wohnort: Bremen
|
Hi! So, bin "formal" fertig; wg. der angesprochenen Probleme hab' ich Manabe noch mal angeschrieben, ich hoffe, er schneit hier nochmal herein. Praktisch wäre natürlich, das Skript mit Zenity o.ä. noch zu erweitern, sodass man die Dateien über einen Auswahldialog aufrufen, den Speicherort, die Länge der gesplitteten Dateien, deren Namen etc. festlegen könnt; vielleicht auch direkt eine Soundausgabe starten... Hat jemand Interesse/Kenntnisse dazu? so long hank PS: redknight: Danke fürs Verschieben des Threads!
|
cornix
Anmeldungsdatum: 9. März 2007
Beiträge: 4763
Wohnort: Ringenberg
|
Heinrich Schwietering schrieb: Hat jemand Interesse/Kenntnisse dazu?
Schau ich mir Sonntag an. Wäre gut, wenn mir jemand Testdaten geben kann, je eine lit, rtf und doc Datei und falls vorhanden Dateitypen, die das Skript bisher noch nicht kennt. Gruß, cornix
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11290
Wohnort: Bremen
|
Hi! Verschoben: Skripte/Book-To-MP3 ☺ @cornix
doc-Dateien kannst du mit OpenOffice basteln, ich glaube, damit kann man auch rtf ausgeben. lit hab' ich leider keine, weiß auch nicht, was so etwas ausgeben kann. Aber du könntest ja auch mal odt versuchen; wäre für ein Open-Source-Skript doch nicht die schlechteste Möglichkeit 😉. so long hank
|
Manabe
(Themenstarter)
Anmeldungsdatum: 20. Januar 2010
Beiträge: Zähle...
|
Hallo ich habe eine neue Version in das Wiki Skripte/Book-To-MP3 gestellt. Version 1.2 Stichpunktliste der Neuerungen in 1.2: Zenity GUI hinzugefügt mit dem Aufruf ohne Parameter startet das Script mit der Dateiauswahl für unterstützte Buchdateien Ermitteln benötigter Pakete und auf Wunsch automatische Installation über apt-get install epup - Unterstützung Parameter -o für ogg-Vorbis-ausgabe ( statt mp3 ) Parameter -t erstellt zusätzlich eine Text-Version des Buches und -T erstellt ausschließlich das Textdokument Parameter -n Kommandozeilen-Modus
Viel Spaß beim austesten
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11290
Wohnort: Bremen
|
Hi! Das Skript funktioniert bei einem ersten Test erstmal einwandfrei! Vielen Dank für die Erweiterungen!. Syntaxtechnisch schaue ich die Tage noch mal. Was DjVu angeht hab' ich auf die Schnelle auch keine konkrete Idee, es müsste aber auch gehen (ggf. mal den djvubind-code genauer anschauen?) so long hank
|
Manabe
(Themenstarter)
Anmeldungsdatum: 20. Januar 2010
Beiträge: 12
|
So nach ein wenig tüfteln habe ich ein Scrip für djvu-Bücher gebastelt. Es hat ebenfalls eine Zenity Gui und kann eine oder mehrere Bilddateien (auch andere Formate) in einen Buchtext umwandeln. Als OCR werden Tesseract und Cuneiform unterstützt
(die Installation der benötigten Pakete sollte automatisch gehen. Für Tests wäre ich dankbar da meine Internetverbindung die Geschwindigkeit von Buschtrommel nicht übersteigt)
Bisher nur für Ubuntu 10.10 getestet Parameter:
h : Zeigt diesen Hilfetext an" t : Verwenden von Tesseract (Standard: cuneiform)" : Tesseract: etwas besser bei reinem Text, langsamer" : Cuneiform: Besser bei formatiertem Text, schneller" e : benutzt Englische Sprache für die OCR" n : Kommandozeilenmodus" f : Keine Filterung von Sonderzeichen" o <Ausgabedatei> : (ohne buchocr.txt)"
Viel Spaß! buchocr.sh ⮷ 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254 | #!/bin/bash
#------------------------------------#
# Parameter Behandlung #
#------------------------------------#
FILE_PATH=
TIF_FILE="tmp.tif"
LANG="deu"
FORMAT="pbm"
ENDUNG="pbm"
TES=
GRAPHIC=true
FILTERING=true
OUT_FILE="buchocr.txt"
NZ='
'
#------------------------------------#
# Überprüfen der ext. Anwendunggen #
#------------------------------------#
CHECK=
checkdep(){
for QUELLE in $*; do
if [ "`whereis $QUELLE | grep /`" = "" ]; then
CHECK=true
fi
done
}
#------------------------------------#
# Installiert externe Abhängigkeiten #
#------------------------------------#
instdep(){
checkdep "$*"
if [ $CHECK ]; then
PAKETE=`echo $* | sed 's/tesseract/tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng/g' | sed \
's/convert/imagemagick/g' | sed 's/ddjvu/djvulibre-bin/g'`
if [ $GRAPHIC ]; then
if [ "`whereis gksudo | grep /`" != "" ]; then
gksudo apt-get -y install $PAKETE | zenity --progress --pulsate \
--auto-close --no-cancel \
--text "Zusätzliche Quellen installieren:\n $PAKETE" --title "$NAMEOF"
else
if [ "`whereis kdesudo | grep /`" != "" ]; then
kdesudo apt-get -y install $PAKETE | zenity --progress \
--pulsate --auto-close --no-cancel \
--text "Zusätzliche Quellen installieren:\n $PAKETE" --title "$NAMEOF"
else
zenity --warning --text "gksudo und kdesudo nicht gefunden\
Bitte ext. Quellen manuell intallieren oder \"book2mp3 -n\" (Konsole) verwenden"
exit 1
fi
fi
else
sudo apt-get install $PAKETE
fi
fi
CHECK=
checkdep "$*"
if [ $CHECK ]; then
if [ $GRAPHIC ]; then
zenity --warning --text "Bitte ext. Quellen: $* \n manuell intallieren"
else
echo "Bitte ext. Quellen: $* \n manuell intallieren"
fi
exit 1
fi
CHECK=
}
filter(){
#Doppelte Leerzeilen
sed -e '/^$/N;/\n$/D' scantmp/stc.txt |\
#Tabs und Leerzeichen am Zeilenende
sed -e 's/[ \t]*$//' |\
sed -e 's/.[¥Yy]\//W/g' |\
# je nach Zeilenläge ab einer bestimmlen Anzahl an Sonderzeichen Zeile entfernen
# kommt vorallem durch eingefügte Bilder
sed -e '/^.\{31,\}$/{s/^/#xx#/}' |\
sed -e '/^.\{16,30\}$/{s/^/#30#/}' |\
sed -e '/^.\{6,15\}$/{s/^/#15#/}' |\
sed -e '/^.\{1,5\}$/{s/^/#5#/}' |\
sed -e '/^#5#[^A-Za-z0-9\. -]\+.\+/d' |\
sed -e '/^#15#.*[^A-Za-z0-9\. -]\+.*[^A-Za-z0-9\. -]\+.*/d' |\
sed -e '/^#30#.*[^A-Za-z0-9\. -]\+.*[^A-Za-z0-9\. -]\+.*[^A-Za-z0-9\. -]\+.*[^A-Za-z0-9\. -]\+.*/d' |\
sed -e '/^#xx#.*[^A-Za-z0-9\. -]\+.*[^A-Za-z0-9\. -]\+.*[^A-Za-z0-9\. -]\+.*[^A-Za-z0-9\. -]\+.*[^A-Za-z0-9\. -]\+.*[^A-Za-z0-9\. -]\+.*/d' |\
sed -e 's/^#15#\|^#30#\|^#xx#\|^#5#//' |\
#Silbentrennung entfernen
sed -e :a -e '/-$/N; s/-\n//;ta' |\
#Wörter mit Sonderzeichen entfernen
sed -e 's/[A-Za-z]\+[^A-Za-z\. -]\+[A-Za-z]\+[^A-Za-z\. -]\+[A-Za-z]\+[^A-Za-z\. -]\+[A-Za-z]\+//g' |\
#Restliche Sonderzeichen löschen
sed -e 's/[^A-Za-z0-9äöüÄÜÖß !\.\,\?-]//g' |\
#Zeilen ohne Buchstaben löschen
sed -e 's/^[ 0-9!\.\,\?]*$//g' > scantmp/spc.txt
}
hilfe(){
echo " -h : Zeigt diesen Hilfetext an"
echo " -t : Verwenden von Tesseract (Standard: cuneiform)"
echo " : Tesseract: etwas besser bei reinem Text, langsamer"
echo " : Cuneiform: Besser bei formatiertem Text, schneller"
echo " -e : benutzt Englische Sprache für die OCR"
echo " -n : Kommandozeilenmodus"
echo " -f : Keine Filterung von Sonderzeichen"
echo " -o <Ausgabedatei> : (ohne buchocr.txt)"
}
#------------------------------------#
# Parameter Behandlung #
#------------------------------------#
while getopts no:thef opt
do
case "$opt" in
h) hilfe;exit 1;;
t) TES=true;;
e) LANG="eng";;
n) GRAPHIC=;;
f) FILTERING=;;
o) OUT_FILE="$OPTARG";;
\?) exit 1;;
esac
done
shift $(($OPTIND - 1))
while [ "$1" ]; do
SOURCE="$SOURCE$NZ$1"
shift
done
#------------------------------------#
# Parameter Behandlung Dateiauswahl #
#------------------------------------#
#IFS='
#'
TIMEST=`date +%s`
if [ $GRAPHIC ]; then
if [ "$SOURCE" = "" ]; then
if ! NAME=$( zenity --file-selection --multiple --separator=":" --title "Bilddatei"); then
exit
fi
SOURCE=`echo "$NAME" | tr ":" "\n"`
fi
else
if [ "$SOURCE" = "" ]; then
exit 1
fi
fi
#------------------------------------#
# spez. Buchtyp in Text umwandeln #
#------------------------------------#
#mkdir scantmp
if [ $TES ]; then
instdep convert ddjvu tesseract
FORMAT="tiff"
ENDUNG="tif"
else
if [ $LANG != "eng" ]; then
LANG="ger"
fi
instdep ddjvu cuneiform
FORMAT="pbm"
ENDUNG="pbm"
fi
IFS='
'
mkdir scantmp
echo "arbeitzvezeichnis von bild zu Buch Script" > scantmp/tmp_verzeichnis_readme.txt
for PAGE in $SOURCE; do
if [ -f "$PAGE" ]; then
ENDOFF=${PAGE##*.}
ENDOFFLOW=$( echo "$ENDOFF" | tr "'[:upper:]'" "'[:lower:]'" )
DIROF=$(dirname "$PAGE")
if [ "$DIROF" = "." ];then
DIROF="`pwd`"
fi
cd $DIROF
NAMEOF=$( basename "$PAGE" | sed 's/\.[^\.]\+$//g' )
PAGE="`echo "$DIROF/$NAMEOF.$ENDOFF"`"
if [ ! -f "$PAGE" ]; then
echo "keine gültige Datei"
else
if [ "$ENDOFFLOW" = "djvu" ]; then
ANZPAGES=`djvused "$PAGE" -e 'n'`
if [ $GRAPHIC ]; then
(
for DJVUPAGE in `seq 540 $ANZPAGES`; do
PROZ=$(echo "scale=0 ; $DJVUPAGE*100/$ANZPAGES" | bc)
echo "$PROZ"
echo "# djvu aufteilen Seite $DJVUPAGE von $ANZPAGES"
ddjvu -page=$DJVUPAGE -format=$FORMAT "$PAGE" scantmp/$TIMEST$NAMEOF$DJVUPAGE.$ENDUNG
echo "$DIROF/scantmp/$TIMEST$NAMEOF$DJVUPAGE.$ENDUNG" >> scantmp/list
done
) | zenity --progress --text "djvu aufteilen Seite 1 von $ANZPAGES"\
--title "$PAGE" --auto-close --percentage=0
else
echo "$PAGE wird in Teilbilder zerlegt ..."
for DJVUPAGE in `seq 540 $ANZPAGES`; do
ddjvu -page=$DJVUPAGE -format=$FORMAT "$PAGE" scantmp/$TIMEST$NAMEOF$DJVUPAGE.$ENDUNG
echo "$DIROF/scantmp/$TIMEST$NAMEOF$DJVUPAGE.$ENDUNG" >> scantmp/list
done
fi
else
echo "$PAGE" >> scantmp/list
fi
fi
fi
done
ANZPAGES=`cat scantmp/list | wc -l`
PAGENR=1
if [ $GRAPHIC ]; then
(
for PAGE in `cat scantmp/list`; do
echo "# Texterkennung Seite: $PAGENR von $ANZPAGES"
PROZ=$(echo "scale=0 ; $PAGENR*100/$ANZPAGES" | bc)
echo "$PROZ"
if [ $TES ]; then
if [ `echo -e $PAGE | grep "scantmp/$TIMEST"` ]; then
tesseract $PAGE scantmp/sc -l "$LANG"
else
convert -colorspace Gray -depth 4 -resample 300x300 "$PAGE" "scantmp/tmp.tif"
tesseract "scantmp/tmp.tif" scantmp/sc -l "$LANG"
fi
else
cuneiform -l "$LANG" -f smarttext -o scantmp/sc.txt $PAGE
fi
cat scantmp/sc.txt >> scantmp/stc.txt 2> /dev/null
PAGENR=`echo $(( $PAGENR+1 ))`
done
) | zenity --progress --text "djvu aufteilen Seite 1 von $ANZPAGES"\
--title "$PAGE" --auto-close --percentage=0
else
for PAGE in `cat scantmp/list`; do
if [ $TES ]; then
if [ `echo -e $PAGE | grep "scantmp/$TIMEST"` ]; then
tesseract $PAGE scantmp/sc -l "$LANG"
else
convert -colorspace Gray -depth 4 -resample 300x300 "$PAGE" "scantmp/tmp.tif"
tesseract "scantmp/tmp.tif" scantmp/sc -l "$LANG"
fi
else
cuneiform -l "$LANG" -f smarttext -o scantmp/sc.txt $PAGE
fi
cat scantmp/sc.txt >> scantmp/stc.txt 2> /dev/null
done
fi
if [ $FILTERING ]; then
filter
cp scantmp/spc.txt "$OUT_FILE"
else
cp scantmp/stc.txt "$OUT_FILE"
fi
rm scantmp/*
rmdir scantmp
#book2hb -t "$OUT_FILE"
#in Hörbuch umwandeln
#hierzu wird das book2hb script im Verzeichnis /usr/local/bin/ benötigt
#siehe http://wiki.ubuntuusers.de/Skripte/Book-To-MP3
exit
|
|
Manabe
(Themenstarter)
Anmeldungsdatum: 20. Januar 2010
Beiträge: 12
|
Hallo ich wollte einmal nachfragen: Erstens 1: - ich suche nach einem Weg, Lyrics in das Höhruch einzubinden, so dass man den eBook-Text mitlesen kann. Da die Untertitel-Dateien Text sind, ... denke ich wäre es möglich, jedoch ist es schwierig direkt während der Umwandlung. Ich benutze per Pipe: espeak -p 42 -s 150 -v mb-de6 -f spc.txt --stdout | oggenc -t "$NAMEOF" -a Hoerbuch -q 3 -o "$SOURCE.ogg" - nebenbei würde ich gern Untertitel/Lyrics einfügen (mp3 ebenfalls da, von vielen mobil mp3-playern nur mp3 benutzt wird) oggeng -L untenstützt .srt oder .lrc Format ein weiteres kleines Problem ist dann das nachträgliche Splitten ~300MB auf 15 min Stücke( kann aber auch umgangen werden).
Der Aufbau von srt ist ein einfaches txt-file: 1 000:00:00 Frodo: Soll ich den coolen Ring echt einschmelzen 2 000:02:00 Hau wech ..
Zweitens 2: Ein Weg benötigte Pakete graphisch zu installieren. Zur Zeit nutze ich: gksudo apt-get -y install $* | zenity --progress --pulsate \ ..... kdesudo apt-get -y install $* | zenity --progress ... und
dpkg -l || grep " xxxxxx " zum Prüfen bzw.: apt-get -y install $*\\zum intallieren das Problem ist ich möchte unabhängig vom Desktop sein, aber auch beim Start des Scripts außerhalb der Kommandozeile anzeigen, was zu installieren ist.
(z.B. mit ALT-F2 starten)
|
cornix
Anmeldungsdatum: 9. März 2007
Beiträge: 4763
Wohnort: Ringenberg
|
Manabe schrieb: Zweitens 2: Ein Weg benötigte Pakete graphisch zu installieren.
Würde ich komplett weglassen und stattdessen das Skript in Paketform bringen. Wie das in etwa funktioniert, steht unter Paketbau/Skripte verpacken. Gruß, cornix
|