检测FFmpeg是否正在运行或已停止运行

时间:2013-02-21 08:55:43

标签: c process ffmpeg

我使用 C 扫描包含ffmpeg提取的帧的目录。现在,如果在扫描期间到达最后一个文件,我需要检查两个条件:

  1. 视频持续时间结束时,它是最后一个文件。
  2. 它是ffmpeg突然终止并且无法再填充目录的最后一个文件
  3. 我的 C 计划工作流程如下:

    while(<there exists files in the directory>)
    {
       // iterate over them and do something with each frame
    }
    
    // coming out of the loop means no more files available...so I need a if condition
    if(<check if ffmpeg is stopped>) // <-- need to know what to put inside the condition
    {
       // start it again
    }
    else
    {
      // video is over, nothing more left to do
    }
    

    我认为我可以使用ffmpeg的Process ID来做到这一点,但我怎么能得到这些信息呢?检查ffpmeg是否已停止的任何其他替代方式?

    一些元数据

    操作系统: Windows 7
    IDE: Dev C ++
    使用的语言: C

2 个答案:

答案 0 :(得分:0)

不确定这是否适合您的情况,但是...在unix世界中,在后台运行的程序通常会创建一个包含其进程ID的公共可读文件。然后在完成后删除它。

您可以从批处理脚本创建此文件,然后在C程序中检查该文件中的pid是否正在运行。

答案 1 :(得分:0)

您绝对可以等待FFmpeg进程完成。您通常会获得ffmpeg.exe流程处理,并使用wait functions等待它,检查其GetExitCodeProcess或两者。

如果您没有句柄,但确实有进程标识符,OpenProcess将为您提供帮助。

当然,如果您使用本机Windows API直接处理帧,而不是通过文件和外部进程,则不必遇到麻烦。