ubuntuusers.de

Am Sonntag, 24.11, wird gegen 16 Uhr eine Inyoka-Version ausgerollt. Das Portal kann für ein paar Minuten nicht erreichbar sein.

pdf-Datei in mp3-Datei konvertieren (pdf2mp3)

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

rennau80

Avatar von rennau80

Anmeldungsdatum:
10. November 2009

Beiträge: Zähle...

Wohnort: Anchorage

Hi:

da ich während der mittagspause oft joggen gehe und dabei trotzdem ein wenig für die arbeit tun will (das schlechte gewissen...), habe ich ein kleines script geschrieben, das pdf dateien in mp3 umwandelt. Mit dem handy oder mp3-player kann man sich den kram dann perfekt unterwegs anhören. das klappt natürlich nur für text: formeln, tabellen und co kann man sich natürlich nicht anhören. Im netz gibt's zum thema viel sinnloses zeug, viel kommerzielle software und tote links oder linux-beiträge bei denen man sich alles selbst zusammenreimen muss und es dann einfach nicht funktionieren will. Das skript hier funktioniert bei mir einwandfrei, die stimme ist aber nicht die beste (trotzdem verständlich). Verbesserungsvorschläge sind willkommen!

Einfach eine datei mit z.b. dem namen pdf2mp3.py anlegen und mit folgendem inhalt füllen:

#!/usr/bin/python
# script converts pdf-file to mp3-file
#
# hannes rennau - january 2010
# made work on ubuntu karmic koala 9.10
# feel free to share


# LIST OF PACKAGES NEEDED:
# you need to install the following packages:
# sudo apt-get install python
# sudo apt-get install pdftotext
# sudo apt-get install festival
# sudo apt-get install festvox-rablpc16k
# sudo apt-get install lame

# HOW TO USE:
# just call script via: ./pdf2mp3.py yourfilename
# or:     ./pdf2mp3.py yourfilename.pdf

# in case you've lots of tables, equations or whatever else in your pdf,
# it's a nice think if you delete all strange symbol character stuff in
# in the txt-file and then run the script again but comment the line
# starting with os.popen('pdftotext...


import os,sys
import string

# get filenname
pdffile = sys.argv[1]
pdffile = pdffile[:-4] if pdffile[-4:]=='.pdf' else pdffile

if os.path.isfile(str(pdffile) + '.pdf'):
    print 'converting pdf to ascii...'
    os.popen('pdftotext ' + str(pdffile) + '.pdf ' + str(pdffile) + '.txt')
    print 'start converting ascii to wav...'
    os.popen('cat ' + str(pdffile) + '.txt\
           |sed \'s/[^a-zA-Z .,!?]//g\'|text2wave -o ' + str(pdffile) + '.wav')
    print 'converting to mp3...'
    os.popen('lame -f ' + str(pdffile) + '.wav ' + str(pdffile) + '.mp3')
    os.popen('rm -f ' + str(pdffile) + '.wav')
    print 'finished. don\'t forget to delete txt file if you don\'t need it'
else:
    print 'file does not exist'

# that's it. have fun!!! :)

anschließend die Datei ausführbar machen mit:

chmod +x pdf2mp3.py

und dann systemweit verfügbar machen mit:

sudo cp pdf2mp3.py /usr/bin/

wenn es nach /usr/bin kopiert wurde, könnt ihr das script von jedem verzeichnis aus aufrufen:

pdf2mp3.py yourfilename

oder:

pdf2mp3.py yourfilename.pdf

have fun!!

PS: Zur info, die stimme in dem script is english, die deutsche stimme sollte man hier runterladen können: http://cslu.cse.ogi.edu/tts/download/ Falls sie jemand benötigt (nicht so abwegig hier im deutschen ubuntu-forum), kann hoffentlich jemand posten wie man sie installiert und dann auf default setzt.

Moderiert von redknight:

Ins Projektforum verschoben. Viel Spaß beim weiterbearbeiten und danke für das Veröffentlichen deiner Lösung

mrkramps Team-Icon

Avatar von mrkramps

Anmeldungsdatum:
10. Oktober 2006

