相机关闭时 ffmpeg 挂起,“q”不会退出

相机关闭时 ffmpeg 挂起,“q”不会退出

我在 Windows 上使用 ffmpeg 录制 3D 打印机的视频。当打印机断电时,ffmpeg 会挂起,按 q 时不会响应。

ffmpeg -i "http://ultimakersystem:8080/?action=stream" Ultimaker.mp4

如果我在这种情况下按下 ctrl+c,ffmpeg 会不干净地关闭,并且不会写入 MOOV 原子,因此生成的文件无法播放。重新打开设备不会解冻 ffpmeg。

我该怎么办?我应该将此报告为 ffmpeg 中的错误吗?

ffmpeg 冻结命令行的屏幕截图

答案1

MP4 容器的设计并不具备容错性。
您可以尝试更宽松的容器格式,如 FLV、TS、WebM、MJPEG 等。

您可以尝试设置timeout参数:

ffmpeg -timeout 10000000 -i "http://ultimakersystem:8080/?action=stream" Ultimaker.mp4

对于 HTTP,超时以微秒为单位。
您也可以尝试添加-listen 1
我不知道它是否会起作用...


作为“开箱即用思维”的解决方案,您可以尝试 RTMP 流式传输到本地主机。

执行一个 FFmpeg 作为监听器:

start ffmpeg -y -listen 1 -timeout 10 -f flv -i rtmp://127.0.0.1:5000/mystream/test -vcodec copy test.mp4

执行第二个 FFmpeg 作为 RTMP 流媒体:
使用测试模式的示例:

ffmpeg -re -f lavfi -i testsrc=duration=25000:size=192x108:rate=25 -f lavfi -vcodec libx264 -crf 17 -pix_fmt yuv420p -f flv rtmp://127.0.0.1:5000/mystream/test

当您终止流媒体进程时,监听器进程也将正常关闭。


在批处理文件中使用它的示例:

start ffmpeg -y -listen 1 -timeout 10 -f flv -i rtmp://127.0.0.1:5000/mystream/test -vcodec copy test.mp4
ffmpeg -i "http://ultimakersystem:8080/?action=stream" -f lavfi -vcodec libx264 -crf 17 -pix_fmt yuv420p -f flv rtmp://127.0.0.1:5000/mystream/test

相关内容