tecmint convert change linux ffmpeg

linux - convert - u ffmpeg



Cómo detener ffmpeg de forma remota? (3)

Estoy ejecutando ffmpeg en otra máquina para captura de pantalla. Me gustaría poder detener la grabación de forma remota. FFMPEG requiere que se presione q para detener la codificación, ya que tiene que hacer una finalización para terminar el archivo limpiamente. Sé que podría matarlo con kill / killall, pero esto puede llevar a videos corruptos.

Press [q] to stop encoding

No puedo encontrar nada en google específicamente para esto, pero algunos sugieren que el eco en / proc // fd / 0 funcionará.

Lo he intentado pero no detiene ffmpeg. Sin embargo, q se muestra en la terminal en la que se está ejecutando ffmpeg.

echo -n q > /proc/16837/fd/0

Entonces, ¿cómo puedo enviar un personaje a otro proceso existente de tal manera que sea como si hubiera sido escrito localmente? ¿O hay otra forma de detener ffmpeg remotamente?


Las versiones más nuevas de ffmpeg ya no usan ''q'', al menos en Ubuntu Oneiric, sino que dicen presionar Ctrl + C para detenerlas. Entonces, con una versión más nueva, simplemente puede usar ''killall -INT'' para enviarlos SIGINT en lugar de SIGTERM, y deben salir limpiamente.


He aquí un buen truco que descubrí cuando me enfrenté a este problema: crear un archivo vacío (no tiene que ser una tubería con nombre ni nada) y luego escribir ''q'' cuando sea el momento de dejar de grabar.

  1. $ toque detener
  2. $ <./ stop ffmpeg -i ... output.ext> / dev / null 2 ​​>> Capture.log &
  3. $ espera el tiempo de parada
  4. $ echo ''q''> stop

FFmpeg se detiene como si obtuviera ''q'' del terminal STDIN.


También puede intentar usar "esperar" para automatizar la ejecución y la detención del programa. Tendría que iniciarlo usando algún shell virtual como screen , tmux o byobu y luego iniciar el ffmpeg dentro de él. De esta forma, podría obtener de nuevo la pantalla de shell virtual y dar la opción "q".

  1. Local o remotamente inicie una sesión de shell virtual, digamos con "pantalla". Nombra la sesión con la opción -S , como la screen -S recvideo Luego puedes iniciar el ffmpeg como quieras. Puede, opcionalmente, desconectarse de esta sesión con Ctrl + a + d.

  2. Conéctese a la máquina donde se ejecuta ffmpeg dentro de la pantalla (o tmux o lo que sea) y vuelva a conectarla: screen -d -RR recvideo y luego envíe la "q"

Para hacerlo desde dentro de un script, puede usar expect, como:

prompt="> " expect << EOF set timeout 20 spawn screen -S recvideo expect "$prompt" send -- "ffmpeg xxxxx/r" set timeout 1 expect eof EOF

Luego, en otro momento o punto de secuencia de comandos o en otro script lo recuperas:

expect << EOF set timeout 30 spawn screen -d -RR recvideo expect "$prompt" send -- "q" expect "$prompt" send -- "exit/r" expect eof EOF

También puede automatizar toda la sesión ssh con expect, pasar una secuencia de comandos y "esperar" que haga lo que desee.