如何使用Nvidia DALI获取视频的FPS及每帧时间信息?
获取视频FPS及每帧时间的方法
DALI的pipe.reader_meta()确实不会返回视频原始FPS,你可以用下面两种方法解决:
方法一:用OpenCV预获取视频FPS
直接用OpenCV读取视频文件的元数据,拿到原始FPS后计算每帧时间,是最直接的方案:
import cv2 # 读取视频文件 cap = cv2.VideoCapture(vid_name) # 获取视频原始FPS video_fps = cap.get(cv2.CAP_PROP_FPS) # 计算每帧的时间间隔(秒) frame_time = 1 / video_fps # 释放资源 cap.release()
之后你在处理DALI读取的帧时,就可以用帧序号 * frame_time得到对应帧的时间戳。
方法二:通过DALI读取总帧数+外部工具获取视频时长计算FPS
如果需要结合DALI的帧计数结果,可以按以下步骤操作:
- 用DALI获取视频总帧数:
# 在pipe.build()之后执行 reader_meta = pipe.reader_meta() total_frames = reader_meta["epoch_size"]
- 用ffmpeg获取视频总时长(也可以用Python的ffmpeg封装库调用):
ffmpeg -i your_video.mp4 2>&1 | grep Duration | awk '{print $2}' | tr -d ,
将得到的时长(如00:02:30.12格式)转换为秒数后,用total_frames / 总时长秒数算出FPS,再推导每帧时间。
方法一更简单高效,推荐优先使用。
内容的提问来源于stack exchange,提问作者Наталья Шафорост
相关产品推荐
相关产品推荐

