하나의 입력이 중지되면 ffmpeg가 스트리밍을 중지합니다.

하나의 입력이 중지되면 ffmpeg가 스트리밍을 중지합니다.

비디오는 Xvfb의 화면 캡처이고 오디오는 인터넷 라디오(mp3 또는 aac 스트림)의 mpeg-ts 스트림을 만들려고 합니다. 합리적으로 잘 작동하지만 인터넷 라디오에 문제가 있으면 오디오뿐만 아니라 전체 출력이 중지되고 ffmpeg를 종료하고 다시 시작할 때까지 재개되지 않습니다.

내가 사용하고 있는 명령줄은 다음과 같습니다.

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

정지되는 것을 방지하거나(오디오 입력이 반환될 때까지 침묵을 생성) 적어도 실패를 감지하여 다시 시작하는 스크립트를 작성할 수 있는 방법이 있습니까?

답변1

사용해 보세요아파드무기한 침묵으로 스트림을 확장하는 오디오 필터. 다음 중 하나를 추가할 수 있어야 합니다.-af기존 문자열에 대한 명령...

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

...또는 기존 변경-vf문자열을-filter_complex오디오 및 비디오 필터링 명령을 모두 처리하려면...

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

입력 스트림 지정자(x11grab의 경우 "[0]", 오디오 스트림의 경우 "[1]")에 유의하세요.해야한다선택 사항이지만 일부 이전 버전의 FFmpeg는 지정되지 않으면 혼동을 일으킬 수 있습니다.

필터 설정이 모두 그대로 작동하지 않으면 다음을 추가해야 할 수도 있습니다.-가장 짧은일반 출력 매개변수에도 플래그를 지정합니다(필터 문자열의 일부가 아님). 예:

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

관련 정보