如何远程停止ffmpeg?

Ada*_*dam 11 linux ffmpeg

我在另一台机器上运行ffmpeg进行屏幕捕获.我希望能够阻止它远程录制.FFMPEG要求按下q以停止编码,因为它必须完成一些完成以干净地完成文件.我知道我可以用kill/killall杀死它但是这会导致视频损坏.

Press [q] to stop encoding
Run Code Online (Sandbox Code Playgroud)

我在谷歌专门为此找不到任何东西,但有些人建议回复到/ proc // fd/0将起作用.

我试过这个,但它并没有停止ffmpeg.然而,q显示在运行ffmpeg的终端中.

echo -n q > /proc/16837/fd/0
Run Code Online (Sandbox Code Playgroud)

那么如何将角色以这样的方式发送到另一个现有流程呢?就好像它是在本地键入的一样?还是有另一种方法可以干净地远程停止ffmpeg.

小智 15

这是我在遇到这个问题时发现的一个巧妙的技巧:创建一个空文件(它不必是命名管道或任何东西),然后在停止录制时向它写'q'.

  1. $ touch stop
  2. $ <./ stop ffmpeg -i ... output.ext>/dev/null 2 >> Capture.log&
  3. $等待停止时间
  4. $ echo'q'>停止

FFmpeg停止,好像它从终端STDIN得到'q'.


sas*_*alm 12

较新版本的ffmpeg不再使用'q',至少在Ubuntu Oneiric上,而是他们说按Ctrl + C来阻止它们.因此,对于较新的版本,您只需使用'killall -INT'向它们发送SIGINT而不是SIGTERM,它们应该干净地退出.

  • 现在从最新的 Git 编译的 ffmpeg 仍然说“按 [q] 停止”。Ubuntu 2015.10 也是如此。不过,Ctrl+C 也有效。 (3认同)
  • 最新的ffmpeg仍然使用`q`退出 (2认同)