Beiträge: 5523

Wohnort: south central EL

Eh, krasse Scheisse... Danke, dass du uns an deiner Errungenschaft teilhaben lässt 👍

Wäre vielleicht noch sinnvoll, wenn du eine Lizenz und deine Email-Adresse in den Header der Datei schreibst. Bei GPL-Lizenzierung sieht das meist ungefähr so aus:

# ###################################################
# <Name Of Programm>
#
# Copyright (C) 2010 <Your Name>
# <youremail@provider.foo>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the
# Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
# ###################################################

Mag man jetzt drüber streiten, ob das Sinn macht, aber ich persönlich finde, man sollte diese Möglichkeit bei jeder Veröffentlichung dieser Art nutzen. Im Vergleich zu einem Script, dass nur für einen ganz bestimmten Anwendungsfall geschrieben wurde, hat das hier einen weit allgemeingültigeren Programmcharakter.

colombo1980

Avatar von colombo1980

Anmeldungsdatum:
23. September 2008

Beiträge: 1286

cool. Danke! 👍 Aber gibt es pdftotext eigentlich erst ab Karmic?

mrkramps Team-Icon

Avatar von mrkramps

Anmeldungsdatum:
10. Oktober 2006

Beiträge: 5523

Wohnort: south central EL

Ah, da hätten wir einen kleinen Fehler. pdftotext ist ein Programm, dass aus dem Paket poppler-utils stammt. Außerdem sehe ich gerade, dass die Angabe der zuinstallierenden Abhängigkeiten nicht unbedingt optimal gelöst ist. Das würde besser in eine Zeile gehen, damit man das so direkt in den Terminal kopieren kann:

sudo apt-get install python poppler-utils festival festvox-rablpc16k lame


Edit: Danke, colombo1980... Korrigiert 😬

colombo1980

Avatar von colombo1980

Anmeldungsdatum:
23. September 2008

Beiträge: 1286

dauerflucher schrieb:

Ah, da hätten wir einen kleinen Fehler. pdftotext ist ein Programm, dass aus dem Paket poppler-utils stammt. Außerdem sehe ich gerade, dass die Angabe der zuinstallierenden Abhängigkeiten nicht unbedingt optimal gelöst ist. Das würde besser in eine Zeile gehen, damit man das so direkt in den Terminal kopieren kann:

sudo apt-get install python poppler-utils festival festvox-rablepc16k lame

ein e zuviel 😉

sudo apt-get install python poppler-utils festival festvox-rablpc16k lame

rennau80

(Themenstarter)
Avatar von rennau80

Anmeldungsdatum:
10. November 2009

Beiträge: 23

Wohnort: Anchorage

sehr schön, danke für die tips, habe ich mal eingearbeitet. Habe das progrämmchen noch ein wenig modifiziert:

Es gibt nun die option auch .txt und .dat dateien in mp3 umzuwandeln:

pdf2mp3.py yourfilename.dat

oder

pdf2mp3.py yourfilename.txt

oder

pdf2mp3.py yourfilename.pdf
pdf2mp3.py (3.0 KiB)
program convert pdf file or ascii file (.dat, .txt) into a mp3 audio file
Download pdf2mp3.py

mrkramps Team-Icon

Avatar von mrkramps

Anmeldungsdatum:
10. Oktober 2006

Beiträge: 5523

Wohnort: south central EL

Super. Danke, rennau80.

ostrixner

Anmeldungsdatum:
3. Mai 2007

Beiträge: Zähle...

Hallo, das Tool ist ja prima von der Idee, aber bei deutschen Texten als PDF mit elnglischsprachigen Buchstabierer macht das keinen Spass.

Hat jemand vielleicht das schon mit einer deutsche Stimme hingekriegt klappt bei mir irgendwie nicht. ubuntu 10.04

Grüße oliver

rennau80

(Themenstarter)
Avatar von rennau80

Anmeldungsdatum:
10. November 2009

Beiträge: 23

Wohnort: Anchorage

komme gerade nicht zum coden, aber eine möglichkeit wäre das tool espeak in deutscher sprache zu verwenden und zwar aufruf in der shell via:

