ffmpeg interrompe a transmissão se uma entrada parar

0

Estou tentando criar um fluxo mpeg-ts em que o vídeo é um screengrab do Xvfb e o áudio é do rádio da internet (fluxo de mp3 ou aac). Ele funciona razoavelmente bem, mas se houver um problema com o rádio da internet, toda a saída será interrompida, não apenas o áudio, e não será retomada até eu matar o ffmpeg e iniciá-lo novamente.

Aqui está a linha de comando que estou usando

DISPLAY=:1 ffmpeg -re -video_size 768x576 -framerate 50 -f x11grab -i :1 -i http://internet-radio/mp3 -c:v mpeg2video -b:v 6000k -minrate 6000k -maxrate 6000k -bufsize 3000k -dc 10 -top 0 -f mpegts -c:a mp2 -ac 2 -b:a 192k -flags +ilme+ildct -vf "tinterlace=interleave_top" udp://192.168.0.1:1234?pkt_size=1316

Existe uma maneira de evitar que ele pare (apenas produza silêncio até que a entrada de áudio retorne) ou pelo menos detecte que ele falhou para que eu possa escrever um script para reiniciá-lo?

    
por Pentium100 09.06.2015 / 13:58

1 resposta

0

Tente usar o filtro de áudio apad para estender o fluxo com silêncio indefinido. Você deve ser capaz de adicionar um comando -af à sua string existente ...

-vf "[0]tinterlace=interleave_top" -af "[1]apad"

... ou altere sua string -vf para -filter_complex para manipular os comandos de filtragem de áudio e vídeo ...

-filter_complex "[0]tinterlace=interleave_top;[1]apad"

Note que os especificadores de fluxo de entrada ("[0]" para o x11grab e "[1]" para o fluxo de áudio) devem ser opcionais, mas algumas versões mais antigas do FFmpeg podem se confundir se eles não estão especificados.

Se a configuração do filtro não funcionar como está, talvez seja necessário incluir o sinalizador -shortest nos parâmetros gerais de saída (não como parte da string de filtro, por exemplo), por exemplo:

-filter_complex "[0]tinterlace=interleave_top;[1]apad" -shortest
    
por 18.06.2015 / 00:00