[opencv][原创]关于opencv-python的cv2保存视频不支持H264格式问题探讨

这个全网精华,但是里面尝试了下都不行,因此我得出结论要解决这个问题,只有2条路可行。

第一条:源码编译

这种方法耗时费力,中途错误百出,走的十分艰难,不推荐

第二条:保存后用ffmpeg在格式转换一下

这种方法简单,但是效率上可能就不行了,大家可以尝试ffmpy3这个库或者直接用subprocess调用转换。

目前其他方法暂时测试不行,我的测试环境都是在

ubuntu18.04下面,windows上暂时没有测试过。如果有其他好办法可以分享在评论中,大家一起探讨一下。

更新:20220602

最终找到方法:

首先安装scikit-video

pip install scikit-video

然后代码如下:

import skvideo.io

outputfile = "/tmp/video.mp4"
writer = skvideo.io.FFmpegWriter(outputfile, outputdict={'-vcodec': 'libx264'})
for frame in frames:
    writer.writeFrame(frame)
writer.close()

frame就是opencv-python cap.Capture捕获的nd.array类型,就是cv2.imread读取数据类型,例子如下:

import skvideo.io
import cv2

outputfile = "/home/fut/video.mp4"

cap = cv2.VideoCapture('/home/fut/Videos/4391603481b6056f248a5fb106953796.mp4')
获取视频帧速率 FPS
frame_fps = int(cap.get(cv2.CAP_PROP_FPS))
获取视频帧宽度和高度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print("video fps={},width={},height={}".format(frame_fps, frame_width, frame_height))
out = skvideo.io.FFmpegWriter(outputfile,inputdict={'-r': str(frame_fps), '-s':'{}x{}'.format(frame_width,frame_height)}, outputdict={'-r': str(frame_fps), '-vcodec': 'libx264'})
count = 0
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("read over or error!")
        break
    out.writeFrame(frame)
    cv2.imshow("result", frame)
    if cv2.waitKey(2) & 0xFF == ord('q'):  # 按q退出
        break
out.close()
cap.release()
cv2.destroyAllWindows()

Original: https://blog.csdn.net/FL1623863129/article/details/124763479
Author: FL1623863129
Title: [opencv][原创]关于opencv-python的cv2保存视频不支持H264格式问题探讨

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/703075/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球