我正在使用 ffmpeg 2.2.2 (Windows) 将实时摄像机流导出为 JPG 帧。我正在使用命令行:
ffmpeg -err_detect aggressive -i rtsp://[ip address]:554/11 -r 1 -s 640x320 -an -f image2 c:\temp\snapshots\snapshot-%03d.jpg
这将启动一个连续过程,该过程每秒从实时流中导出大约 1 帧。但是,在导出期间的不同时间,ffmpeg 会抛出如下错误:
[h264 @ 00037ae0] RTP: missed 2 packets=00:01:09.00 bitrate=N/A dup=0 drop=1186
[h264 @ 02fbc340] Cannot use next picture in error concealment
[h264 @ 02fbc340] concealing 4386 DC, 4386 AC, 4386 MV errors in P frame
[h264 @ 00037ae0] RTP: missed 13 packets
[h264 @ 02fbf7a0] left block unavailable for requested intra mode at 0 15p=1196
[h264 @ 02fbf7a0] error while decoding MB 0 15, bytestream 128288
[h264 @ 02fbf7a0] concealing 6409 DC, 6409 AC, 6409 MV errors in I frame
但是,它会继续创建一个损坏的 jpg 文件。例如,文件的顶部很好,但相同的像素会在图像的其余部分涂抹。这是一个例子:
如何强制 ffmpeg 1)在保存后丢弃这些损坏的图像,或 2)在发生此类错误后简单地将图像“不写入”到文件中?
我认为 err_detect 标志可能会有所帮助,但似乎没有什么区别。
最佳答案
你可以试试discardcorrupt输入上的标志。完整的命令行将是:
ffmpeg -err_detect aggressive -fflags discardcorrupt -i rtsp://[ip address]:554/11 -r 1 -s 640x320 -an -f image2 c:\temp\snapshots\snapshot-%03d.jpg
关于ffmpeg jpg 帧捕获 - 如何丢弃损坏的帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45983605/