Python如何對(duì)音視頻文件進(jìn)行解析詳解
前言
作為一個(gè)學(xué)完P(guān)ython基礎(chǔ)知識(shí)的測(cè)試,終于可以像RD們自己寫腳本處理任何場(chǎng)景吧,如何優(yōu)雅地寫出來代碼,接下來開啟進(jìn)階版的Python。
在我們工作中,涉及的多媒體文件相關(guān)的測(cè)試,總逃不掉要使用工具查看多媒體文件相關(guān)的信息,上百次甚至上千次的打開關(guān)閉操作,工作是非常低效。
本期,我們一起來實(shí)現(xiàn)如何使用Python解析多媒體文件獲取信息,一起來漲知識(shí)吧~
問題背景
當(dāng)我們遇到進(jìn)行多媒體測(cè)試,總會(huì)遇到各種各樣不同編碼、后綴、多音軌的多媒體文件。那么問題來,在這個(gè)測(cè)試過程我們總是打開多媒體文件-查看文件編碼等信息,此過程如此往復(fù)。在測(cè)試一個(gè)項(xiàng)目下來,累計(jì)打開查看多媒體文件信息至少也有上百次~
- 在這里補(bǔ)充一下,通常對(duì)于多媒體測(cè)試來說,常用的分析工具是**MediaInfo**
- 是一款開源的多媒體分析工具
- 可以支持多種視頻和音頻文件格式
- 支持多種格式查看方式如xml、text、tree等
做測(cè)試真是體力活,惰性是提高工作效率的第一次動(dòng)力,動(dòng)動(dòng)腦筋,在網(wǎng)上查找一番Python提供了關(guān)于多媒體解析的庫pymediainfo庫控制MediaInfo工具
2.安裝依賴庫
2.1 pymediainfo庫
Pymediainfo 是專門對(duì)多媒體文件進(jìn)行解析的開源第三方Python庫,目前維護(hù)作者是Louis Sautier??梢灾С諰inux、MAC OS和Windows系統(tǒng)。
Pymediainfo 模塊中調(diào)用mediaInfo工具,解析文件并返回詳細(xì)信息->空白備注的信息。
2.2 安裝pymediainfo庫
- 第三方庫,安裝直接使用Python提供的pip工具
pip install pymediainfo
- 如果安裝遇到下載失敗,則可以添加其他服務(wù)器資源進(jìn)行下載。如清華大學(xué)源
pip install pymediainfo -i https://pypi.tuna.tsinghua.edu.cn/simple
3. 測(cè)試解析效果
查看 pymediainfo 庫源代碼pymediainfo/init.py內(nèi)容,可以看到pymediainfo主要有兩個(gè)類:
- Track:從mediaInfo對(duì)象輸出指定屬性的值
- Medianfo:解析多媒體文件,獲取詳細(xì)信息
根據(jù)官網(wǎng)文檔的介紹,簡(jiǎn)單使用pymediainfo庫方法,解析movie1.mp4文件:
from pymediainfo import MediaInfo media_info = MediaInfo.parse(filename) print(media_info.to_json())
終端輸出非常詳細(xì)的信息,如下部分打印截圖:
我們看到輸出的內(nèi)容是Json格式的,存在兩個(gè)問題:
- 數(shù)據(jù)字段多
- 數(shù)據(jù)字段間距擁擠
介于以上問題,對(duì)解析的Json數(shù)據(jù),要進(jìn)行格式化處理輸出,怎么做到輸出形式如mediainfo 軟件GUI效果一樣呢?
4. 格式化解析信息
我們獲取到的media_info信息,怎么格式化輸出與GUI界面顯示的一樣的內(nèi)容,最直接的思路大概如下:
查看JSON數(shù)據(jù)內(nèi)容,多媒體文件信息主要包含三個(gè)部分:
- General:movie、music、picture必有
- Video:movie必帶,music和picture無
- Audio:movie和music必帶,picture無
- 三種類型的多媒體文件字段內(nèi)容也不盡相同,其中movie文件字段最多
根據(jù)GUI上對(duì)每種文件展示詳細(xì)內(nèi)容字段,總體是一致的,可以使用map方式,將GUI上展示的字段名和JSON字段建立映射表output_type來存儲(chǔ)。
獲取到解析信息后,使用for循環(huán)將tracks所有屬性字段, 根據(jù)創(chuàng)建output_type截取字段來進(jìn)行打印輸出到new_file文件中。
在此過程中,當(dāng)指定的字段值為None時(shí),則進(jìn)行跳過。
注:mediaInfo GUI界面 text展示的是左對(duì)齊,因此可以使用format格式輸出
"{key1:[填充字符][對(duì)齊方式][寬度]}".format(key1) # *<40:左對(duì)齊,總共40個(gè)字符,不夠用*填充 # *>40:右對(duì)齊,總共40個(gè)字符,不夠用*填充 # *^40:居中,總共40個(gè)字符,不夠用*填充
根據(jù)以上思路,代碼就非常容易實(shí)現(xiàn)啦demo代碼如下
終端打印效果如下所示:
5. 批量解析操作
回到開頭我們面對(duì)一堆的多媒體文件需要查看分析詳情的時(shí)候,大概的解決思路如下:
- 我們可以繼續(xù)使用os.path模塊獲取指定目錄下所有多媒體文件列表media_files。
遍歷將每個(gè)mediafile使用mediainfo方法解析出信息mediainfo.to_json()存儲(chǔ)在list中,為什么不每一次解析內(nèi)容就寫入到文件中,原因如下:
每次解析后頻繁打開寫入文件操作,消耗系統(tǒng)資源
對(duì)于mediainfo內(nèi)容還需要進(jìn)行格式化后內(nèi)容寫入到目標(biāo)文件中
- 將統(tǒng)一的格式化內(nèi)容一一寫入到指定文件中,可以為后續(xù)查找和分析提供資料
6. 總結(jié)
本期,我們?cè)诠ぷ饔龅揭l繁地查看和查找多媒體文件信息,學(xué)習(xí)到了使用python中第三方庫pymediainfo模塊便捷快速解析指導(dǎo)的多媒體文件。
根據(jù)不同場(chǎng)景和需求,個(gè)性化解析出想要的多媒體詳細(xì)信息,提高我們工作效率,更多的時(shí)間學(xué)習(xí)其他新知識(shí)啦~
到此這篇關(guān)于Python如何對(duì)音視頻文件進(jìn)行解析的文章就介紹到這了,更多相關(guān)Python音視頻文件解析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python用opencv將標(biāo)注提取畫框到對(duì)應(yīng)的圖像中
這篇文章主要介紹了python用opencv將標(biāo)注提取畫框到對(duì)應(yīng)的圖像中,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08python求解數(shù)組中兩個(gè)字符串的最小距離
這篇文章主要為大家詳細(xì)介紹了python求解數(shù)組中兩個(gè)字符串的最小距離,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09Ubuntu手動(dòng)編譯源碼安裝Python的詳細(xì)過程
這篇文章主要介紹了Ubuntu手動(dòng)編譯源碼安裝Python的詳細(xì)過程,在python官網(wǎng)找到所需版本的python安裝包,下載到Ubuntu系統(tǒng)中,需要的朋友可以參考下2006-08-08Jupyter notebook運(yùn)行Spark+Scala教程
這篇文章主要介紹了Jupyter notebook運(yùn)行Spark+Scala教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04python Web應(yīng)用程序測(cè)試selenium庫使用用法詳解
selenium主要是用來做自動(dòng)化測(cè)試,支持多種瀏覽器,爬蟲中主要用來解決JavaScript渲染問題本文詳細(xì)介紹了在python中selenium模塊的使用方法2021-10-10python生成xml時(shí)規(guī)定dtd實(shí)例方法
在本篇文章里小編給大家整理的是關(guān)于python生成xml時(shí)規(guī)定dtd實(shí)例方法,需要的朋友們學(xué)習(xí)參考下。2020-09-09