Skript für Ansagen in mp3-Dateien

leider kenne ich mich mit Pyton gar nicht aus.
Ich habe mir ein Google api key erstell und dann anhand dieser Anleitung http://www.py2exe.org/index.cgi/Tutorial eine exe Datei erstellt.
Wenn ich diese jetzt mit dem Befehl .\tonuino.exe -i C:\Python27\15\ -o C:\Python27\15a\ --lang de --google-key {key} ausführe bekomme ich nur folgendes angezeigt:

@Til kennst du dich auch mit Windows aus bzw weißt du oder jmd anderes wie ich aus dem Pyton script eine laufende exe bekomme?

Deine exe-Lösung scheint soweit zu funktionieren. Falls das noch jemand unter Windows probieren will, würde ich jedoch eher dazu raten, es mit cygwin zu probieren.

Sieht so aus, als käme von Google eine Fehlermeldung.

Füge mal im Code vor die Zeile mit mp3Data = base64.... folgenden print-Befehl hinzu (die erste Zeile ist neu, die zweite gehört schon zum Code):

print('responseJson: {}'.format(responseJson))
mp3Data = base64.b64decode(responseJson['audioContent'])

Dann poste davon die Ausgabe.

1 „Gefällt mir“

danke für die schnelle Antwort.
Nachdem ich die Zeile eingefügt habe, habe ich die Meldung bekommen dass die google API noch nicht deaktiviert war. Habe daher nouch die cloude text to speach api aktiviert.
Danach habe ich eine lange kryptische Ausgabe bekomem, die hiermit anfängt:


Wollte jetzt nicht alles Posten, weil ich denke, dass es nicht so wichtig ist.
Zudem hat Windows diese Meldung gebracht:

cygwin habe ich installiert, allerdings bekomme ich dort diese Meldung:

OK, dann war das das Problem. Schade, diese Ausgabe wäre die interessante gewesen. Damit hätte ich eine bessere Fehlerausgabe bauen können.

Das bedeutet, dass es prinzipiell funktioniert. Der Teil nach audioContent sind die MP3-Daten. D.h. das Skript kann schonmal die Ansage erzeugen.

Das heißt, dass das Skript die Ansage nicht zur MP3-Datei hinzufügen konnte. Hast Du ffmpeg installiert?

Das bedeutet, dass cygwin kein python am erwarteten Pfad findet. Probiere mal das Skript nicht direkt aufzurufen, sondern mit python davor (ich passe mal meine Beschreibung oben an). Also z.B. so:

python add_lead_in_messages.py -i '04_Benjamin Blümchen' -o /Volumes/TonUINO/04 --google-key=123456 --add-numbering

Die Fehlermeldung war sehr aussagekräftig. (API nicht aktiviert, um sie zu aktivieren gehe auf URL):
responseJson: {u'error': {u'status': u'PERMISSION_DENIED', u'message': u'Cloud Text-to-Speech API has not been used in project xxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/texttospeech.googleapis.com/overview?project=xxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.', u'code': 403, u'details': [{u'@type': u'type.googleapis.com/google.rpc.Help', u'links': [{u'url': u'https://console.developers.google.com/apis/api/texttospeech.googleapis.com/overview?project=xxx', u'description': u'Google developers console API activation'}]}]}}

Ich habe es jetzt unter Windows mit der exe zum laufen bekommen. Du hattest recht, ich hatte ffmpeg nicht installiert. Vielen Dank!!!
Ich werde mich spätestens morgen daran machen und eine Anleitung für die Windowsnutzer machen.

Anleitung um das Script vom Til unter Windows zu nutzen
Am besten lest ihr euch erstmal alles durch bevor ihr anfangt.
Ich hoffe ich habe nichts vergessen:

Unter https://cloud.google.com/text-to-speech/ einen Testaccount anlegen.
Ein neues Projekt anlegen und links auf APi & Dienste auf Dashboard
APIs und dienste aktivieren anklicken und die Cloud Text to Speach API aktivieren (Im Zweifel beide aktivieren)
Links auf Anmeldedaten --> Anmeldedaten erstellen --> API-Schlüssel einen schlüssel erstellen und notieren

Python herunterladen: https://www.python.org/downloads/
“Add Python to Path” anhaken
Ich habe als Installationspfad c:\python genommen

Download ffmpeg https://ffmpeg.zeranoe.com/builds/
Installationsanleitung: https://de.wikihow.com/FFmpeg-unter-Windows-installieren
Til’s add_lead_in_messages.py unter https://github.com/xfjx/TonUINO/tree/DEV (Später evtl unter Master) herunterladen und im Pythonordner speichern.

