Python如何對音視頻文件進行解析詳解
前言
作為一個學完Python基礎知識的測試,終于可以像RD們自己寫腳本處理任何場景吧,如何優(yōu)雅地寫出來代碼,接下來開啟進階版的Python。
在我們工作中,涉及的多媒體文件相關的測試,總逃不掉要使用工具查看多媒體文件相關的信息,上百次甚至上千次的打開關閉操作,工作是非常低效。
本期,我們一起來實現(xiàn)如何使用Python解析多媒體文件獲取信息,一起來漲知識吧~
問題背景
當我們遇到進行多媒體測試,總會遇到各種各樣不同編碼、后綴、多音軌的多媒體文件。那么問題來,在這個測試過程我們總是打開多媒體文件-查看文件編碼等信息,此過程如此往復。在測試一個項目下來,累計打開查看多媒體文件信息至少也有上百次~
- 在這里補充一下,通常對于多媒體測試來說,常用的分析工具是**MediaInfo**
- 是一款開源的多媒體分析工具
- 可以支持多種視頻和音頻文件格式
- 支持多種格式查看方式如xml、text、tree等

做測試真是體力活,惰性是提高工作效率的第一次動力,動動腦筋,在網(wǎng)上查找一番Python提供了關于多媒體解析的庫pymediainfo庫控制MediaInfo工具
2.安裝依賴庫
2.1 pymediainfo庫
Pymediainfo 是專門對多媒體文件進行解析的開源第三方Python庫,目前維護作者是Louis Sautier??梢灾С諰inux、MAC OS和Windows系統(tǒng)。
Pymediainfo 模塊中調(diào)用mediaInfo工具,解析文件并返回詳細信息->空白備注的信息。

2.2 安裝pymediainfo庫
- 第三方庫,安裝直接使用Python提供的pip工具
pip install pymediainfo
- 如果安裝遇到下載失敗,則可以添加其他服務器資源進行下載。如清華大學源
pip install pymediainfo -i https://pypi.tuna.tsinghua.edu.cn/simple
3. 測試解析效果
查看 pymediainfo 庫源代碼pymediainfo/init.py內(nèi)容,可以看到pymediainfo主要有兩個類:
- Track:從mediaInfo對象輸出指定屬性的值
- Medianfo:解析多媒體文件,獲取詳細信息

根據(jù)官網(wǎng)文檔的介紹,簡單使用pymediainfo庫方法,解析movie1.mp4文件:
from pymediainfo import MediaInfo media_info = MediaInfo.parse(filename) print(media_info.to_json())
終端輸出非常詳細的信息,如下部分打印截圖:

我們看到輸出的內(nèi)容是Json格式的,存在兩個問題:
- 數(shù)據(jù)字段多
- 數(shù)據(jù)字段間距擁擠
介于以上問題,對解析的Json數(shù)據(jù),要進行格式化處理輸出,怎么做到輸出形式如mediainfo 軟件GUI效果一樣呢?

4. 格式化解析信息
我們獲取到的media_info信息,怎么格式化輸出與GUI界面顯示的一樣的內(nèi)容,最直接的思路大概如下:
查看JSON數(shù)據(jù)內(nèi)容,多媒體文件信息主要包含三個部分:
- General:movie、music、picture必有
- Video:movie必帶,music和picture無
- Audio:movie和music必帶,picture無
- 三種類型的多媒體文件字段內(nèi)容也不盡相同,其中movie文件字段最多
根據(jù)GUI上對每種文件展示詳細內(nèi)容字段,總體是一致的,可以使用map方式,將GUI上展示的字段名和JSON字段建立映射表output_type來存儲。
獲取到解析信息后,使用for循環(huán)將tracks所有屬性字段, 根據(jù)創(chuàng)建output_type截取字段來進行打印輸出到new_file文件中。
在此過程中,當指定的字段值為None時,則進行跳過。
注:mediaInfo GUI界面 text展示的是左對齊,因此可以使用format格式輸出
"{key1:[填充字符][對齊方式][寬度]}".format(key1)
# *<40:左對齊,總共40個字符,不夠用*填充
# *>40:右對齊,總共40個字符,不夠用*填充
# *^40:居中,總共40個字符,不夠用*填充根據(jù)以上思路,代碼就非常容易實現(xiàn)啦demo代碼如下

終端打印效果如下所示:

5. 批量解析操作
回到開頭我們面對一堆的多媒體文件需要查看分析詳情的時候,大概的解決思路如下:
- 我們可以繼續(xù)使用os.path模塊獲取指定目錄下所有多媒體文件列表media_files。
遍歷將每個mediafile使用mediainfo方法解析出信息mediainfo.to_json()存儲在list中,為什么不每一次解析內(nèi)容就寫入到文件中,原因如下:
每次解析后頻繁打開寫入文件操作,消耗系統(tǒng)資源
對于mediainfo內(nèi)容還需要進行格式化后內(nèi)容寫入到目標文件中
- 將統(tǒng)一的格式化內(nèi)容一一寫入到指定文件中,可以為后續(xù)查找和分析提供資料
6. 總結
本期,我們在工作遇到要頻繁地查看和查找多媒體文件信息,學習到了使用python中第三方庫pymediainfo模塊便捷快速解析指導的多媒體文件。
根據(jù)不同場景和需求,個性化解析出想要的多媒體詳細信息,提高我們工作效率,更多的時間學習其他新知識啦~
到此這篇關于Python如何對音視頻文件進行解析的文章就介紹到這了,更多相關Python音視頻文件解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Jupyter notebook運行Spark+Scala教程
這篇文章主要介紹了Jupyter notebook運行Spark+Scala教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
python Web應用程序測試selenium庫使用用法詳解
selenium主要是用來做自動化測試,支持多種瀏覽器,爬蟲中主要用來解決JavaScript渲染問題本文詳細介紹了在python中selenium模塊的使用方法2021-10-10

