如何使用Python从文件属性>详情页获取视频时长
os.stat() 仅能读取文件系统层面的基础属性(如文件大小、创建/修改时间等),无法解析视频文件内部封装的媒体元数据,因此无法获取到视频时长。以下是可用的实现方案:
方案1:使用pymediainfo(推荐,兼容性最强)
该方案基于MediaInfo实现,支持几乎所有主流视频格式,读取的时长参数和系统文件详情页显示的结果完全一致。
- 安装依赖:
# 先安装Python库 pip install pymediainfo # 若运行报错,需额外安装MediaInfo工具: # Windows:官网下载MediaInfo安装包添加到系统环境变量 # Mac:brew install mediainfo # Linux(Debian/Ubuntu):sudo apt install mediainfo
- 示例代码:
from pymediainfo import MediaInfo def get_video_duration(file_path: str) -> float: """ 获取视频时长,返回值单位为秒 """ media_info = MediaInfo.parse(file_path) for track in media_info.tracks: if track.track_type == "Video": return int(track.duration) / 1000 # 调用示例 print(get_video_duration("example.mp4"))
方案2:使用opencv-python(轻量方案)
适合已经在使用OpenCV做视频处理的场景,对常见的MP4、AVI、MOV等格式支持良好。
- 安装依赖:
pip install opencv-python
- 示例代码:
import cv2 def get_video_duration(file_path: str) -> float: cap = cv2.VideoCapture(file_path) if not cap.isOpened(): raise IOError("无法打开指定视频文件") fps = cap.get(cv2.CAP_PROP_FPS) total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT) duration = total_frames / fps cap.release() return duration print(get_video_duration("example.mp4"))
方案3:使用moviepy(适合视频剪辑场景)
如果后续需要对视频做裁剪、拼接等编辑操作,可以直接使用moviepy库获取时长。
- 安装依赖:
pip install moviepy
- 示例代码:
from moviepy.editor import VideoFileClip def get_video_duration(file_path: str) -> float: with VideoFileClip(file_path) as clip: return clip.duration print(get_video_duration("example.mp4"))
注:如果追求和系统文件详情页显示的时长完全匹配,优先选择pymediainfo方案。
内容的提问来源于stack exchange,提问作者Micah Haile
相关产品推荐
相关产品推荐

