2016-07-20 15 views
0

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)) 

Antwort

0

1.Run 'ffmpeg -i' + fullVideo + '-vn -ab 128k' + Titel + '.flac' für sicherzustellen, dass es richtig ist.

2.Wenn es richtig ist, sehen Sie, dass die konvertierte Datei existiert.

3.stdin ist Standardeingabe, stdout ist Standardausgabe. Also benutze das Argument stdout in Popen.

output = subprocess.Popen('ffmpeg -i ' + fullVideo + ' -vn -ab 128k ' + title + '.flac', shell = True, stdout=subprocess.PIPE).communicate()[0] 
sfile= open(output, "rb") 
+0

Ich erhalte noch diese Störung: FileNotFoundError: [Errno 2] Datei oder Verzeichnis: b '' – Bryan

+0

run ' 'ffmpeg -i' + fullVideo + '-vn -ab 128k' + Titel + ' .flac'' im Terminal oder 'print output', stellen Sie sicher, dass die ffmpeg-Ausgabe richtig ist. –

+0

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

Verwandte Themen