staging.inyokaproject.org

[BookToMP3]Hörbücher selbst erstellen

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |
Dieses Thema ist die Diskussion des Artikels Skripte/Book-To-MP3.

Heinrich_Schwietering Team-Icon

Wikiteam
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11335

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 Team-Icon

Wikiteam
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11335

Hi!

Scheint verlassen zu sein; Manabe hatte ich vor 4 Wochen angeschrieben...

so long
hank

rennau80

Avatar von rennau80

Anmeldungsdatum:
10. November 2009

Beiträge: 23

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 Team-Icon

Wikiteam
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11335

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 Team-Icon

Wikiteam
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11335

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 Team-Icon

Wikiteam
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11335

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 Team-Icon

Wikiteam
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11335

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 Team-Icon

Wikiteam
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11335

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 Team-Icon

Avatar von cornix

Anmeldungsdatum:
9. März 2007

Beiträge: 4763

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 Team-Icon

Wikiteam
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11335

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: 12

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 Team-Icon

Wikiteam
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11335

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 Team-Icon

Avatar von cornix

Anmeldungsdatum:
9. März 2007

Beiträge: 4763

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