我目前正在尝试使用Python中的OpenCV逐帧加载超高清视频(3840×2160)。我正在使用OpenCV库中的VideoCapture
对象,它似乎工作正常,除了事实,它只加载26帧。
视频 8:54 分钟 .mp4 , 30fps 和 H.264 编码。
我的代码的简化如下所示
import cv2
def get_frames(filepath):
cap = cv2.VideoCapture(filepath)
while cap.isOpened():
success, frame = cap.read()
if not success:
break
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
yield frame
该代码似乎适用于较低分辨率的其他视频。 我使用Python 3.5.1和cv2的3.1.0版本。
有没有人遇到过同样的问题,或者可以推荐任何其他库来快速加载Python中的视频帧?
感谢。
修改
根据VLC的中位数信息,该视频具有以下属性:
Codec: H264 - MPEG-4 AVC (part 10)(avc 1)
Resolution: 3840x2178
Display resolution: 3840x2160
Frame rate: 29.970030
Decoded format: Planar 4:2:0 YUV full scale
我尝试使用以下命令
首先使用ffmpeg
转换影片
ffmpeg -i video.mp4 -crf 18 video_converted.mp4
实际上使代码工作,即使属性完全相同(根据VLC)。