exe erzeugen (Quelle: http://www.py2exe.org/index.cgi/Tutorial)
mit Notepad den folgenden Code als setup.py im gleichen Verzeichnis wie Til’s py-Datei speichern:

from distutils.core import setup
import py2exe

setup(console=['add_lead_in_messages.py'])

Powershell öffnen
cd c:\python eingeben und enter drücken
pip install py2exe einfügen und enter drücken
python setup.py install einfügen und enter drücken

Jetzt sollte unter c:\python\dist eine add_lead_in_messages.exe sein.

Powershell öffnen

cd c:\python\dist eingeben und enter drücken
Mit folgendem Befehl die MP3’s erzeugen:

.\add_lead_in_messages.exe -i C:\"Quellordner" -o C:\"Zielordner" --lang de --google-key 123456

Wenn die MP3’s noch nicht nummeriert sind, könnt ihr noch --add-numbering anfügen, dadurch werden sie automatisch nummeriert.

4 „Gefällt mir“

Vielen Dank für die Anleitung.

Wie gesagt: Der Schritt “Exe erzeugen” ist wahrscheinlich überflüssig. Wenn Du in der Powershell python setup.py ausführen kannst, dann kannst du genauso einfach python add_lead_in_messages.py ausführen.

Evtl. ist auch cygwin überflüssig. D.h. Python und ffmpeg sollten ausreichen.

1 „Gefällt mir“

Hattet Ihr das hier eigentlich gesehen?

@Dennis Das von dir verlinkte Skript erzeugt die Ansagen für die Ordner advert und mp3. Hier geht es ja darum in vorhandene Hörspiele ein Titelansage einzubauen.

@stephan ja, das habe ich gesehen, es ist aber wohl die gleiche Basis, daher der kleine Hinweis.

Ich hatte tatsächlich überlegt, ob ich das Skript noch erweitern sollte. Ich finde die Idee mit den Ansagen echt gut. Aber das python-skript läuft jetzt ja soweit.

Wenn du es dennoch als Powershell realisieren würdest, wäre das nochmal ein Schritt einfacher als mit Python, da dann kein zusätzliches Programm installiert werden muss.

ffmpeg benötigst du auch wenn das Skript über die Powershell läuft. Aber ja, für die Freunde von Windows macht es das dann vielleicht noch ein Stück einfacher.

Ich wollte mich heute daran machen, meine ganzen Dateien damit zu bearbeiten.
Habt ihr Linux User auch das Problem, dass die letzten 2-4 Buchstaben nicht mit gesprochen werden?
Bsp: Dateiname 001_Conni_bekommt_eine_Katze.mp3
Die TTS sagt aber nur "Conni bekommt eine Kat
Oder
011_Conni_im_Krankenhaus.mp3 = Conni im Kranken

Woran kann das liegen?
Bei mir spielt es keine Rolle ob ich die Python Datei direkt oder die Exe ausführe

Ich habe es auch unter Linux (und mit Google TTS) gemacht und hatte das Problem nicht. Meine Dateinamen hatten keine vorangestellte Nummer und Leerzeichen statt Unterstriche, also so: Conni bekommt eine Katze.mp3.

Hmm macht bei mir keinen Unterschied.
hab auch mal 3 Leerzeichen vor das .mp3 gesetzt. Ändert auch nichts.
Kann man irgendwie eine pause zwischen tts und start der MP3 generieren?

Benutzt ihr das Skript aus Thorstens Repo oder das aus Stephans Repo? In Stephans Repo habe ich das Ganze noch etwas weiterentwickelt. Das Problem ist, dass sich in Thorstens Version die Samplerate ändern kann, was manche Player nicht vertragen.

Außerdem wäre noch interessant, wie die Konsolenausgabe aussieht. Dort schreibt das Skript den Text raus, der ins Text-to-Speech gesteckt wird.

Eine Pause kannst Du mit einem Gedankenstrich erzeugen (also ein Minuszeichen).

Ich habe das aus Thorstens genommen.
Wenn ich das vom Stephans Repo nehme bekomme ich als Fehlermedung:

Traceback (most recent call last):
File “C:\Python27\add_lead_in_messages.py”, line 7, in
import argparse, base64, json, os, re, subprocess, sys, text_to_speech
ImportError: No module named text_to_speech

Ein oder mehr minus am ende macht auch kein Unterschied.

Du musst das Skript in dem Verzeichnis ausführen, in dem es liegt (und wo auch die text_to_speech.py liegt).

Hmm, wahrscheinlich werden Pausen am Ende nicht beachtet. Ich hab’s bisher nur mitten im Text probiert. Ansonsten fällt mir kein einfacher Weg ein, wie Du eine Pause erzeugen kannst.

das war mir nicht klar. Jetzt funktioniert es.
Die Titel werden nun auch vollständig vorgelesen.
Vielen Dank für die Hilfe Til!