bash脚本启动/停止ffmpeg x11grab

时间:2011-12-10 17:01:05

标签: bash process ffmpeg expect

应用程序将其状态存储在服务器/temp/status.txt上的文件中。可能有4种状态:waitreadyrecordingfinished。使用cronjob,我想启动一个shell脚本来检查这个文件并按如下方式采取行动:

  • 等待 - >什么都不做
  • ready - >执行ffmpeg -f x11grab -s cif -r 25 -i :0.0 /tmp/out.mpg。现在,当ffmpeg捕获时,仍然必须检查status.txt文件以更改状态,
  • 录制 - >什么都不做
  • 完成 - >将q命令发送到ffmpeg进程以退出捕获进程并完成脚本。

我试图用expectxdotool解决这个问题,以便意识到这绝对是错误的方式。我的问题是我在bash和处理流程,子流程等方面没有经验。

3 个答案:

答案 0 :(得分:0)

我不太明白,如果您的问题是您根本不知道如何开始编写脚本,或者您只是遇到一个问题 你能澄清一下你的问题吗?

我将假设您的问题是您不知道如何在运行时停止ffmpeg,停止进程的常用脏方法是pkill,如pkill ffmpeg ,这应该适用于大多数目的。

答案 1 :(得分:0)

要将q发送到正在运行的ffmpeg进程,您可以在独立的screen会话中运行ffmpeg,然后将字符串发送到该会话。

#create a session
screen -d -m -S mysession
#prepare an ffmpeg command
cmd="ffmpeg -i input.avi output.mp4; exit"
#send the command to the session
screen -S mysession -p 0 -X stuff "$cmd^M"
#send the q string
screen -S mysession -p 0 -X stuff "q"

https://serverfault.com/a/547144

获得了这个提示

我确定您不再需要此功能。我只是偶然发现了同一个问题,想分享一下。

注意:要在^M之后插入$cmd,必须先按ctrl+v,然后按enter。 ffmpeg命令完成后,exit会关闭会话。

答案 2 :(得分:-1)

获取ProcessID并使用,

C#

     Process p=Process.GetProcessByID(int);
     p.Close();
     p.Dispose();