Usando o bash para ler a saída do terminal FFmpeg

0

Eu tenho uma pequena dúvida sobre como ler o texto de saída do terminal, gerado pelo FFmpeg quando estiver rodando. Eu tenho um servidor de streaming com um fluxo de câmera, que às vezes corrompe e cai, quando há problemas de conexão com a Internet na câmera local é colocado em. Este fluxo é verificado pelo loop while e quando a conexão cai completamente, o loop tenta reiniciá-lo.

Mas em algumas ocasiões, quando há uma grande perda de pacotes, o fluxo corrompe, mas não para completamente. A codificação FFmpeg trava e a conexão ao servidor não cai. (Meu ciclo de "reinício" é inútil). Quando isso ocorre, o FPS de vídeo começa a cair para valores mais baixos e, em seguida, eu preciso capturar esse valor e fazer as ações necessárias.

Essa linha com essa informação é assim:

frame=74190 fps= 20 q=0.0 size=  285208kB time=01:01:49.45 bitrate= 629.9kbits/s

Portanto, se o valor em fps= 20 cair para 18 e menos, ações apropriadas serão tomadas. O que eu preciso usar? Tentei canalizar para grep , mas sem sucesso.

Ficarei feliz por qualquer solução ou dicas para fazer algum progresso.

    
por Pavol 12.06.2017 / 15:47

1 resposta

1

Observe que a saída do ffmpeg é gravada em stderr e não stdout ( é isso? ).

Se você quiser a saída de log do grep ffmpeg, primeiro é necessário canalizar tudo de stderr para stdout , que no Bash você pode fazer com:

ffmpeg … 2>&1 | grep …

Se você estiver executando processos de um servidor, no entanto, seria melhor direcionar a saída para um arquivo de log, em seguida, grep this, se necessário.

ffmpeg … 2>&1 > /var/log/ffmpeg.log
grep "fps=…" /var/log/ffmpeg.log

Observe que, a cada nova chamada de > /var/log/ffmpeg.log , esse arquivo específico é truncado e reescrito pelo seu shell. Você pode acrescentar a um arquivo existente usando >> .

    
por 13.06.2017 / 11:43