ffmpeg jpg帧捕获 - 如何丢弃损坏的帧

Rya*_*ggs 2 jpeg ffmpeg video-processing corruption

我正在使用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
Run Code Online (Sandbox Code Playgroud)

这开始了一个连续的过程,它从实时流中每秒输出大约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
Run Code Online (Sandbox Code Playgroud)

但是,它会继续创建一个已损坏的jpg文件.例如,文件的顶部很好,但是相同的像素会抹掉图像的其余部分.这是一个例子: 在此输入图像描述

如何强制ffmpeg 1)保存后丢弃这些损坏的图像,或者2)在发生这样的错误后,简单地"不写"图像到文件中?

我认为err_detect标志可能有所帮助,但似乎没有任何区别.

小智 7

您可以尝试输入上的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
Run Code Online (Sandbox Code Playgroud)