酒煮青梅392 2025-03-18 18:53 采纳率: 66%
浏览 30

但是输出的检测视频也同样跳帧了,我想问一下怎么才能保持输出后的检测视频长度不变(标签-yolo|关键词-int)

我用yolov5检测视频后,我修改了detect.py代码的parser.add_argument("--vid-stride", type=int, default=10, help="video frame-rate stride")和run函数的 vid_stride=10(他们本来默认为1),检测确实跳帧了(按照10帧率)。但是输出的检测视频也同样跳帧了,我想问一下怎么才能保持输出后的检测视频长度不变。(效果就是第1帧检测后第2到10帧率都用第一帧的结果)

img


明明原视频是3000帧率的

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-03-18 18:53
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解答

    你使用 YOLOv5 检测视频后,发现输出的检测视频也同样跳帧了,这是因为你在 detect.py 代码中设置了 --vid-stride 参数,这个参数控制着视频帧的采样率。

    如果你想保持输出后的检测视频长度不变,可以尝试以下方法:

    1. 设置 --vid-stride 参数为 1,这样可以保持原始视频的帧率。
    2. 使用 ffmpeg 工具来处理视频,例如:
    ffmpeg -i input.mp4 -vf fps=30 output.mp4
    

    这将将输入视频的帧率调整到 30fps,并将输出视频保存为 output.mp4。

    1. 在 detect.py 代码中,使用 cv2.VideoCapture 对象来读取视频,并使用 cv2.CAP_PROP_FPS 属性来获取视频的帧率,然后使用 cv2.CAP_PROP_POS_FRAMES 属性来设置视频的当前帧号。
    cap = cv2.VideoCapture('input.mp4')
    fps = cap.get(cv2.CAP_PROP_FPS)
    frame_count = int(fps * 10)  # 10 seconds
    cap.set(cv2.CAP_PROP_POS_FRAMES, frame_count)
    

    这些方法可以帮助你保持输出后的检测视频长度不变。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月18日