2016-01-17 107 views
2

所以我一直在爲Discordapp製作音樂播放器。事情是我想顯示歌曲標題和歌手藝術家。我該怎麼辦只從ffprobe輸出獲取歌曲標題和歌曲藝術家

player = voice_stream.create_ffmpeg_player('./audio_library/1.mp3') 

      # FFProbing for info 
p = sp.Popen(['ffprobe', '-v', 'quiet', '-print_format', 'json=compact=1', '-show_format', 
       './audio_library/1.mp3'], stdout=sp.PIPE, stderr=sp.PIPE) 
op = p.communicate() 
# a = dict(op) 
# tit = a['title'] 
# art = a['artist'] 
# print(tit + '\n' + art) 
ops = str(op) 
print('op :- ' + ops) 
opsn = re.sub("\r\n", "", ops) 
print('opsn :- ' + opsn) 

謝謝。另外如果可能的話,我可以知道如何將這些數據轉換爲json格式。我試圖使用json.loads(op)但我有錯誤說這是一個元組。

我的電流輸出是這樣的: -

op :- (b'{\r\n "format": { "filename": "./audio_library/1.mp3", "nb_streams": 1, "nb_programs": 0, "format_name": "mp3", "format_long_name": "MP2/3 (MPEG audio layer 2/3)", "start_time": "0.000000", "duration": "351.190200", "size": "14062151", "bit_rate": "320331", "probe_score": 50,\r\n  "tags": { "title": "Rescue Me (Sigma Remix)", "artist": "Skepta", "encoded_by": "Lavf52.31.0" } }\r\n}\r\n', b'') 


opsn :- (b'{\r\n "format": { "filename": "./audio_library/1.mp3", "nb_streams": 1, "nb_programs": 0, "format_name": "mp3", "format_long_name": "MP2/3 (MPEG audio layer 2/3)", "start_time": "0.000000", "duration": "351.190200", "size": "14062151", "bit_rate": "320331", "probe_score": 50,\r\n  "tags": { "title": "Rescue Me (Sigma Remix)", "artist": "Skepta", "encoded_by": "Lavf52.31.0" } }\r\n}\r\n', b'') 

回答

1

你需要得到的元組的第一項,解碼字節,解析JSON:

import json 
import pprint 

op_json = json.loads(op[0].decode('utf-8')) 

title = op_json['format']['tags']['title'] 
artist = op_json['format']['tags']['artist'] 
print('title:', title) 
print('artist:', artist) 
print() 
pprint.pprint(op_json) 

打印:

title: Rescue Me (Sigma Remix) 
artist: Skepta 

{'format': {'bit_rate': '320331', 
      'duration': '351.190200', 
      'filename': './audio_library/1.mp3', 
      'format_long_name': 'MP2/3 (MPEG audio layer 2/3)', 
      'format_name': 'mp3', 
      'nb_programs': 0, 
      'nb_streams': 1, 
      'probe_score': 50, 
      'size': '14062151', 
      'start_time': '0.000000', 
      'tags': {'artist': 'Skepta', 
        'encoded_by': 'Lavf52.31.0', 
        'title': 'Rescue Me (Sigma Remix)'}}} 
+0

應該是op_json = json.loads(op [0] .decode('utf-8'))。其他則是完美的。謝謝。 – lap00zza

+0

已修復。偉大的,它幫助。 –

相關問題