FFmpeg转码时出现duration、timestamp越界及pts无值报错排查
报错根因
- 该报错是FFmpeg 4.4版本的已知封装逻辑缺陷:你看到的
-9223372036854775808是64位有符号整数的最小值,属于无效时间戳值,是mov封装模块在计算末尾帧/空流的时间戳时溢出导致的误报,和Mac硬件型号、Python版本没有关联。 - 你在4.3.2版本环境下无报错的表现完全符合该问题的触发范围:该缺陷仅存在于FFmpeg 4.4正式版,4.3及更早版本、4.4.1及之后的补丁版本均已修复该问题。
影响说明
- 普通使用场景下无实际影响:该报错仅为日志层面的误告警,不会破坏输出文件的音视频流数据,你观察到的输出文件可正常使用是普遍现象。
- 仅两种特殊场景可能出现异常:一是对输出文件做二次剪辑时,部分专业剪辑软件可能识别文件时长异常;二是将输出文件用于对封装格式校验严格的直播、点播分发场景时,可能出现无法正常推流/拉流的问题,日常存储、本地播放场景完全可以忽略该报错。
解决方法
你可以根据自己的使用场景任选一种方案消除报错:
- 降级FFmpeg版本到4.3.x分支,和你无报错环境的版本保持一致即可。
- 保留当前FFmpeg 4.4版本,在你的转码命令中添加
-fflags +genpts参数强制重新生成输出文件的时间戳,修改后的命令如下:
ffmpeg -y -i in_file.mov -loglevel warning -fflags +genpts -codec:v libx264 -preset veryfast -b:v 10000k -minrate 8000k -maxrate 10000k -bufsize 4800k -threads 0 -movflags +faststart -s 1920x1080 -pix_fmt yuv420p -codec:a aac out_file.mov
- 升级FFmpeg版本到4.4.1或更高版本,官方已在后续更新中修复了该误报问题。
内容的提问来源于stack exchange,提问作者Christy Kail
相关产品推荐
相关产品推荐

