Tia*_*ian 7 python video opencv
我最近按照教程在我的 mac 上安装了 OpenCV for PYTHON: http ://www.pyimagesearch.com/2016/12/19/install-opencv-3-on-macos-with-homebrew-the-easy-way /
我编写了一个代码来读取视频文件,它能够检索 fps、时间戳、总数。帧数,在读取的每一帧:
cap = cv2.VideoCapture(particle_name + video_file_type)
while True:
time = cap.get(cv2.CAP_PROP_POS_MSEC)
fps = cap.get(cv2.CAP_PROP_FPS)
total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
print(time, fps, total_frames)
ret, frame = cap.read()
cv2.imshow('frame', frame)
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
我在视频 A、.mov 格式、Motion JPEG 视频 (dmb1) 编解码器上尝试了此代码。以及视频 B、.avi 格式、Motion JPEG 视频 (MJPG) 编解码器。
对于视频 A 和视频 B,打印的 fps 和total_frames 都是常量。然而,对于视频 A,时间逐渐增加(理应如此),但对于视频 B,时间保持恒定为 0。
我认为可能是视频的格式导致了这种差异,因此我将视频 B 的格式更改为 .mov,同时保留相同的编解码器,但问题仍然存在。
我可以知道如何从视频 B 中检索准确的时间戳吗?
我不确定为什么cap.get(cv2.CAP_PROP_FRAME_COUNT)没有返回正确的时间戳。这可能是编解码器问题。Yoo 可以尝试其他编解码器,例如 XVID、MP4V 等。请注意,扩展名仅表示文件的容器,并且更改可能不会真正导致视频文件发生任何有意义的更改。
如果您仍然无法使其工作,请使用帧计数和图像的 FPS 来获取时间戳。
fps = cap.get(cv2.CV_CAP_PROP_FPS)
frame_count = 0
while True:
frame_count++
time = float(frame_count)/fps
Run Code Online (Sandbox Code Playgroud)
编辑:您可以使用 ffmpeg 更改编解码器。以下是 Mac 的示例教程https://www.macxdvd.com/mac-dvd-video-converter-how-to/ffmpeg-avi-to-mp4-free.htm。
| 归档时间: |
|
| 查看次数: |
20471 次 |
| 最近记录: |