【问题标题】:Video not playing when creating a video by skipping frames通过跳帧创建视频时视频不播放
【发布时间】:2021-06-08 13:33:03
【问题描述】:

我有一个大小为 73.7MB 的视频 xx.mp4。它有大量的帧,所以我想通过每 5 帧来减少它。这是我编写的代码(使用 Masoud Rahimi here 的答案)

cap = cv2.VideoCapture('xx.mp4')
length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print(length)

if (cap.isOpened) == False:
    print('unable to read file')
    
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))

i = 0
frame_skip = 5

out = cv2.VideoWriter('outskipframe.mp4', cv2.VideoWriter_fourcc('M','J','P','G'), 10, (frame_width, frame_height))
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    if i > frame_skip -1:
        out.write(frame)
        i = 0
        continue
    i+=1    

cap.release()
out.release()
cv2.destroyAllWindows()

视频outskipframe.mp4 以 911MB 的大小保存,但是当我尝试使用 cv2.VideoCapture 播放它时,出现条件(cap.isOpened()==False) 的错误。我检查了帧数,它显示为 0。

我尝试在不跳过任何帧的情况下编写相同的视频,它完美地工作,复制完全相同的文件(帧数更少但 5.5GB 的大小非常大)

谁能告诉我哪里出错了?

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    您可以使用此 VideoWriter 行尝试您的代码吗?

    out = cv2.VideoWriter('test.mp4', cv2.VideoWriter_fourcc(*'MP4V'), 10, (width, height));
    

    我不认为您现在拥有的fourcc 代码对.mp4 有效,至少它对我来说不是有效的编解码器。

    【讨论】:

    • 谢谢!但是我已经尝试了这个fourcc代码而没有跳帧,它工作正常。所以这不是问题。
    【解决方案2】:

    我想通了。条件必须设置为 while True。我仍然理解为什么会这样。

    cap = cv2.VideoCapture('xx.mp4')
    length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    print(length)
    
    if (cap.isOpened) == False:
        print('unable to read file')
        
    frame_width = int(cap.get(3))
    frame_height = int(cap.get(4))
    
    i = 0
    frame_skip = 5
    
    out = cv2.VideoWriter('outskipframe.mp4', cv2.VideoWriter_fourcc('M','J','P','G'), 10, (frame_width, frame_height))
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        if i > frame_skip -1:
            out.write(frame)
            i = 0
            continue
        i+=1    
    
    cap.release()
    out.release()
    cv2.destroyAllWindows()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      相关资源
      最近更新 更多