我使用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标志可能有所帮助,但似乎没有任何区别。
答案 0 :(得分:6)
您可以在输入上尝试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
答案 1 :(得分:2)
我已经通过强制ffmpeg
使用tcp
而不是udp
来解决此问题。您的命令将如下所示:
添加-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