ffmpeg interrompe o streaming se uma entrada parar

ffmpeg interrompe o streaming se uma entrada parar

Estou tentando criar um stream mpeg-ts onde o vídeo é uma captura de tela do Xvfb e o áudio é de rádio da Internet (stream mp3 ou aac). 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é que eu encerre o ffmpeg e o inicie 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 houve falha para que eu possa escrever um script para reiniciá-lo?

Responder1

Tente usar ouma almofadafiltro de áudio para estender o fluxo com silêncio indefinido. Você deve ser capaz de adicionar um-afcomando para sua string existente ...

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

...ou altere seu existente-vfcorda para-filtro_complexopara lidar com os comandos de filtragem de áudio e vídeo...

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

Observe que os especificadores de fluxo de entrada ("[0]" para x11grab e "[1]" para o fluxo de áudio)deveria estaropcional, mas algumas versões mais antigas do FFmpeg podem se confundir se não forem especificadas.

Se nenhuma configuração de filtro funcionar como está, pode ser necessário adicionar o-mais curtoflag também em seus parâmetros de saída gerais (não como parte da string do filtro, lembre-se), por exemplo:

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

informação relacionada