AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 414942
Accepted
C.Astraea
C.Astraea
Asked: 2018-01-06 00:46:19 +0800 CST2018-01-06 00:46:19 +0800 CST 2018-01-06 00:46:19 +0800 CST

O comando ffmpeg falha silenciosamente dentro do script, mas funciona quando executado diretamente

  • 772

Tem um script que gera um fluxo rtmp que é executado dentro de uma tela usando ffmpeg, mas falha por algum motivo? Se rodar direto na linha de comando funciona então tentei rodar abrindo > screen , rodando e fechando a tela com ctrl + d mas mesmo assim as vezes fecha por motivo.

Existe uma maneira de registrar o stderr do ffmpeg dentro do script para ver por que o comando falha dentro do script, mas funciona quando executado diretamente?

#!/bin/bash

if [ "$1" = "run" ]; then
        source $HOME/.bash_aliases
        while [ 1 ]; do 
ffmpeg -f x11grab -s 1000x563 -framerate 30 -i $DISPLAY+10,151 -f pulse -ac 2 -i default -c:v libx264 -preset ultrafast -tune zerolatency -x264opts keyint=30:min-keyint=10 -b:v 2000k -pix_fmt yuv420p -s 1000x562 -c:a aac -b:a 160k -ar 44100 -t '4:00:00' -threads 0 -f flv rtmp://IPADDRESS:1935/live1/$CHANNEL
        done
else
        killall -9 ffmpeg > /dev/null 2>&1
        sleep 5s;
        screen -ls | grep ffmpeg > /dev/null 2>&1
        if [ "$?" = "1" ]; then
                screen -mdS ffmpeg $0 run
        fi
fi

Obrigado ~

shell-script ffmpeg
  • 3 3 respostas
  • 3371 Views

3 respostas

  • Voted
  1. Best Answer
    thecarpy
    2018-01-06T01:41:10+08:002018-01-06T01:41:10+08:00

    Existe uma maneira de registrar o stderr do ffmpeg dentro do script para ver por que o comando falha dentro do script, mas funciona quando executado diretamente?

    Aqui está, encaminhe o fluxo 2, stderr, para um arquivo em tmp. Ah, e como você não quer sobrescrever o arquivo tmp o tempo todo, adicione o PID ao seu nome:

    my_command 2> /tmp/ffmpeg_error$$.log
    

    Agora, aplicado ao seu ffmpeg:

    ffmpeg -f x11grab -s 1000x563 -framerate 30 -i $DISPLAY+10,151 -f pulse -ac 2 -i default -c:v libx264 -preset ultrafast -tune zerolatency -x264opts keyint=30:min-keyint=10 -b:v 2000k -pix_fmt yuv420p -s 1000x562 -c:a aac -b:a 160k -ar 44100 -t '4:00:00' -threads 0 -f flv rtmp://IPADDRESS:1935/live1/$CHANNEL 2> /tmp/ffmpeg_error$$.log
    
    • 3
  2. Calabacin
    2018-01-06T01:12:03+08:002018-01-06T01:12:03+08:00

    Sem mais informações, a primeira coisa que me vem à cabeça é que, ao executar o script, você provavelmente terá um ambiente mínimo. Você está executando a partir do cron? Nesse caso, você pode não ter acesso a $CHANNEL, por exemplo.

    Em qualquer caso, você pode chamar seu script usando 2> para redirecionar a saída de erro padrão para um arquivo. Por exemplo:

    ./script.sh > result.log 2> error.log
    

    Se você estiver chamando o ffmpeg de um script, deverá adicionar redirecionamentos no final do comando ffmpeg dentro desse script. Você faria algo assim dentro do seu script:

    ffmpeg (your-params-here) > result.log 2> error.log
    
    • 1
  3. Dave
    2018-06-13T20:09:27+08:002018-06-13T20:09:27+08:00

    Tente a -nostdinbandeira para ffmpeg.

    Embora possivelmente não esteja diretamente relacionado à pergunta original dos principais pôsteres, este é o principal resultado da pesquisa no momento para "ffmpeg falha de dentro do script", então estou compartilhando minha descoberta de qualquer maneira na esperança de que alguém seja ajudado.

    Eu acertei isso sempre que corri ffmpegde dentro de um arquivo cat 'file' | while read INFILE ; do loop. Executar ffmpegfora desse loop ou por si só funcionaria bem. Adicionar o loop faria com que ele despejasse dados no console. Não sei exatamente por que, mas adicionar -nostdincurou meu problema, pois acho que o while read e o ffmpeg estavam brigando por stdin. Estou aberto a ouvir as explicações de outras pessoas sobre o motivo pelo qual -nostdinfuncionou no meu caso.

    • 0

relate perguntas

  • Subtraindo a mesma coluna entre duas linhas no awk

  • Um script que imprime as linhas de um arquivo com seu comprimento [fechado]

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Dividir por delimitador e concatenar problema de string

  • MySQL Select com função IN () com array bash

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve