您可以使用FFProbe識別文件類型,但您很可能需要維護您知道如何在應用程序中處理的文件格式數據庫。但是,這裏有一個快速的片斷:
import json, subprocess
file_name = u'/path/to/some/file.mp3'
command=["/path/to/ffmpeg/bin/ffprobe",
'-print_format', 'json',
'-v', 'quiet',
'-show_error',
'-show_format',
#'-show_frames',
#'-show_packets',
'-show_streams',
'-show_program_version',
'-show_library_versions',
'-show_versions',
'-show_private_data',
file_name]
process_data=subprocess.Popen(command, stderr = subprocess.PIPE, stdout = subprocess.PIPE)
returncode = process_data.wait()
json_result=json.loads(process_data.stdout.read())
print json_result.get(u'format')
這個函數會返回一個字典,看起來是這樣的:
"format": {
"filename": "/path/to/some/file.mp3",
"nb_streams": 1,
"format_name": "mp3",
"format_long_name": "MP2/3 (MPEG audio layer 2/3)",
"start_time": "0.000000",
"duration": "12.416125",
"size": "198658",
"bit_rate": "128000",
"tags": {
"title": "Test of MP3 File ",
"artist": "Me ",
"album": "Me ",
"date": "2006",
"comment": "test ",
"track": "1",
"genre": "Other"
}
從這個字典,你可以提取該文件的「格式」,只知道該文件的路徑!希望這可以幫助。
很多時候,我甚至不知道它已經收到後的文件的類型,我沒有爲它的擴展。 –
我可以假設,如果FFMPEG不知道它是什麼類型的文件,那麼當試圖分析文件時'ffprobe'會失敗? –
如果它不知道它是什麼類型的文件,那麼是的。但是,ffprobe甚至可以將.txt文件識別爲'u'format_long_name':u'Tele-typewriter'。如果它不能識別文件,'print json_result.get(u'format')'的結果將是'None',並且在json_result中將存在一個名爲'error'的新鍵。 – VooDooNOFX