скрипт bash для запуска / остановки ffmpeg x11grab - PullRequest
1 голос
/ 10 декабря 2011

Приложение сохраняет свой статус в файле на сервере /temp/status.txt. Возможны 4 состояния: wait, ready, recording, finished. С помощью cronjob я хотел бы запустить скрипт оболочки, который проверяет этот файл, и предпринимать следующие действия:

  • ждать -> ничего не делать
  • готов -> выполнить ffmpeg -f x11grab -s cif -r 25 -i :0.0 /tmp/out.mpg. Теперь, когда ffmpeg захватывает, файл status.txt все еще должен быть проверен на предмет изменения статуса,
  • запись -> ничего не делать
  • закончено -> отправить команду q процессу ffmpeg, чтобы выйти из процесса захвата и завершить сценарий.

Я пытался решить это с помощью expect и xdotool, чтобы понять, что это абсолютно неправильный путь. Моя проблема в том, что у меня нет опыта в bash и обработке процессов, дочерних процессов и т. Д.

Ответы [ 3 ]

0 голосов
/ 28 июня 2012

Получите ProcessID и используйте,

с #

     Process p=Process.GetProcessByID(int);
     p.Close();
     p.Dispose();
0 голосов
/ 13 декабря 2018

чтобы отправить q в работающий процесс ffmpeg, вы можете запустить ffmpeg в отдельном сеансе screen, а затем отправить строку в сеанс.

#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.exit после того, как команда ffmpeg закрывает сеанс после завершения ffmpeg.

0 голосов
/ 12 декабря 2011

Я не совсем понимаю, если ваша проблема в том, что вы вообще не знаете, как начать писать сценарий, или у вас просто есть проблема с одним из ваших пунктов Не могли бы вы уточнить свой вопрос?

Я собираюсь предположить, что ваша проблема в том, что вы не знаете, как остановить ffmpeg во время его работы, обычный грязный способ остановить процесс - pkill, как в pkill ffmpeg, это должно работать для большинства целей.

...