最近博主在做HDR2SDR 的项目,在用python做demo的过程中遇到一个问题,输入是HDR的视频(H.265, YUV420P10LE, BT2020, 25fps的MKV文件),由于MKV文件是10bit的,博主直接使用 cv2.VideoCapture() 函数,得到的frame数据只有8bit, 在网上找了好久,都不知道如何使用cv2.VeideoCapture()函数读10bit 的数据,只好使用最笨的办法,此博文用以记录,如果有相同需求的朋友看到这篇文章也可有个借鉴,如果有知道如何直接读取10bit MKV文件的朋友,也麻烦留言告诉一下博主,博主感激不尽。
MKV是一种视频格式,包含许多封装信息,python要读取YUV420P10LE 格式,那么首先要将MKV文件解码出YUV文件,此处博主使用ffmpeg解码,且只选取其中10s的所有帧。语法如下:
ffmpeg -i inputfile.MKV -ss 00:00:00 -t 10 -s 3840x2160 -pix_fmt yuv420p10le outfile.yuv
解码得到YUV文件后,可以使用ffplay 播放一下视频:
ffplay -video_size 3840x2160 -pixel_format yuv420p10le -i outfile.yuv
解码得到单帧YUV语法如下:
ffmpeg -i input.MKV -ss 00:00:00 -f segment