Der Zweck dieses Skripts besteht darin, eine Datei zu lesen, das Audio zu extrahieren und ein Transkript auszudrucken, indem es über IBM Watson Speech to Text API ausgeführt wird. Mein Problem ist, wenn ich versuche, die Ausgabe aus dem Subprozess in eine Variable zu speichern und sie in die offene Funktion zu übergeben, wird es als binär gelesen. Was mache ich falsch? Jede Hilfe wäre willkommen!Zuweisen der Ausgabe des Unterprozesses zur Variablen
import sys
import re
import json
import requests
import subprocess
from subprocess import Popen, PIPE
fullVideo = sys.argv[1]
title = re.findall('^([^.]*).*', fullVideo)
title = str(title[0])
output = subprocess.Popen('ffmpeg -i ' + fullVideo + ' -vn -ab 128k ' + title + '.flac', shell = True, stdin=subprocess.PIPE).communicate()[0]
sfile= open(output, "rb")
response = requests.post("https://stream.watsonplatform.net/speech-to-text/api/v1/recognize",
auth=("USERNAME", "PASSWORD"),
headers = {"content-type": "audio/flac"},
data=sfile
)
print (json.loads(response.text))
Ich erhalte noch diese Störung: FileNotFoundError: [Errno 2] Datei oder Verzeichnis: b '' – Bryan
run ' 'ffmpeg -i' + fullVideo + '-vn -ab 128k' + Titel + ' .flac'' im Terminal oder 'print output', stellen Sie sicher, dass die ffmpeg-Ausgabe richtig ist. –
Im Idealfall würde ich es innerhalb des Skripts ausführen und nur das Video als Argument innerhalb des Terminals übergeben Wenn ich Ausgabe an die Konsole drucken, heißt es:/bin/sh: ffmpeg: Befehl nicht gefunden b ''. Ich glaube, dass der Prozess des Extrahierens des Audios aus dem Video nicht rechtzeitig abgeschlossen wird, weshalb die Ausgabe nur b "ist. Wie kann ich zulassen, dass der Prozess abgeschlossen wird, bevor er an die offene Funktion übergeben wird? – Bryan