LINUX.ORG.RU

Как в vlc заменить звук во входном видео потоке?

 , , ,


0

3

Собственно вопрос: как динамически в vlc стриме заменить звуковую дорожку? Задача: при циклическом вещании файлов в vlc по udp multicast, раз в несколько минут, заменять звук в mpeg-ts потоке на звук с другого источника.

В avconv/ffmpeg есть такая опция как -map, c ней разобрался - именно она отрабатывает хорошо, но не получается подобрать параметры для стабильного стрима, рассыпается в артефактах, перепробовал кучу параметров всё в пустую. В vlc стрим стабилен, но как заменить звук нет представления.

Если есть другие решения с аналогичной -map функцией, рассмотрю все возможные варианты. Заранее благодарен.

В ffmpeg вся цепочка (граф) (входы->фильтры->выходы) задается при запуске и на лету меняться не может, но можно менять параметры звеньев цепочки. Далее имхо, т.к. руками не трогал, только исходники по диагонали просматривал. Если все источники и расписание переключения известны на этапе запуска ffmpeg, то можно все источники смешать в один поток и менять их громкость: [asendcmd -> volume]* -> amix. Но если источников много, или список и расписание меняется... Ну, ты понел.

За VLC ничего скажу, но поставлю на то, что он не справится с такой задачей. Подписался на тему...

fopen ★★
()
Ответ на: комментарий от fopen

Вот самый удачный пример ролики воспроизводятся рандомно из директории rolz_mp2, а звук у всех из файла banzai_1.mpg

#!/bin/bash
while true; do
avconv -re -i "`find /home/rolz_mp2 -type f -name '*.mpg'|sort -R|head -n 1`" -i "/home/rolz_mp2/banzai_1.mpg" -c copy -map 0:v -map 1:a -f mpegts udp://239.10.10.10:1234?pkt_size=1316
done

Даже без замены звука стрим рассыпается в артефактах на компе, на приставках ещё хуже, приставки MAG-250

Вот пример удачной конфигурации VLC (скрипт запуска через VLM)

#!/bin/bash
echo "new channel_1 broadcast enabled loop" >/home/vlm.conf
cat /home/rolz/playlist.txt | while read line 
do
echo "setup channel_1 input /home/rolz/$line" >>/home/vlm.conf
done
echo "setup channel_1 output #gather:std{access=udp{caching=1},mux=ts{shaping=1,use-key-frames},dst=239.10.10.15:1234}" >>/home/vlm.conf
echo "setup channel_1 option file-caching=1" >>/home/vlm.conf
echo "setup channel_1 option sout-keep" >>/home/vlm.conf
echo "setup channel_1 option no-sout-audio" >>/home/vlm.conf
echo "control channel_1 play" >>/home/vlm.conf
killall vlc
/home/vlc-2.0.5/vlc --vlm-conf /home/vlm.conf
но остаётся проблема со звуком, невозможно его пустить в одном потоке с видео

MeeCola
() автор топика
Ответ на: комментарий от MeeCola

Есть два плейлиста. Взять с одного видео, с другого звук и свести их вместе можно так:

ffmpeg -filter_complex '
   movie=video1.avi [v1] ; 
   movie=video2.avi [v2];
   [v1] [v2] concat=n=2:v=1:a=0 ;
   amovie=audio1.avi [a1] ;
   amovie=audio2.avi [a2] ;
   amovie=audio3.avi [a3] ;
   [a1] [a2] [a3] concat=n=3:v=0:a=1'
И далее вещать это с помощью ffserver.

А вчера я чушь написал.

fopen ★★
()
Ответ на: комментарий от fopen

Спасибо, этот вариант я тоже попробую, но в любом случае даже при простейшем использовании avconv, например:

avconv -re -i "/home/rolz_mp2/banzai_1.mpg" -c copy -f mpegts udp://239.10.10.10:1234
Не могу получить нормальное изображение, всё в артефактах. Перепробовал все параметры, которые нашёл в документации, вещательный сервер не загружен и на 5%, всё оборудование держит igmp и в подсеть роутится мультикаст. Я уже не знаю что и делать. ЧЯДНТ?

MeeCola
() автор топика
Ответ на: комментарий от MeeCola

5% - это много для -c copy, если речь о современном настольном железе. Возможно идет перекодирование. -c copy не всегда будет работать. В приведенном мной примере вещания плейлистов перекодирование однозначно будет, и ни какие -c copy этого не изменят.

Раз лыжи не едут начни с простейшего, вещай тестовую картинку на локальный адрес: ffmpeg -re -f lavfi -i «testsrc=size=720x576:rate=25» -vcodec mpeg2video -r 25 -f mpegts «udp://127.0.0.1:1301»

Далее добавляй свои хотелки: мультикаст, источник и т.д.

Смотри плеером, запущенным из консоли, и следи за сообщениями плеера.

За avconv не скажу, но ffmpeg работает, просто надо уметь его готовить.

fopen ★★
()
Ответ на: комментарий от MeeCola

Перекодирование при avconv -re -i «/home/rolz_mp2/banzai_1.mpg» -c copy -f mpegts udp://239.10.10.10:1234 проверь. Сравни что было, что стало:

ffprobe "/home/rolz_mp2/banzai_1.mpg"
ffprobe udp://239.10.10.10:1234

fopen ★★
()
Ответ на: комментарий от fopen

Cпасибо, всё верно, это avconv был основной причиной артефактов и ошибок при экспериментах. Попробовал ffmpeg из рекомендуемых репов и сразу всё стало лучше. А моя убунта упорно твердила, что ffmpeg устарел и будет полностью заменён avconv. Буду продолжать пробовать, если всё удастся выложу рабочие параметры. Ещё раз спасибо!

MeeCola
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.