espeak -vde -f text.txt -w audio.wav

wobei text.txt die ascii datei mit dem text ist und audio.wav die datei für den audio-player. ich werde das beizeiten mal ins script einbauen, so dass es über:

pdf2mp3.py -v de ...

(für deutsche stimme)

>>>pdf2mp3.py -v en

... (für englische stimme) aufgerufen werden kann.

werde das diese woche mal zusammenbasten und ein kleines howto dazu im forum schreiben. ☺

rennau80

(Themenstarter)
Avatar von rennau80

Anmeldungsdatum:
10. November 2009

Beiträge: 23

Wohnort: Anchorage

nun kann man verschiedene sprachen verwenden, die kommandozeile sieht auch etwas anders aus, Beispiele:

./pdf2mp3 -v en -f input.pdf -o output.mp3  (pdf->mp3 engische sprache)
./pdf2mp3 -v de -f input.pdf -o output.mp3  (pdf->mp3 deutsche sprache)

oder aber auch

./pdf2mp3 -v it -f input.txt -o output.mp3  (txt->mp3 italienisch)
./pdf2mp3 -v fr -f input.dat -o output.wav  (dat->wav französisch)

da espeak im hintergrund verwendet wird, hier nur eine kleine auswahl der nun verfügbaren sprachen: afrikaans (af), bosnian (bs), danish (da), spanish (es), french (fr), italian (it), norwegian (no), swedish (sv), turkish (tr), Mandarin (zh), ...

neue notwendige pakete sind espeak und wavebreaker:

sudo apt-get install python poppler-utils festival festvox-rablpc16k lame espeak wavbreaker
pdf2mp3 (6.5 KiB)
Download pdf2mp3

fofolokolipalu

Anmeldungsdatum:
1. April 2007

Beiträge: 811

Auch wenn ich da gerade keine Verwendung für habe: Sehr cool, dass du uns daran teilhaben lässt.

Spirit of Ubuntu 😉

btw: In meinen Augen passt der Thread eher ins Projekte-Forum.

mrkramps Team-Icon

Avatar von mrkramps

Anmeldungsdatum:
10. Oktober 2006

Beiträge: 5523

Wohnort: south central EL

Yay, von mir nochmals ein standesgemäßes Dankeschön für dein Engagement.

Schreibst du als nächstes dann noch ein Frontend, damit ich das Programm meiner Mama verständlich zugänglich machen kann? 😬

rennau80

(Themenstarter)
Avatar von rennau80

Anmeldungsdatum:
10. November 2009

Beiträge: 23

Wohnort: Anchorage

dauerflucher schrieb:

Yay, von mir nochmals ein standesgemäßes Dankeschön für dein Engagement.

Schreibst du als nächstes dann noch ein Frontend, damit ich das Programm meiner Mama verständlich zugänglich machen kann? 😬

hehe, ne GUI wär schon was schönes, fürwahr...

zephir

Avatar von zephir

Anmeldungsdatum:
20. März 2006

Beiträge: 2760

Danke für das veröffentlichen des skriptes. Funktioniert super (englisch und deutsch), auch wenn dieses automatische Vorlesen sehr gewöhnungsbedürftig ist.

Gruß zephir

rennau80

(Themenstarter)
Avatar von rennau80

Anmeldungsdatum:
10. November 2009

Beiträge: 23

Wohnort: Anchorage

es sollte sich noch die geschwindigkeit einstellen lassen (mittels espeak) oder auch andere optionen, vielleicht ist es dann besser verständlich. (?)

unter espeak gibt es folgende optionen in dieser richtung:

-a <integer>
           Amplitude, 0 to 200, default is 100
-g <integer>
           Word gap. Pause between words, units of 10mS at the default speed
-p <integer>
           Pitch adjustment, 0 to 99, default is 50
-s <integer>
           Speed in words per minute, 80 to 390, default is 170

dazu einfach an Zeile 129 im Code 'espeak' durch z.B. 'espeak -s 140' ersetzen damit es wirksam wird.

Antworten |