如何实时获取ffmpeg命令运行状态?

如何实时获取ffmpeg命令运行状态?

我在 Linux 上使用 ffmpeg 实时录制视频到 Youtube。当我输入 ffmpeg 命令时,ffmpeg 运行良好。但是,音频设备出现故障,从音频设备故障时起,帧数根本没有增加。Youtube 上的视频录制停止了。但 ffmpeg 命令仍在运行,帧数没有增加,如下图所示。

图像

我的问题是,如何获取 ffmpeg 命令之外运行的 ffmpeg 的状态?

我的第一个解决方案是读取帧计数器字段,如果计数器没有改变,则 ffmpeg 上会出现故障。

答案1

如果使用以下-progress - -nostats选项运行 ffmpeg,它将以可解析的格式将其进度打印到输出中:

frame=2675
fps=0.00
stream_0_0_q=-0.0
bitrate=N/A
total_size=N/A
out_time_us=107000000
out_time_ms=107000000
out_time=00:01:47.000000
dup_frames=0
drop_frames=0
speed= 214x
progress=continue

无论你从哪个脚本或 shell 调用 ffmpeg,都可以反复查询该输出,并观察以 开头的行frame=。如果数字没有变化,则表示编码过程挂起了。

您可以看到一个 Python 函数的示例,该函数反复查询 ffmpeg 命令的输出,yield并根据以下内容计算其进度out_time这里

答案2

我们使用这类代码来转换和检测 PHP 中 FFmpeg 命令的完成情况。希望它能对你有所帮助。

$status=shell_exec('ffmpeg  -loglevel 16 -i inputfile.gsm -acodec libmp3lame test.mp3 2>&1; echo $?');
if ($status==0) {
                # code...
                echo "The file converted successfully.";
            }
        else
            echo "The file cant converted.";         
    }

相关内容