網站首頁 編程語言 正文
前言
作為一個學完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
相關推薦
- 2022-05-23 Python的代理類實現,控制訪問和修改屬性的權限你都了解嗎_python
- 2022-09-29 shell函數內調用另一個函數(不帶返回值和帶返回值)_linux shell
- 2022-09-05 Pycharm虛擬環境pip時報錯:no?suchoption:--bulid-dir的解決辦法_p
- 2022-11-20 Pandas數據處理庫畫圖與文件讀取使用示例_python
- 2022-08-14 python?中的@property的用法詳解_python
- 2022-06-19 SQL?Server?Agent?服務啟動后又停止問題_MsSql
- 2023-07-09 SQL Server中的NULL值處理:判斷與解決方案
- 2022-12-28 kotlin開發cli工具小技巧詳解_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支