FFmpeg JPG帧捕获 - 如何丢弃损坏的帧

10

我正在使用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文件。例如,文件顶部是正常的,但是相同的像素向下涂抹整个图像。以下是一个例子:enter image description here 我该如何强制FFmpeg执行以下操作之一:1)在保存后丢弃这些损坏的图像,或者2)在出现此类错误后根本不将图像写入文件?
我认为err_detect标志可能有所帮助,但似乎没有任何区别。
2个回答

12

您可以在输入时尝试使用discardcorrupt标志。完整的命令行如下:

您可以尝试在输入时使用“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

我尝试了这个,但似乎没有起到帮助的作用。 - undefined

3

我已经通过强制ffmpeg使用tcp来解决了这个问题。您的命令应如下所示:

在命令中添加 -rtsp_transport tcp:

ffmpeg -rtsp_transport tcp -i rtsp://<ip_camera_url> -r 1 -s 640x320 -an -f image2 c:\temp\snapshots\snapshot-%03d.jpg

嗨,我遇到了“未找到Option rtsp_transport”的问题。 - Salem
这似乎有点帮助,但并不完全。我仍然会遇到损坏的帧。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接