【问题标题】:Python New n frame video is heavier than the input videoPython新建n帧视频比输入视频重
【发布时间】:2021-06-09 07:53:55
【问题描述】:

我设法编写了一个代码来抽取我的视频,并且只提取 10 帧中的 1 帧,以便让我的神经网络在未来更有效地进行字符识别。 新视频exit_video 被大量抽取,因为它比之前的视频快得多。

1:当我打印新视频的 fps 时,尽管抽取了 30,但我又得到了 30

2:为什么我的新视频比较重? 50.000 ko,第一名是 42.000 ko

感谢您的帮助

import cv2
#import os
import sys


video = cv2.VideoCapture("./video/inputvideo.mp4")
frameWidth = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
frameHeight = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
frameFourcc = int(video.get(cv2.CAP_PROP_FOURCC))
success,image = video.read()

if not success:
    print('impossible de prendre une frame')
    sys.exit()
    
fps = video.get(cv2.CAP_PROP_FPS)
print("fps de base " + str(fps))
print(frameFourcc)
count = 0
exit_file = 'decimated_v1.mp4'
exit_video = cv2.VideoWriter(exit_file, frameFourcc, fps, (frameWidth, frameHeight))
while True:
    if ((count % 10 ) ==0):
        exit_video.write(image)
    success,image = video.read()
    if not success:
        break
        
    count +=1
    
exit_video.release()
exit_video_info = cv2.VideoCapture("decimated_v1.mp4")
fps_sortie = exit_video_info.get(cv2.CAP_PROP_FPS)
print("fps de sortie " + str(fps_sortie))    

【问题讨论】:

    标签: python opencv frame cv2 fourcc


    【解决方案1】:

    抽取并非全部为Intra frames 的视频文件需要重新编码。除非您的输入文件是例如ProRes 或 MJPEG,很可能就是这种情况。

    由于您没有设置编码参数,OpenCV 最终可能会使用一些最终比特率高于输入文件的默认值。

    与 OpenCV 及其 select filter 相比,使用 FFmpeg 工具可能会更好。

    ffmpeg -i ./video/inputvideo.mp4 -vf select='not(mod(n\,10))' ./decimated_v1.mp4
    

    将是使用输入中每十帧的基本语法;然后,您可以添加所需的编码参数,例如 -crf 来调整 H.264 速率因子——当然,您也可以完全更改为不同的编解码器。

    【讨论】:

    • 嗨,我的整个代码都在使用 openCV,所以我想坚持下去,我对 ffmpeg 一点也不熟悉。您说它可能使用了默认编码参数,但是在 VideoWriter() 中,第二个参数指定了输入的编码,即 AVC1。感谢您的回复
    • 通过我的快速谷歌搜索,看起来 VideoWriter 不允许正确设置质量。 github.com/opencv/opencv/issues/8961
    • 这个相关的 SO 问题最终会传递给 ffmpeg... :) stackoverflow.com/q/38686359/51685
    • 嗨,当我尝试时,我有文件“C:\ProgramData\Anaconda3\lib\subprocess.py”,第 997 行,在 _execute_child startupinfo) FileNotFoundError: [WinError 2] 系统找不到指定的文件
    • 你安装了ffmpeg吗?您是否尝试过将 ffmpeg 二进制文件的真实路径替换为第一个参数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多