4 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
我相信我找到了通過傳入以下選項(xiàng)對輸出為1
(對于True
,有聲音)或0
(對于False
,沒有聲音)的任何視頻文件進(jìn)行排序的nb_streams
選項(xiàng)format
。
def has_audio(filename):
? ? result = subprocess.run(["ffprobe", "-v", "error", "-show_entries",
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"format=nb_streams", "-of",
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"default=noprint_wrappers=1:nokey=1", filename],
? ? ? ? stdout=subprocess.PIPE,
? ? ? ? stderr=subprocess.STDOUT)
? ? return (int(result.stdout) -1)
該代碼實(shí)際上返回流的數(shù)量。2對于兩個(gè)流,視頻和音頻,或1僅視頻。我減去一是因?yàn)槲蚁胍紶柎鸢浮?/p>
這可能不應(yīng)該用于對純音頻文件進(jìn)行排序。盡管我想知道1對于視頻以及2音頻和視頻來說,對于已知的視頻文件是否總是如此。一個(gè)視頻文件可以有 3 個(gè)或更多流嗎?

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊
基于之前的答案,這將檢查每個(gè)流以查看是否至少有一個(gè)具有“音頻”類型編解碼器。請注意,音頻流可能存在但無聲,在這種情況下,該值仍將返回 True。
from subprocess import check_output
import json
def has_audio_streams(file_path):
command = ['ffprobe', '-show_streams',
'-print_format', 'json', file_path]
output = check_output(command)
parsed = json.loads(output)
streams = parsed['streams']
audio_streams = list(filter((lambda x: x['codec_type'] == 'audio'), streams))
return len(audio_streams) > 0

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊
可以使用pymediainfo模塊來實(shí)現(xiàn)這一點(diǎn)。
def has_audio(p):
from pymediainfo import MediaInfo
fileInfo = MediaInfo.parse(p)
return any([track.track_type == 'Audio' for track in fileInfo.tracks])

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
答案并不太難。
蘋果
pip3 install ffprobe
視窗
pip install ffprobe
操作系統(tǒng)
pip install ffprobe
用法
ffprobe -show_streams -print_format json input.mov
應(yīng)該管用。
添加回答
舉報(bào)