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

FFmpeg提取关键帧时出现Invalid pts错误,求解决方案

解决FFmpeg提取关键帧时PTS重复报错问题

问题重现

执行以下命令提取视频场景关键帧时,部分视频出现PTS重复错误导致中断:

ffmpeg -i data/full_videos/pleasantville_1998.mp4 -filter:v "select='gt(scene,0.1)',showinfo" -vsync 0 frames/%05d.jpg

错误信息:

[mjpeg @ 0x6492f1e8a3c0] Invalid pts (3883) <= last (3883)                               
[vost#0:0/mjpeg @ 0x6492f213e6c0] Error submitting video frame to the encoder
[vost#0:0/mjpeg @ 0x6492f213e6c0] Error encoding a frame: Operation not permitted
[vost#0:0/mjpeg @ 0x6492f213e6c0] Task finished with error code: -1 (Operation not permitted)
[vost#0:0/mjpeg @ 0x6492f213e6c0] Terminating thread with return code -1 (Operation not permitted)
[out#0/image2 @ 0x6492f1fc1340] video:1898KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown frame=   47 fps=9.7 q=24.8 Lsize=N/A time=00:02:41.99 bitrate=N/A speed=33.5x
Conversion failed!

解决方案

方案1:修改命令,添加错误容忍与PTS重置滤镜

直接在原命令中加入错误忽略参数和PTS重置滤镜,强制生成递增的时间戳,避免编码器报错:

ffmpeg -i data/full_videos/pleasantville_1998.mp4 -err_detect ignore_err -filter:v "select='gt(scene,0.1)',setpts=N/FRAME_RATE/TB,showinfo" -vsync 0 frames/%05d.jpg

参数说明:

  • -err_detect ignore_err:忽略解码阶段的错误,让FFmpeg继续处理后续帧
  • setpts=N/FRAME_RATE/TB:根据帧序号和视频帧率重新生成唯一递增的PTS,解决重复PTS问题

方案2:先修复视频元数据,再提取关键帧

如果方案1无效,先将视频重新封装,修复异常的时间戳元数据,再执行提取命令:

  1. 生成修复后的临时视频文件:
ffmpeg -i data/full_videos/pleasantville_1998.mp4 -c copy -map 0 -err_detect ignore_err temp_fixed.mp4
  1. 从修复后的视频提取关键帧:
ffmpeg -i temp_fixed.mp4 -filter:v "select='gt(scene,0.1)',showinfo" -vsync 0 frames/%05d.jpg

补充说明

手动观看视频正常是因为播放器会自动兼容异常的时间戳,但FFmpeg的MJPEG编码器对PTS的唯一性要求严格,重复的PTS会触发编码中断。上述方案通过忽略错误或重置PTS,实现跳过异常片段继续提取有效帧的需求。

内容的提问来源于stack exchange,提问作者ludog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:35:02