Processing播放ProRes编码mov视频出现No valid frames decoded报错原因查询
报错根因分析
- 代码逻辑缺失帧可用性校验:你当前的代码在
draw()循环中无条件执行movie.read()和绘制操作,没有先判断视频是否有新的可读取帧。当视频播放到末尾、或者解码器加载帧出现延迟时,read()会尝试读取不存在的帧,触发GStreamer解码器抛出无有效帧的错误。
修正后的代码参考:Movie movie; public void setup() { // 补充你自己的画布尺寸及其他配置 movie = new Movie(this, "ani_5.mov"); movie.loop(); } public void draw() { // 先判断是否有可用帧再读取 if (movie.available()) { movie.read(); } image(movie, 0, 0, width, height); } - 视频文件本身存在损坏/编码兼容问题:报错明确指向
avdec_prores0解码器,说明你使用的是ProRes编码的mov格式视频,若文件存在尾部截断、元数据损坏,或是你使用的GStreamer 1.16.0版本对该ProRes的编码profile(如ProRes 4444、带透明通道的ProRes)兼容度不足,解码到视频末尾时就会识别不到有效帧数据,抛出该报错。
这类问题可以通过将视频转码为H.264编码的MP4格式解决,H.264是Processing视频库兼容度最高的编码格式。 - 循环播放的衔接间隙问题:你调用了
movie.loop()循环播放,当视频第一轮播放结束、第二轮加载的间隙,解码器会短暂读取不到有效帧,也会触发该报错,添加available()判断即可屏蔽该类偶发报错。
内容的提问来源于stack exchange,提问作者l0r3nz4cc10
相关产品推荐
相关产品推荐

