日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python如何對音視頻文件進行解析詳解_python

作者:盆友圈的小可愛 ? 更新時間: 2022-12-14 編程語言

前言

作為一個學完Python基礎知識的測試,終于可以像RD們自己寫腳本處理任何場景吧,如何優雅地寫出來代碼,接下來開啟進階版的Python。

在我們工作中,涉及的多媒體文件相關的測試,總逃不掉要使用工具查看多媒體文件相關的信息,上百次甚至上千次的打開關閉操作,工作是非常低效。

本期,我們一起來實現如何使用Python解析多媒體文件獲取信息,一起來漲知識吧~

問題背景

當我們遇到進行多媒體測試,總會遇到各種各樣不同編碼、后綴、多音軌的多媒體文件。那么問題來,在這個測試過程我們總是打開多媒體文件-查看文件編碼等信息,此過程如此往復。在測試一個項目下來,累計打開查看多媒體文件信息至少也有上百次~

  • 在這里補充一下,通常對于多媒體測試來說,常用的分析工具是**MediaInfo**
    • 是一款開源的多媒體分析工具
    • 可以支持多種視頻和音頻文件格式
    • 支持多種格式查看方式如xml、text、tree等

做測試真是體力活,惰性是提高工作效率的第一次動力,動動腦筋,在網上查找一番Python提供了關于多媒體解析的庫pymediainfo庫控制MediaInfo工具

2.安裝依賴庫

2.1 pymediainfo庫

Pymediainfo 是專門對多媒體文件進行解析的開源第三方Python庫,目前維護作者是Louis Sautier。可以支持Linux、MAC OS和Windows系統。

Pymediainfo 模塊中調用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內容,可以看到pymediainfo主要有兩個類:

  • Track:從mediaInfo對象輸出指定屬性的值
  • Medianfo:解析多媒體文件,獲取詳細信息

根據官網文檔的介紹,簡單使用pymediainfo庫方法,解析movie1.mp4文件:

from pymediainfo import MediaInfo
media_info = MediaInfo.parse(filename)
print(media_info.to_json())

終端輸出非常詳細的信息,如下部分打印截圖:

我們看到輸出的內容是Json格式的,存在兩個問題:

  • 數據字段多
  • 數據字段間距擁擠

介于以上問題,對解析的Json數據,要進行格式化處理輸出,怎么做到輸出形式如mediainfo 軟件GUI效果一樣呢?

4. 格式化解析信息

我們獲取到的media_info信息,怎么格式化輸出與GUI界面顯示的一樣的內容,最直接的思路大概如下:

  • 查看JSON數據內容,多媒體文件信息主要包含三個部分:

    • General:movie、music、picture必有
    • Video:movie必帶,music和picture無
    • Audio:movie和music必帶,picture無
  • 三種類型的多媒體文件字段內容也不盡相同,其中movie文件字段最多

根據GUI上對每種文件展示詳細內容字段,總體是一致的,可以使用map方式,將GUI上展示的字段名和JSON字段建立映射表output_type來存儲。

獲取到解析信息后,使用for循環將tracks所有屬性字段, 根據創建output_type截取字段來進行打印輸出到new_file文件中。

在此過程中,當指定的字段值為None時,則進行跳過。

注:mediaInfo GUI界面 text展示的是左對齊,因此可以使用format格式輸出

"{key1:[填充字符][對齊方式][寬度]}".format(key1)
# *<40:左對齊,總共40個字符,不夠用*填充
# *>40:右對齊,總共40個字符,不夠用*填充
# *^40:居中,總共40個字符,不夠用*填充

根據以上思路,代碼就非常容易實現啦demo代碼如下

終端打印效果如下所示:

5. 批量解析操作

回到開頭我們面對一堆的多媒體文件需要查看分析詳情的時候,大概的解決思路如下:

  • 我們可以繼續使用os.path模塊獲取指定目錄下所有多媒體文件列表media_files。
  • 遍歷將每個mediafile使用mediainfo方法解析出信息mediainfo.to_json()存儲在list中,為什么不每一次解析內容就寫入到文件中,原因如下:

    每次解析后頻繁打開寫入文件操作,消耗系統資源

    對于mediainfo內容還需要進行格式化后內容寫入到目標文件中

  • 將統一的格式化內容一一寫入到指定文件中,可以為后續查找和分析提供資料

6. 總結

本期,我們在工作遇到要頻繁地查看和查找多媒體文件信息,學習到了使用python中第三方庫pymediainfo模塊便捷快速解析指導的多媒體文件。

根據不同場景和需求,個性化解析出想要的多媒體詳細信息,提高我們工作效率,更多的時間學習其他新知識啦~

原文鏈接:https://juejin.cn/post/7166271592576581639

欄目分類
最近更新