2017-08-31 112 views
1

我使用ffmpeg 2.2.2(Windows)将实时相机流导出为JPG帧。我正在使用命令行:ffmpeg 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文件。例如,文件的顶部是好的,但是相同的像素会拖拽图像的其余部分。这里有一个例子: enter image description here

我怎么能强迫的ffmpeg要么1)保存后丢弃这些损坏的图像,或2)仅仅是一个错误后,像这种情况发生时“不写”的图像文件?

我认为err_detect标志可能会有帮助,但它似乎没有什么区别。

回答

4

您可以尝试输入上的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