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

Pau*_*Lee 5 ffmpeg

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

图像

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

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

slh*_*hck 11

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

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
Run Code Online (Sandbox Code Playgroud)

从您调用 ffmpeg 的任何脚本或 shell 重复查询输出,并监视以frame=. 如果数字没有改变,则编码过程挂起。

您可以在此处查看 Python 函数重复查询 ffmpeg 命令输出的示例,并yield以 来表示其进度out_time

  • 我还发现添加“-loglevel error”很有帮助。这将删除通常在开头出现的所有其他输出。 (3认同)

小智 -1

我们使用此类代码来转换并检测 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.";         
    }
Run Code Online (Sandbox Code Playgroud)