Я получаю вход rtmp с видео и стерео аудио. Мне нужно разделить аудио и отправить два видео с левого канала и на правый канал на разных адресах. У меня есть такая команда:Оптимизация разделения и передачи звука ffmpeg
ffmpeg -r 25 -loop 1 -i background.png \
-rtbufsize 2000M -i rtmp://stereoinput \
-filter_complex "[1:v][0:v]overlay[video];[video]split[video][video2];[1:a]channelsplit[aleft][aright]" \
-map [video] -map [aleft] -c:v libx264 -minrate 1000k -maxrate 1500k -b:v 1300k -bufsize 1000k \
-pix_fmt yuv420p -r 25 -g 100 -tune zerolatency -preset ultrafast \
-c:a libmp3lame -ar 44100 -y -f flv rtmp://out_left \
-map [video2] -map [aright] -c:v libx264 -minrate 1000k -maxrate 1500k -b:v 1300k -bufsize 1000k \
-pix_fmt yuv420p -r 25 -g 100 -tune zerolatency -preset ultrafast \
-c:a libmp3lame -ar 44100 -y -f flv rtmp://out_right
Но он работает медленно: он выводит только 20 кадров в секунду. Я кодирую на лазурной VPS с 4 ГБ оперативной памяти и 4 ядрами и никогда не думал, что может возникнуть такая проблема. Он отлично кодирует один поток.
У вас есть идеи, как сделать это быстрее? Для примера, мне также не нравится, что мне нужно дважды закодировать один и тот же видеопоток. Я не могу позволить себе две команды, потому что мне нужно увидеть весь вывод команды.
Я попытался использовать tee более простым способом, как 'ffmpeg -i input.mp4 -c copy -f tee [f = flv] rtmp:/out1 | [f = flv] rtmp:// out2 "' on Win it просто говорит: 'Выходной файл # 0 не содержит никакого потока' даже с' loglevel verbose', на Ubuntu работает, но .. Например youtube говорит, что он получает поток, но не запускает трансляцию , а другой проигрыватель по обслуживанию показывает только черный экран. Ffplay поймать его успешно. – Ngoral
В этом конкретном случае это зависит от того, соответствует ли кодировка flv. Вы попробовали мою команду выше? – Mulvya
Да, я пробовал и фактически не получал видео, только звук. – Ngoral