第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在Python中檢查視頻是否有聲音?

如何在Python中檢查視頻是否有聲音?

明月笑刀無情 2023-10-18 15:30:51
我只想知道True視頻是否有音頻或False沒有音頻。我覺得使用子流程就快到了。我獲取有關(guān)正在運(yùn)行的視頻文件的信息ffprobe并將結(jié)果拆分為列表。我嘗試匹配列表中包含或不包含音頻的字符串,但這并沒有給出一致的結(jié)果。from subprocess import Popen, PIPEimport subprocessb = '/path/to/mp4''0:1' in str(subprocess.run(['ffprobe', b], stdout=PIPE, stderr=PIPE).stderr.split()[-20])  上面的行檢查視頻文件中從最后一行算起的第 20 行是否有第二個(gè)流。就像我說的,并不總是一致的。我只是在請求或解析我從中得到的內(nèi)容時(shí)遇到困難ffmprobe。這是ffprobe從最后一項(xiàng)返回的所有內(nèi)容,而不僅僅是第 20 項(xiàng)。b = '/path/to/mp4'subprocess.run(['ffprobe', b], stdout=PIPE, stderr=PIPE).stderr.split()  返回...我還嘗試將此函數(shù)從返回視頻文件的持續(xù)時(shí)間的函數(shù)修改為返回True或False返回音頻的函數(shù),因?yàn)檫@可能是一種不太簡單的獲取布爾值的方法。我有點(diǎn)無法嘗試使用這些不同的選項(xiàng)。def get_length(filename):    result = subprocess.run(["ffprobe", "-v", "error", "-show_entries",                             "format=duration", "-of",                             "default=noprint_wrappers=1:nokey=1", filename],        stdout=subprocess.PIPE,        stderr=subprocess.STDOUT)    return float(result.stdout)
查看完整描述

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è)或更多流嗎?


查看完整回答
反對 回復(fù) 2023-10-18
?
搖曳的薔薇

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


查看完整回答
反對 回復(fù) 2023-10-18
?
慕俠2389804

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


查看完整回答
反對 回復(fù) 2023-10-18
?
慕碼人2483693

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)該管用。


查看完整回答
反對 回復(fù) 2023-10-18
  • 4 回答
  • 0 關(guān)注
  • 418 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號