最近在用ffmpeg处理USB摄像头生成视频的过程中发现,如果将视频分文件存储,第二第三个文件会出现花屏或者黑屏的现象,用ffprobe -v error -show_frames 命令提示co located POCs unavailable。
将文件合并,用以下命令
ffmpeg -i input1.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts
ffmpeg -i input2.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts
ffmpeg -i input3.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input3.ts
ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4
出现reference picture missing during reorder,网上关于这个的解释比较少,从ffmpeg的源码找到这两个提示的出处代码,但是代码逻辑看不太清楚,猜测大概的原因就是因为摄像头一直没动,后面分文件的时候的帧没有I帧,前面的AVPacket,然后尝试了将flags设置为flags = AV_PKT_FLAG_KEY,设置后发现第二个视频文件和第三个视频文件的花屏和黑屏情况几乎消失,但是后面的还是有,后来设置了gop_size参数,再重新生成mp4文件,打开发现所有的mp4文件不再出现花屏或者黑屏。