2016-07-20 17 views
0

に割り当てます。このスクリプトの目的は、IBM WatsonスピーチからテキストAPIを使用してファイルを読み取り、オーディオを抽出し、トランスクリプトを出力することです。私の問題は、サブプロセスからの出力を変数に保存し、それをオープン関数に渡そうとするときです。バイナリとして読み込みます。私は間違って何をしていますか?どんな助けもありがとう!サブプロセスの出力を変数

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

答えて

0

1.Run 'ffmpeg -i' + fullVideo + '-vn -ab 128k' + title + '.flac'が正しいことを確認します。

2.正しい場合は、変換されたファイルが存在することを確認してください。

3.stdinは標準入力、stdoutは標準出力です。 Popenではstdout引数を使用してください。

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

私はまだ、このエラーが発生します:FileNotFoundError:[errnoを2]いいえそのようなファイルまたはディレクトリ:B '' – Bryan

+0

実行 ' 'ffmpegの-i' + fullVideo + '-vn -ab 128kの' +タイトル+ 'ターミナルや 'print output'に' .flac 'を追加すると、ffmpegの出力が正しいことが保証されます。 –

+0

理想的には、私はスクリプト内でそれを実行し、ターミナル内の引数としてビデオを渡したいと思います。出力をコンソールに出力すると、/ bin/sh:ffmpeg:コマンドが見つかりませんでした。私は、ビデオからオーディオを抽出するプロセスが時間内に完了していないと考えています。なぜ出力はちょうどbであるのですか?開いている関数に渡す前に、プロセスが完了するまで待機させる方法は? – Bryan

関連する問題