You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CVAT标注视频提取帧遇问题:帧数量不符及FFmpeg报错求助

问题描述

使用CVAT工具以YOLO格式完成视频标注后,提取对应视频帧时遇到两个问题:

  • VLC提取仅得到1109帧,但CVAT中标注帧数量为1541帧
  • 执行两条FFmpeg命令提取帧时均触发I/O错误,转换失败

第一条FFmpeg命令

ffmpeg -i path/to/your/video -start_number 0 -b:v 10000k -vsync 0 -an -y -q:v 16 images/%d.jpg

第一条命令报错信息

ffmpeg version 5.1.2-essentials_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 12.1.0 (Rev2, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
-vsync is deprecated. Use -fps_mode
Passing a number to -vsync is deprecated, use a string argument as described in the manual.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Users\Aditya Kalhan\Downloads\odonil.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp41isom
    creation_time   : 2023-08-22T16:49:13.000000Z
  Duration: 00:01:02.78, start: 0.000000, bitrate: 8095 kb/s
  Stream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt470bg/bt709/reserved, progressive), 1280x720 [SAR 1:1 DAR 16:9], 7886 kb/s, 29.89 fps, 30 tbr, 30k tbn (default)
    Metadata:
      creation_time   : 2023-08-22T16:49:13.000000Z
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : AVC Coding
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s (default)
    Metadata:
      creation_time   : 2023-08-22T16:49:13.000000Z
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'images/%d.jpg':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp41isom
    encoder         : Lavf59.27.100
  Stream #0:0(und): Video: mjpeg, yuvj420p(pc, bt470bg/bt709/reserved, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 10000 kb/s, 30 fps, 30 tbn (default)
    Metadata:
      creation_time   : 2023-08-22T16:49:13.000000Z
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc59.37.100 mjpeg
    Side data:
      cpb: bitrate max/min/avg: 0/0/10000000 buffer size: 0 vbv_delay: N/A
[image2 @ 000002024a04d440] Could not open file : images/0.jpgA speed=   0x
av_interleaved_write_frame(): I/O error
[image2 @ 000002024a04d440] Could not open file : images/0.jpg
av_interleaved_write_frame(): I/O error
[image2 @ 000002024a04d440] Could not open file : images/0.jpg
av_interleaved_write_frame(): I/O error
[image2 @ 000002024a04d440] Could not open file : images/0.jpg
av_interleaved_write_frame(): I/O error
[image2 @ 000002024a04d440] Could not open file : images/0.jpg
av_interleaved_write_frame(): I/O error
frame=    5 fps=0.0 q=16.0 Lsize=N/A time=00:00:00.16 bitrate=N/A speed= 4.8x
video:51kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Conversion failed!

第二条FFmpeg命令

ffmpeg -i path/to/your/video -start_number 0 -b:v 10000k -vsync 0 -an -y -q:v 16 images2/frame_%06d.jpg

第二条命令报错信息

ffmpeg version 5.1.2-essentials_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 12.1.0 (Rev2, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
-vsync is deprecated. Use -fps_mode
Passing a number to -vsync is deprecated, use a string argument as described in the manual.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Users\Aditya Kalhan\Downloads\odonil.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp41isom
    creation_time   : 2023-08-22T16:49:13.000000Z
  Duration: 00:01:02.78, start: 0.000000, bitrate: 8095 kb/s
  Stream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt470bg/bt709/reserved, progressive), 1280x720 [SAR 1:1 DAR 16:9], 7886 kb/s, 29.89 fps, 30 tbr, 30k tbn (default)
    Metadata:
      creation_time   : 2023-08-22T16:49:13.000000Z
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : AVC Coding
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s (default)
    Metadata:
      creation_time   : 2023-08-22T16:49:13.000000Z
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'images2/frame_%06d.jpg':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp41isom
    encoder         : Lavf59.27.100
  Stream #0:0(und): Video: mjpeg, yuvj420p(pc, bt470bg/bt709/reserved, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 10000 kb/s, 30 fps, 30 tbn (default)
    Metadata:
      creation_time   : 2023-08-22T16:49:13.000000Z
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc59.37.100 mjpeg
    Side data:
      cpb: bitrate max/min/avg: 0/0/10000000 buffer size: 0 vbv_delay: N/A
[image2 @ 000001fcb198d240] Could not open file : images2/frame_000000.jpgx
av_interleaved_write_frame(): I/O error
[image2 @ 000001fcb198d240] Could not open file : images2/frame_000000.jpg
av_interleaved_write_frame(): I/O error
[image2 @ 000001fcb198d240] Could not open file : images2/frame_000000.jpg
av_interleaved_write_frame(): I/O error
[image2 @ 000001fcb198d240] Could not open file : images2/frame_000000.jpg
av_interleaved_write_frame(): I/O error
frame=    4 fps=0.0 q=16.0 Lsize=N/A time=00:00:00.13 bitrate=N/A speed=1.91x
video:41kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Conversion failed!
解决方案

一、修复FFmpeg的I/O错误

报错核心为Could not open file,按以下步骤解决:

  1. 提前创建输出目录:手动在命令执行路径下创建images或images2文件夹,FFmpeg不会自动生成目录
  2. 检查写入权限:Windows系统下,以管理员身份运行命令提示符;Linux/macOS下,给目录添加写入权限:chmod +w images/
  3. 使用绝对路径:避免相对路径引发的定位错误,把输出路径改为绝对路径,比如C:\Users\YourName\output\images\%d.jpg
  4. 替换过时参数:原命令中-vsync 0已被弃用,替换为-fps_mode passthrough,确保帧处理逻辑正确

修正后的完整命令:

ffmpeg -i "C:\Users\Aditya Kalhan\Downloads\odonil.mp4" -start_number 0 -b:v 10000k -fps_mode passthrough -an -y -q:v 16 "C:\Users\Aditya Kalhan\output\images\%d.jpg"

二、解决帧数量不符问题

VLC提取帧数量少于CVAT标注数,原因是VLC默认按显示帧率提取(跳过重复帧或预测帧),而CVAT读取视频所有原始帧。解决方法:

  1. 用修正后的FFmpeg命令提取:-fps_mode passthrough参数会强制FFmpeg读取视频中的每一帧,包括I/P/B帧,保证提取数量和CVAT一致
  2. 验证视频实际总帧数:先运行以下命令确认视频真实帧数,对比CVAT的1541帧:
ffmpeg -i "C:\Users\Aditya Kalhan\Downloads\odonil.mp4" -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1
  1. 修复损坏视频:如果实际帧数和CVAT不符,说明视频存在帧损坏,先修复再提取:
ffmpeg -i "C:\Users\Aditya Kalhan\Downloads\odonil.mp4" -c:v copy -c:a copy "C:\Users\Aditya Kalhan\Downloads
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:18:20