2017-02-06 8 views
0

辞書キーがあるかどうか確認したい:"data["streams"][1]["codec_name"]"キーが2つあるかどうかをチェックし、 "No Audio"を表示しない場合はチェックする。実際にはオーディオがない場合は、データ["streams"] [1]が欠落しています。現在、オーディオは存在していても、スクリプトは常にNo Audioを返すようになっています。私が間違っていることは何ですか?あなたはこのFFMPEG python辞書キーが存在するかどうかを調べる

if 'data["streams"][1]["codec_name"]' in data: 

を行うとdataが、それはそれが表示されることはありませんしませんdata["streams"][1]["codec_name"]と呼ばれるキーを持っている場合

#!/usr/bin/env python 
    import subprocess 
    import json 

    input_file = raw_input("Please enter the input file path: ") 

    returned_data = subprocess.check_output(['ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_format', '-show_streams', input_file]) 
    data = json.loads(returned_data.decode('utf-8')) 
    print "==========================Audio=============================" 
    if 'data["streams"][1]["codec_name"]' in data: 
      print "Codec: %s" %(data["streams"][1]["codec_name"]) 
      print "Sample Rate: %.3f KHz" %(int(data["streams"][1]["sample_rate"])/1000) 
      print "Bitrate: %d Kbps" %(int(data["streams"][1]["bit_rate"])/1000) 
    else: 
      print "NO AUDIO" 
+0

文字列が 'data'にあるかどうかを確認しています。データの中でdata [" streams "] [" codec_name "]を実行する必要があります:' –

+0

@Chris_Rands : ** TypeError:unhashableタイプ: 'dict' **エラー –

答えて

0

あなたは求めています。また、あなたが他の辞書内のリストの中に辞書のキーを参照しようとしている、これを行うの神託の方法は次のようになります。これがないと、その変数にアクセスしようとすると、

try: 
    codec = data["streams"][1]["codec_name"] 
    # print your information here 
except (KeyError, IndexError): 
    print('no audio') 

です。キーcodec_nameまたはstreamsが存在しない場合はKeyErrorをキャッチし、[1]が存在しない場合はIndexErrorをキャッチします。

しかし、私はこれを行う別の方法を提案するでしょう。あなたの目標は、ファイルにオーディオがある場合はオーディオ情報を印刷し、オーディオがない場合はno audioを印刷することです。私がちょうど与えた例の問題は、オーディオがメディアファイルの第2のストリームである場合にのみあなたのために働くということです。オーディオは通常、ビデオの後に来ますが、時には順序が乱れ、時には複数のオーディオストリームが存在することもありますので、各ストリームをループし、オーディオストリームかどうかを確認してからオーディオ情報。あなたが本当にのみ1つのオーディオストリームからのデータが必要な場合、私はまだループを行うだろう、

audio_streams = 0 

if 'streams' in data: 
    for stream in streams: 
     if stream['codec_type'] == 'audio': 
      # print your info here (I'm abbreviating) 
      print(stream['codec_name']) 

if audio_streams == 0: 
    print('no audio...') 

いますが、情報を印刷した後break文を置く:これは関係なく、そのための1つの以上のオーディオストリームが表示されます。

関連する問題